javascript - 读取 XML 文件,在 IE 上运行正确,但在 Firefox 上运行不正确

标签 javascript xml

我使用传统的 JavaScript 编写程序来读取 xml 文件。

<script type="text/javascript">
var xmlDoc; 

function loadxml(sImportXML) {
    if( window.ActiveXObject && /Win/.test(navigator.userAgent) ) {
        xmlDoc = new ActiveXObject("Msxml.DOMDocument");
        xmlDoc.async = false;
        xmlDoc.onreadystatechange = function () {
        if (xmlDoc.readyState == 4) readXML();
        }
        xmlDoc.load(sImportXML);
    }
    else if( document.implementation && document.implementation.createDocument ) {
        xmlDoc = document.implementation.createDocument("","",null);
        xmlDoc.async=false;
        alert(sImportXML);
        var loaded = xmlDoc.load(sImportXML);
        if (loaded) {
            readXML();
        }
    }
    else {
        alert("Your browser can\'t handle this script");
        return;
    }
}

<body onload="loadxml('../XML/Question.xml');">

上层 loadxml 函数在 IE 上运行正常,但在 firefox 上运行不正常。
警报行显示此值 ../XML/Question.xml.
但是 xmlDoc.Load 函数没有正确运行。
它回复错误 Access to restricted URI denied

请任何人帮助我。

最佳答案

在 Firefox 中,javascript 不允许您访问用户本地文件系统上的文件;根本没有办法做到这一点。那将是一个巨大的安全漏洞。

这在带有 ActiveX 的 Internet Explorer 中有效,因为 ActiveX 是一个即插即用的应用程序模块系统(有点像迷你浏览器插件),其中的应用程序(如“Msxml.DOMDocument”)比 javascript 具有更强大的功能,并且可以访问用户本地文件系统上的文件。

但是 document.implementation 是常规的 javascript,因此它具有所有正常的安全限制,其中一个主要限制是用户的文件系统不受限制。

如果 XML 文件在服务器上,您可以像这样嵌入到您的 html 代码中:

<script id="the-xml" type="text/xml">
      ....your xml document contents here....
</script>

然后你可以像这样获取javascript中的内容:

var sImportXML = document.getElementById('the-xml').text;

但是根据您的应用程序,完全不使用 javascript xml 可能是有意义的。通常,您会在服务器端解析 xml,并在 json 或 html 片段中与 javascript 通信。

关于javascript - 读取 XML 文件,在 IE 上运行正确,但在 Firefox 上运行不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8441246/

相关文章:

c# - C#Windows Phone Mango-无效的跨线程访问?解析XML

java - 将 Java 转换为 XSD 的用例与使用 JAXB 将 XSD 转换为 java 的用例是否不同?

javascript - 如何确保 Google Analytics customVars 不会太长

javascript - 表单仍然在 JS 中回发并返回 false

javascript - 如果 div 是 Fl​​ex 的,我可以使其弹跳吗?

javascript - 如何在 Javascript 中停止传播

javascript - 多维数组中的循环未显示预期内容

python - 使用 Python 中的 xml 子对象、ElementTree

javascript - 在 Ace 编辑器中自动完成 XML 值和属性

javascript - 尝试用预定义的 xml 文件填写表单(无法更改 xml 文件)