小编典典

在IE XMLHttpRequest中读取file:// URL

ajax

我正在开发一个JavaScript应用程序,该应用程序可以从Web服务器(通过http)运行,也可以从文件系统(在file:// URL上)运行。

作为此代码的一部分,我需要使用XMLHttpRequest在与页面相同的目录中以及页面的子目录中加载文件。

在Web服务器上执行时,此代码可以正常工作(“通过”),而在文件系统中运行时,此代码在Internet Explorer 8中则无法工作(“失败”):

<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控件,这些脚本或ActiveX控件可以访问您的计算机。”

但是,即使我单击了该栏并单击“允许阻止的内容”,该页面仍会失败;我在xhr.open调用中收到“访问被拒绝”错误。

这让我感到困惑,因为MSDN表示“出于开发目的,允许在本地计算机区域中使用file://协议。” 这个本地文件应该是本地计算机区域的一部分,对吗?

我如何才能获得类似的代码?我可以提示用户安全警告;我不能强迫他们在控制面板中关闭安全性。

编辑: 实际上,我不是在我的情况下加载XML文档。我正在加载纯文本文件(.txt)。


阅读 588

收藏
2020-07-26

共1个答案

小编典典

嗯,这可能是本机XMLHttpRequest对象和ActiveX对象之间的区别吗?我似乎还记得那件事。也就是说,代替

var xhr = new XMLHttpRequest();

尝试

var xhr = new ActiveXObject("MSXML2.XMLHTTP");

显然,请进行一些检查以查看浏览器是否支持ActiveX。当然,这也仅限于IE。

2020-07-26