1

我正在使用ajax_upload上传文件而无需回发整个页面。服务器将响应作为 XML 返回,然后我在我的 onComplete 函数中解析,这适用于 Chrome、Safari 和 Firefox,但不适用于 Internet Explorer。这在 Internet Explorer 中不起作用的原因(至少我认为是原因)是 IE 解析 iframe 中的 XML 并以语法高亮显示它,即使 iframe 设置为大小 0 也是如此。当 ajax_uploads 然后读取iframe 它得到了一个损坏的 XML 版本,由于 IE 添加到它的语法突出显示,我无法用 $.parseXml() 解析它。

我用谷歌搜索并发现提到使用 iframe.document.XMLDocument 从 iframe 获取原始 XML,但它对我不起作用,而且提到它的帖子真的很旧。

所以问题是,有没有人知道如何从 iframe 中获取 XML 数据而没有 IE 完成的语法突出显示(它通过添加 HTML 和转义我的 XML 中的标签来实现)或者有没有办法告诉 IE 不要解析HTTP标头中的XML或类似的东西?

4

1 回答 1

0

我认为Content-Type: text/plain可以帮助解决此问题,但这仅对其他浏览器有帮助。IE 有自己的方法来检测内容类型,并且这种行为不能轻易禁用。更多信息可在MSDN上获得,更简单的在这里

当然,您可以像这样进行肮脏的破解:

<iframe src="test.xml" onload="test()" id="f1"></iframe>

并解析突出显示的代码:

function test() {
    var iframe = document.getElementById('f1');
    var frameBody = iframe.contentWindow.document.body;

    // remove unneeded toggle links +/-
    var links = frameBody.getElementsByTagName('a');
    for (var i = links.length - 1; i >= 0; i--) {
        if(links[i].className === 'b') {
            links[i].parentNode.removeChild(links[i]);
        }
    }

    // display parsed XML source
    alert(frameBody.innerText);

    // parse cleaned highlight code source to new XML document
    var xml = $.parseXML(area.value);
    alert(xml);
}

这在 IE6-8 中有效,但这种方式不可靠 :) 所以我建议您尽可能使用 JSON 而不是 XML 来避免这个问题。

于 2012-11-20T22:20:21.650 回答