使用 IE 11 加载本地 XML 文件
Load local XML file with IE 11
我正在做一个简单的项目,它涉及通过本地 .html 文件将本地 .xml 文件加载到 DOM 结构中。我们可以假设 .html 和 .xml 文件位于同一台计算机上的同一文件夹 中。问题是 IE 11 不允许 与本地 xml 文件进行任何交互。 (SCRIPT5:访问被拒绝。)
到目前为止,我尝试了这个解决方案(解决方案 1,2 在 Mozilla FireFox 和 Google Chrome 中进行了测试和运行,Microsoft Edge 有一些不同的问题 - 请参阅第一个代码片段):
Synchronous/Asynchronous 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 webserver(参见 Using node.js as a simple web server)
但这对我来说似乎太大了。
还有一个问题是 Web 服务器必须通过 cmd / 脚本 显式 启动,但我只想点击 .html 并查看解释的 xml 数据。
TL;DR 我的问题是:
- 是否有任何解决方法可以使本地 .xml 文件可供访问
IE11?
- 为什么 "security risk" 适用于 IE 而不适用于其他浏览器?
注:
由于 .xml 文件可以有更多 Mb,我更喜欢异步解决方案。
谢谢。
好吧,作为备用机会,我建议稍微偏离 html + js 解决方案并尝试 XML + XSLT。这应该没有任何安全问题,唯一为您改变的是 - 您不需要打开 index.html
,但您需要在浏览器中打开 output.xml
。
此外,您需要将指向 XSLT 文件的指针添加到 XML 文件中,例如参见here 怎么做。
加载 XML 并使用 XSLT 对其进行处理后,您将拥有相同的 HTML 和相同的 JavaScript,但所有数据都已呈现。 XSLT 非常强大,我相信它会满足您的所有要求
如果您尝试将文件路径提供为本地路径,那么在其他浏览器中也无法正常使用 javascript,并且您可能会遇到跨域错误。如果您有网络服务器,您可以将文件放在适当的位置,并提供 "http://localhost/.../file.xml" 的路径。这可能会有所帮助。
我正在做一个简单的项目,它涉及通过本地 .html 文件将本地 .xml 文件加载到 DOM 结构中。我们可以假设 .html 和 .xml 文件位于同一台计算机上的同一文件夹 中。问题是 IE 11 不允许 与本地 xml 文件进行任何交互。 (SCRIPT5:访问被拒绝。)
到目前为止,我尝试了这个解决方案(解决方案 1,2 在 Mozilla FireFox 和 Google Chrome 中进行了测试和运行,Microsoft Edge 有一些不同的问题 - 请参阅第一个代码片段):
Synchronous/Asynchronous 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 webserver(参见 Using node.js as a simple web server) 但这对我来说似乎太大了。 还有一个问题是 Web 服务器必须通过 cmd / 脚本 显式 启动,但我只想点击 .html 并查看解释的 xml 数据。
TL;DR 我的问题是:
- 是否有任何解决方法可以使本地 .xml 文件可供访问 IE11?
- 为什么 "security risk" 适用于 IE 而不适用于其他浏览器?
注: 由于 .xml 文件可以有更多 Mb,我更喜欢异步解决方案。
谢谢。
好吧,作为备用机会,我建议稍微偏离 html + js 解决方案并尝试 XML + XSLT。这应该没有任何安全问题,唯一为您改变的是 - 您不需要打开 index.html
,但您需要在浏览器中打开 output.xml
。
此外,您需要将指向 XSLT 文件的指针添加到 XML 文件中,例如参见here 怎么做。
加载 XML 并使用 XSLT 对其进行处理后,您将拥有相同的 HTML 和相同的 JavaScript,但所有数据都已呈现。 XSLT 非常强大,我相信它会满足您的所有要求
如果您尝试将文件路径提供为本地路径,那么在其他浏览器中也无法正常使用 javascript,并且您可能会遇到跨域错误。如果您有网络服务器,您可以将文件放在适当的位置,并提供 "http://localhost/.../file.xml" 的路径。这可能会有所帮助。