Javascript 使用IE 11加载本地XML文件

Javascript 使用IE 11加载本地XML文件,javascript,jquery,xml,asynchronous,internet-explorer-11,Javascript,Jquery,Xml,Asynchronous,Internet Explorer 11,我正在做一个简单的项目,其中包括通过local.html文件将local.xml文件加载到DOM结构中。我们可以假设.html和.xml文件位于同一台计算机上的同一文件夹中。问题是IE11不允许与本地xml文件进行任何交互。(脚本5:访问被拒绝。) 到目前为止,我尝试了这个解决方案(解决方案1,2在Mozilla FireFox和Google Chrome中经过测试并正常运行,Microsoft Edge有一些不同的问题-请参阅第一个代码片段): 同步/异步XMLHttpRequest(示例中为

我正在做一个简单的项目,其中包括通过local.html文件将local.xml文件加载到DOM结构中。我们可以假设.html和.xml文件位于同一台计算机上的同一文件夹中。问题是IE11不允许与本地xml文件进行任何交互。(脚本5:访问被拒绝。)

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

同步/异步XMLHttpRequest(示例中为异步)

JQuery异步解决方案

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

function myHandle(data) {
    alert(data);
}
第三种解决方案由简单的node.js web服务器组成(请参阅) 但这把枪对我来说似乎太大了。 还有一个问题,web服务器必须通过cmd/script显式地启动,但我只想点击.html并查看解释的xml数据

TL;博士,我的问题是:

  • 是否有任何变通方法可以让用户访问本地.xml文件 IE11
  • 为什么这是IE的“安全风险”,而不是其他的
注: 因为.xml文件可以有更多的Mb,所以我更喜欢异步解决方案


谢谢。

好吧,作为一个备份机会,我建议您远离html+js解决方案,尝试一下。这应该不会有任何安全问题,这是您唯一需要更改的内容—您不需要打开
index.html
,但需要在浏览器中打开
output.xml

此外,您还需要将指向XSLT文件的指针添加到XML文件中,例如,请参见如何这样做


加载XML并使用XSLT处理后,您就可以使用相同的JavaScript生成相同的HTML,但所有数据都已呈现。XSLT功能非常强大,我相信它将满足您的所有要求

如果您试图将文件路径作为本地路径提供,那么它在其他浏览器中也无法工作,使用纯javascript,并且可能会出现跨域错误。如果您有一个web服务器,您可以将文件放在适当的位置,并提供相应的路径。这可能会有所帮助。

您的最终目标是以一种看起来像页面的特定方式呈现XML吗?您的XML是静态的还是生成的,在生成时您是否有可能影响生成过程?生成XML(根据特定DTD)。无论如何,您的期望是正确的,我只需要呈现本地页面模块(即图形/表格),其中数据是从xml加载的。您坚持使用JS解决方案吗?还是只有结果对你重要?结果和表现对我重要。但它需要在打开与“file.xml”相同文件夹中的“index.html”后运行。好吧,将其称为“output.xml”或“file://D:/…”都是相同的,并且引用本地路径。我的意思是,如果您有一个web服务器,您可以将文件放在那里,并提供路径作为“http:///localhost/..../output.xml,看看是否有帮助。不过,还有一个问题没有回答。我假设在localhost:63342/../output.xml中“.63342是端口号。我想它可以改变吗?如果有,是否有一个通用的解决方案?是的,localhost后面出现的数字是端口号。如果端口号更改,URL也必须更改。是的,但是有没有办法在js中找到端口号?如果您在本地打开html(即,它在浏览器中以您的本地路径开始),location.port不起作用。不,您无法从javascript中找到端口号。
window.onload = function() {
$.ajax({
        url: "output.xml",
        aync: true,
        success: myHandle,
        isLocal:true,
        dataType: "xml"
    });
}

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