【问题标题】:Accessing relative URL's via "ajax" from "file://" content从“file://”内容通过“ajax”访问相对 URL
【发布时间】:2011-03-26 17:31:02
【问题描述】:

我正在整理一些演示页面,我想演示的一件事涉及动态获取 HTML 片段并进行后续处理。因此,我有这样的简单 jQuery 代码:

$('#target').load('./content_fragment.html', function() {
  $(this).doSomething();
});

我通过 file:// URL 完成所有这些操作,因为整个内容是我(可能)从拇指驱动器或其他东西运行的演示文稿的一部分。因此,“content_fragment.html”只是另一个本地文件,就像包含该代码的主页一样。

现在这一切在 Firefox 或 Safari 上都可以正常工作,其他相对 URL 的使用在 Chrome 中也可以正常工作(iframe “src” URL、图像、脚本、css 等),但 Chrome 只是根本不会关注那些“.load()”请求。如果我压缩内容并将其部署到 Web 服务器,然后通过其“http:” URL 访问它,那么 Chrome 就可以正常工作。当它不起作用时,我在 Chrome 控制台中看不到任何错误;它只是不获取内容。我已经在 Linux 和 XP 上使用 Chrome 进行了尝试,结果相同。 (而 Safari 或 Firefox 指向同一个 file:// URL 总是按照我的预期执行并加载内容。)

所以我的问题是,这种怪异只是 Chrome 的怪癖,还是 XMLHttpRequests 和 file:// URLs 本身存在问题?换句话说,Chrome 是否在做正确的事情,这意味着其他浏览器都坏了?

【问题讨论】:

  • 出于安全考虑,您不希望恶意代码进入您的 HD。

标签: ajax google-chrome jquery


【解决方案1】:

您可以在启动 chrome 时将--allow-file-access-from-files 添加到命令行以禁用此安全功能:)

这是一个错误吗?也许,也许不是,发生的事情是它没有将file:// 视为一个域,对不同文件的请求被视为不同的域,因此被SOP rules 阻止。这是 Chrome/Chromium 开发人员的选择,我想它是否正确取决于您的观点。

在 Google 代码的 Chrome 问题部分对此有很多讨论,您可能会发现感兴趣的讨论,herehere

【讨论】:

  • 你是一个惊人的知识源泉。谢谢!我确实做了一些谷歌搜索,但我找不到任何相关的东西。我同意这是“对”还是“错”是见仁见智的问题,只要我能控制我不在乎的行为:-)
【解决方案2】:

在 Safari+Firefox 中遇到同样的问题:

下面代码中的警报没有运行:

$.getScript('script.js', function () { alert("脚本加载并执行。"); })

将运行加载外部文件而不是 script.js。

【讨论】:

    猜你喜欢
    • 2015-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-03
    • 2011-01-16
    • 1970-01-01
    • 2022-08-16
    • 1970-01-01
    相关资源
    最近更新 更多