【问题标题】:Load local XML file with IE 11使用 IE 11 加载本地 XML 文件
【发布时间】:2015-08-25 09:55:55
【问题描述】:

我正在做一个简单的项目,该项目涉及通过本地 .html 文件将本地 .xml 文件加载到 DOM 结构中。我们可以假设 .html 和 .xml 文件放在同一台计算机上的同一个文件夹中。问题是 IE 11 不允许与本地 xml 文件进行任何交互。 (SCRIPT5:访问被拒绝。

到目前为止,我尝试了这个解决方案(解决方案 1,2 在 Mozilla FireFox 和 Google Chrome 中经过测试和功能,Microsoft Edge 有一些不同的问题 - 请参阅第一个代码 sn-p):

同步/异步 XMLHttpRequest(例如异步)

function loadXMLDoc(doc)
{
    try{
        xmlhttp = new XMLHttpRequest();
    }catch(e){
        try {
            xmlhttp = new ActiveXObject("MSXML2.XMLHTTP.3.0");
        }
        catch(e){
            try {
                xmlhttp = new ActiveXObject("MSXML2.XMLHTTP");
            }
            catch(e)    {
                try {
                    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
                }
                catch(e)    {
                    alert("XMLHTTP Not Supported On Your Browser");

                }
            }
        }
    }
    xmlhttp.onreadystatechange=function()
    {
        if (xmlhttp.readyState==4 && xmlhttp.status==200) /*Microsoft edge returns status 0 here */
        {
            alert(xmlhttp.responseText);
        }
    };
    xmlhttp.open("GET",doc,true);/*IE11 prints "SCRIPT5: Access is denied." into console*/
    xmlhttp.send();
}

JQuery异步解决方案

window.onload = function() {
$.ajax({
        url: "output.xml",
        aync: true,
        success: myHandle,
        isLocal:true,
        dataType: "xml"
    });
}

function myHandle(data) {
    alert(data);
}

第三种解决方案由简单的 node.js 网络服务器组成(参见 Using node.js as a simple web server) 但这对我来说似乎太大了。 还有一个问题是 Web 服务器必须通过 cmd / 脚本显式启动,但我只想点击 .html 并查看解释的 xml 数据。

TL;DR 我的问题是:

  • 是否有任何解决方法可以使本地 .xml 文件可以访问 IE11?
  • 为什么这种“安全风险”对 IE 来说是“安全风险”,而对其他人没有?

注意: 由于 .xml 文件可以有更多 Mb,因此我更喜欢异步解决方案。

谢谢。

【问题讨论】:

  • 您的最终目标是以特定方式呈现 XML 使其看起来像一个页面吗?你的XML是静态的还是生成的,万一生成的时候有可能影响生成过程吗?
  • Xml 已生成(根据某些 DTD)。无论如何,您的期望是正确的,我只需要渲染本地页面模块(即图形/表格),其中数据是从 xml 加载的。
  • 你坚持JS方案吗?还是只计算结果?
  • 结果和表现对我来说很重要。但它需要在与“file.xml”相同的文件夹中打开“index.html”后运行。
  • 好吧,将其称为“output.xml”或“file://D:/....”都是相同的,并且指的是本地路径。我的意思是,如果你有一个网络服务器,你可以把文件放在那里,并提供路径为“http:///localhost/..../output.xml”,看看是否有帮助。跨度>

标签: javascript jquery xml asynchronous internet-explorer-11


【解决方案1】:

如果您尝试将文件路径提供为本地路径,那么它在使用纯 javascript 的其他浏览器中也不起作用,并且您可能会遇到跨域错误。如果您有 Web 服务器,则可以将文件放在适当的位置,并将路径提供为 "http://localhost/.../file.xml"。这可能会有所帮助。

【讨论】:

  • 仍然有一个问题没有得到解答。我假设在 localhost:63342/.../output.xml"。63342 是端口号。我想它可以改变?如果是这样,有没有通用的解决方案?
  • 是的,localhost后面出现的数字就是端口号。如果端口号。更改 URL 也必须更改。
  • 是的,但是有没有办法在js中找到端口号?如果您在本地打开 html,location.port 不起作用(即它以浏览器中的本地路径开头)
  • 不,您无法从 javascript 中找到端口号。
【解决方案2】:

好吧,作为备用机会,我建议放弃一点 html + js 解决方案并尝试XML + XSLT。这不应该有任何安全问题,唯一改变的是你 - 你不需要打开index.html,但你需要在浏览器中打开output.xml

此外,您需要将指向 XSLT 文件的指针添加到您的 XML 文件中,参见例如here 怎么做。

一旦您加载了您的 XML 并使用 XSLT 处理它,您将拥有相同的 HTML 和相同的 JavaScript,但所有数据都已呈现。 XSLT 非常强大,我相信它会满足您的所有要求

【讨论】:

    猜你喜欢
    • 2011-12-05
    • 1970-01-01
    • 2014-11-09
    • 2011-11-27
    • 2015-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多