【问题标题】:Access iframe element and update it to the DOM访问 iframe 元素并将其更新到 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>

【问题讨论】:

    标签: javascript jquery ajax dom iframe


    【解决方案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标签
    • 如果你得到了你想找到的答案,请投票并标记为答案
    猜你喜欢
    • 1970-01-01
    • 2017-05-04
    • 2011-02-06
    • 2016-05-09
    • 1970-01-01
    • 1970-01-01
    • 2016-05-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多