【问题标题】:How can I load a file in a synchronous manner? (access-control-allow-origin)如何以同步方式加载文件? (访问控制允许来源)
【发布时间】:2012-09-01 11:32:16
【问题描述】:

以下代码在 Safari 上运行良好。

在 Chrome 上,由于以下原因而失败:

"XMLHttpRequest cannot load file:///Users/jem/Sites/AA/data/articles.csv. Origin null is not allowed by Access-Control-Allow-Origin."

这是什么意思?如何使用同步调用正确读取此文件?

function(file) {

    var content;

    $.ajax({
        url : file,
        success : function (data) {
            content = data.split(/\r\n|\n/);

        },
        async: false
    });

    return content;
}

【问题讨论】:

  • 令人恐惧的是 Safari 会让你这样做......想想像 file:///proc/cpuinfo 这样的东西,它会让恶意网站检测架构和其他信息,让它尝试更精确的感染。虽然无法通过这种方式进行修改,但可以通过/proc 访问很多 数据。大量有价值的、可挖掘的、可破解的数据。 /proc 中的几乎所有数据都可能被恶意使用。
  • @Linuxios Safari 可能会执行something like Firefox 并将file: 页面的来源限制在同一目录或子目录中。因此,如果您在“下载”文件夹中打开一个新下载的 HTML 文件,它可能会在该目录中四处寻找以读取文件,但它可能进入文件系统up树到达/proc。 (当然,这并不是说让一个奇怪的 HTML 页面读取您的 Downloads 文件夹中的任何文件都是一件好事!)
  • @apsillers:这让我感觉好多了,但我认为这是一个关于互联网服务网页的问题。因为/proc 塞满了敏感数据。

标签: javascript jquery synchronous


【解决方案1】:

问题是chrome默认不允许您使用ajax从本地系统加载文件。这是一个安全设置。

使用 --allow-file-access-from-files 参数启动 Chrome 以跳过此安全检查。

chrome.exe --allow-file-access-from-files

【讨论】:

  • 好的,但想象一下我将把它发送给一个无法访问测试网络服务器/没有本地网络服务器的同事。 csv 文件位于 ./data 文件夹下。我怎样才能让他为他工作?
  • 你不能。不使用 file:// 方法。您需要将文件放在服务器上并使用 http:// 链接到它。它还需要位于同一个域中,否则您将收到域策略警告。
  • @Jem 我不太明白你的评论。此答案不需要 Web 服务器 - 如果您的同事无法访问 Web 服务器(但有 HTML 文件和 ./data 文件夹),他应该遵循此答案中的确切建议并使用 --allow-file-access-from-files旗帜。 (或者我误读/误解了什么?)
猜你喜欢
  • 1970-01-01
  • 2013-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-02
  • 2017-12-15
  • 2016-08-18
相关资源
最近更新 更多