【发布时间】:2011-01-09 16:10:03
【问题描述】:
我正在开发一个 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)。
【问题讨论】:
-
你试过了吗 var xhr = new ActiveXObject("MSXML2.XMLHTTP"); (见下面我的回答)?这不应该仅限于 XML 文件。但仅限于 IE。
-
FWIW,我在 Chrome 中遇到了同样的问题,基本上做同样的事情。
标签: ajax security file internet-explorer file-uri