【问题标题】:Reading XML File, Run Correct At IE but Not At Firefox读取 XML 文件,在 IE 上运行正确,但在 Firefox 上运行不正确
【发布时间】:2011-12-09 04:54:09
【问题描述】:

我用传统的 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 被拒绝

请任何人帮助我。

【问题讨论】:

    标签: javascript xml


    【解决方案1】:

    在 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 sn-ps 中与 javascript 进行通信。

    【讨论】:

    • 感谢@Ben Lee,根据您的回答,我假设我需要先使用Web 服务器来部署xml 文件。我说的对吗?
    • 是的,如果您在服务器上有一个 XML 文件,您可以将它嵌入到您的文档中,然后用 javascript 读取它。我将更新我的帖子以解释如何做到这一点。
    猜你喜欢
    • 2017-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-12
    • 2015-08-20
    • 2012-05-26
    • 2021-06-05
    • 2015-03-18
    相关资源
    最近更新 更多