【问题标题】:Extract XML content of an IFrame under IE9在 IE9 下提取 IFrame 的 XML 内容
【发布时间】:2012-08-31 14:22:15
【问题描述】:

我一周以来一直在处理这个问题

我想做一些非常简单的事情:

提取 iframe 中包含的 XML 内容并在父文档中使用它(在我的例子中,将 XML 发送到 ActiveX 以进行签名

这是一个可以找到迷你的网址 project zip

我的目标浏览器是IE9/10

父文档

            <!-- Main hero unit for a primary marketing message or call to action -->
        <div class="hero-unit">
            <h1>Parapheur 5.0</h1>
            <div class="alert-block">Please use buttons for actions</div>
            <div class="btn-group">
                <a class="btn btn-success btn-mini" onclick="javascript:expandViewport('viewport1');">Expand viewport &raquo;</a>
                <a class="btn btn-info btn-mini" onclick="javascript:collapseViewport('viewport1');">Collapse viewport &raquo;</a>
                <a class="btn btn-primary btn-mini" onclick="javascript:extractXml('#viewport1');">Extract XML &raquo;</a>
            </div>
            <div class="alert-block"></div>
            <iframe id="viewport1" src="xml/data.xml" width="1024px" height=""></iframe>
            <div class="alert-block"></div>
        </div>
        <div id="content" class="alert-info"></div>

application.js

function extractXml(id,content) {
console.log("Starting extraction of XML from within IFrame : " + id);
/*
var lastIndexOfSlash = document.getElementById(id).src.lastIndexOf("/");
var doc = document.getElementById(id).src.substring(lastIndexOfSlash);
$.get('xml/'+doc,function(xml){
                    console.log(xml);
                });
*/
console.log($(id).contentDocument);}

【问题讨论】:

  • 使用 chrome 控制台和 IE9 控制台 (F12) 我正在运行这行代码: document.getElementById("viewport1").contentWindow.document 它返回一个对象(我的 xml)但没有办法访问该 XML
  • 以下行返回 xml console.log(document.getElementById("viewport1").contentWindow.document.firstChild.nextSibling.textContent);但在 IE 下运行不同(根据两个控制台与 chrome 相比

标签: javascript xml internet-explorer iframe


【解决方案1】:

似乎在 IE9 下从 iframe 加载 xml 的唯一方法是执行以下代码行。

document.getElementById("viewport1").contentWindow.document.firstChi‌​ld.nextSibling.textContent

【讨论】:

    【解决方案2】:

    您可以在 IE9 中访问 iframe xml,如下所示。

    var frameIE = document.getElementById("yourIframeElementID");
    var textXml = frameIE.contentWindow.document.firstChild.innerText;//Get the text
    var regex = new RegExp('- <', 'g');
    textXml = textXml.replace(regex, "<");
    var xml = $.parseXML(textXml);//Use jquery to parse xml
    xml = $(responseData);
    //Now u can use this xml object to find xml nodes inside it using jquery...
    

    我在使用&lt;meta http-equiv="X-UA-Compatible" content="IE=8" /&gt;时不得不使用这种方法。在这种情况下,IE9工作在兼容模式,甚至不允许访问window.frames.&lt;your_frame_name&gt;.document.XMLDocument$("#iframeId").contents()也不起作用。

    如果你没有&lt;meta http-equiv="X-UA-Compatible"... /&gt;标签,你可以使用下面的代码:

    var contents = window.frames.your_frame_name.document.XMLDocument;
    var xml = $(contents);
    //use this 'xml' object to access its nodes using jquery.
    

    但要使上述所有方法起作用,您的框架必须指向同一来源或域中的资源。

    【讨论】:

      猜你喜欢
      • 2011-07-25
      • 1970-01-01
      • 1970-01-01
      • 2021-04-01
      • 1970-01-01
      • 2013-08-30
      • 1970-01-01
      • 1970-01-01
      • 2017-03-02
      相关资源
      最近更新 更多