访问 iframe 元素并将其更新到 DOM

Posted

技术标签:

【中文标题】访问 iframe 元素并将其更新到 DOM【英文标题】:Access iframe element and update it to the DOM 【发布时间】:2014-09-03 10:33:16 【问题描述】:

我想访问包含 img 标签的 page2.html 元素并将其更新为 page1.html img 标签或将 page1.html 的 img 替换为 page2.html img。 这两个文件都在同一个域中,因此无需担心跨域源策略。

// Page1.html

   <body>

   <img id="someimage1" src="./captcha.asp"></img>
   <iframe src="page2.html"></iframe>
   <script src="http://code.jquery.com/jquery-2.1.1.min.js"></script>
   <script type="text/javascript>
       var getImg = $('iframe').contents().find('#someimage2').html();
       $('#someimage1').replaceWith('<img>' getImg '</img>');
   </script>
   </body>

我将 DOM 更新为 [object] [Object]

// Page2.html

   <body>

   <img id="someimage2" src="./captcha.asp"></img>
   <script src="http://code.jquery.com/jquery-2.1.1.min.js"></script>

   </body>

【问题讨论】:

【参考方案1】:

我会帮你一个 Vanilla JS 解决方案,你可以修改为 JQuery:

首先检查您的 IFrame 是否包含任何文档

Firefox 和 Chrome 解决方案

var frame  = document.getElementById("frame");
if(frame.contentDocument) 
 // get the inner Document
 var innerDocument = frame.contentDocument;
 var img = innerDocument.getElementsByTagName("img")[0];

IE 解决方案

var frame  = document.getElementById("frame");
if(frame.contentDocument) 
 // get the inner Document
 var innerDocument = frame.contentWindow.document;
 var img = innerDocument.getElementsByTagName("img")[0];

当你得到图像后,剩下的只是一个 DOM 操作操作。

获取内部文档正文

var getIFrameCOntent = function(iFrame) 
  var frame = document.querySelector(iFrame);
  var innerDocument = frame.contentDocument || frame.contentWindow.document;

   var body = innerDocument.getElementsByTagName("body")[0];  

  return body;

简单的解决方案

var frame = document.getElementById('frame').contentWindow.document.body;
    console.log(frame.getElementsByTagName("img")[0]);

【讨论】:

contentDocument 属性在 querySelector 原型中不存在。需要修改:[].forEach.call(document.querySelector(iFrame), function (frame) var body = innerDocument.getElementsByTagName("body")[0]; );【参考方案2】:

试试这个代码....

page1.html...
<html>
<head>
    <script src="http://code.jquery.com/jquery-2.1.1.min.js"></script>
</head>
<body>
    <div id="imgAA">
    </div>
    <img src="img1.jpg" style="width:100px;" id="imgBB"/>
    <script>
            $(document).ready(function()
                $("#imgAA").load("page2.html",function(data)
                    $("#imgBB").attr("src",$("#imgAA").find("img").attr("src"));
                );
            );
    </script>
</body>

page2.html...
<body>
   <img src="img2.jpg" style="width:50px;" id="img2"></img>
</body>

试试这个,告诉我它工作正常......

【讨论】:

如果不想显示page2.html内容就隐藏div标签 如果你得到了你想找到的答案,请投票并标记为答案

以上是关于访问 iframe 元素并将其更新到 DOM的主要内容,如果未能解决你的问题,请参考以下文章

获取IFRAME的值并将其插入到DIV中

您如何获取用户的输入并将其添加到 iframe 中的 URL?

将数据发布到站点并将其加载到 iframe 中的另一个站点(角度和 c#)

jQuery 跨域 iframe innerHtml

使用 JQuery 访问由 chrome 扩展注入的 iframe

ajax iframe重新加载后图像不显示