使用Javascript/jQuery访问本地文件时出现“权限被拒绝”错误

3
function publish(text) {
 $('#helpdiv').prepend(text);
}

function get_help(topic) {
  $.get(topic, publish);
}

<p>Hi. <a href="#" onclick="get_help('inline-help.html'); return false;">click here for more help.</a></p>
<div id="helpdiv"></div>

我继承了上面的HTML和javascript代码段,它将被用作本地帮助。目前它只在线上使用并且工作正常。但是,当我将文件复制到本地时,在Internet Explorer中显示“Permission Denied”,在Chrome中“click here for more help”没有任何反应。它应该从inline-help.html加载帮助内容并在helpdiv div中显示。现在问题来了,如果我将相同的文件复制到我的PC上的inetpub,并将它们作为http://localhost/hello.html加载,它就能完美运行。

可能这是一个安全问题,“本地”区域不允许我从用户的硬盘加载文件?但我不确定发生了什么,希望进一步了解这个问题并可能想出解决方案。

非常感谢您的任何见解。


更加奇怪的是,如果我使用WPF封装的Chromium控件,它可以正常处理本地文件。这让我认为问题不在于jquery,而是浏览器设置。我指的是这个链接:http://chriscavanagh.wordpress.com/2009/08/25/a-real-wpf-webbrowser/ - billb
2个回答

1

jQuery的“get”使用xmlHttpRequest,但不幸的是它不能在本地文件上工作。如果你真的需要异步获取本地数据(或来自不同域的数据),你应该使用动态脚本标签。然而这意味着数据文件必须被重新格式化为JSON数据。


为什么它不起作用?这是故意的吗?有没有其他方法可以解决,或者动态脚本标签是唯一的选择?更加奇怪的是,如果我使用WPF封装的Chromium控件,它在本地文件中可以正常工作。这让我觉得问题不在于jquery,而是浏览器设置。我指的是这个链接:http://chriscavanagh.wordpress.com/2009/08/25/a-real-wpf-webbrowser/ - billb
这不是jQuery的问题,而只是它的工作方式。我同意这很愚蠢。据我所知,动态脚本标签是唯一可行的方法。你可能可以用Flash做些什么,但是,你懂的...呃。 - rob
在这个帖子中,这位用户将问题归结为IE对其ActiveX控件的期望和jQuery的处理方式:https://social.msdn.microsoft.com/Forums/ie/en-US/9ae077e0-a7b9-433f-835f-2643aa1a7e09/ie11previewcannot-read-local-files-with-ajax-method-of-jquery?forum=iewebdevelopment - bgmCoder

0

我认为你的浏览器不允许你在本地运行JavaScript(使用file:///访问方法)。但是当你从http://localhost/加载它时,它可以正常工作。

你需要在网站上开发,或者使用你的本地主机服务器。


这没有影响。 - billb
@billb - ...你在帖子中说它在http://localhost/上运行正常,但是当你通过文件本地加载时失败了。 - Mitch Dempsey
误解了你的评论。我以为你说要通过file:///引用它,而不是c:\filename.html。通过http://localhost引用它不是一个选项,因为最终用户将没有安装Web服务器。 - billb
@Billb - 是的,但你不是要把它放在 Web 服务器上吗? - Mitch Dempsey
不,它正在从Web服务器上移开并转向最终用户的个人电脑。在安全的环境下,他们没有网络访问权限。 - billb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接