我使用传统的 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/