我正在开发一个 JavaScript 应用程序,它可以从 Web 服务器(通过 http)或文件系统(在 file:// URL 上)运行。
作为此代码的一部分,我需要使用 XMLHttpRequest 在与页面相同的目录和页面的子目录中加载文件。
此代码在 Web 服务器上执行时可以正常工作(“PASS”),但在 Internet Explorer 8 中运行文件系统时无法正常工作(“FAIL”):
<html><head>
<script>
window.onload = function() {
var xhr = new XMLHttpRequest();
xhr.open("GET", window.location.href, false);
xhr.send(null);
if (/TestString/.test(xhr.responseText)) {
document.body.innerHTML="<p>PASS</p>";
}
}
</script>
<body><p>FAIL</p></body>
当然,起初它失败了,因为文件系统上根本没有脚本可以运行。提示用户一个黄色条,警告“为了帮助保护您的安全,Internet Explorer 已限制此网页运行可能访问您的计算机的脚本或 ActiveX 控件。”
但即使我点击栏和“允许被阻止的内容”,页面仍然失败;我在 xhr.open 调用中收到“拒绝访问”错误。
这让我很困惑,因为MSDN说“出于开发目的,本地机器区域允许使用 file:// 协议”。这个本地文件应该是本地机器区域的一部分,对吧?
我怎样才能让这样的代码工作?我可以通过安全警告提示用户;我不同意强迫他们关闭控制面板中的安全性。
编辑:事实上,在我的情况下,我并没有加载 XML 文档;我正在加载一个纯文本文件 (.txt)。