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

时间:2011-12-09 04:54:09

标签: 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函数无法正常运行 它回复错误访问受限制的URI被拒绝

请有人帮助我。

1 个答案:

答案 0 :(得分:2)

在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进行通信。