允许 Google Chrome 使用 XMLHttpRequest 从本地文件加载 URL

Posted

技术标签:

【中文标题】允许 Google Chrome 使用 XMLHttpRequest 从本地文件加载 URL【英文标题】:Allow Google Chrome to use XMLHttpRequest to load a URL from a local file 【发布时间】:2011-06-16 16:26:54 【问题描述】:

当尝试使用 XMLHttpRequest 从本地文件发出 HTTP 请求时,由于Access-Control-Allow-Origin 违规,它基本上会失败。

但是,我自己使用的是本地网页,所以我想知道是否有任何方法可以让谷歌浏览器允许这些请求,这些请求是从本地文件到 Internet 上的 URL。

例如,$.get('http://www.google.com/') 在本地文件中执行时失败,但我自己编写了页面并自己使用它,所以如果我可以禁止它并加载 URL,这将非常有用。

那么,如何让谷歌浏览器使用 XMLHttpRequest 从本地文件加载 URL?

【问题讨论】:

Access-Control-Allow-Origin: null 由网站作品。 (ofc。不是 google.com) @JessamynSmith:答案的顺序会发生变化,接受的答案也可能会发生变化,因此最好链接到一个答案,而不是说“接受的答案下方的答案”。使用答案的“分享”链接指向的 URL。 @MichaelScheper 鉴于我粘贴了有效的实际命令,您的评论有些无关紧要。但是,如果包含链接有价值,我删除并重新发布。在现代 Chrome 中,错误看起来像:XMLHttpRequest cannot load file:///path/to/file/css/base.css。跨源请求仅支持协议方案:http、data、chrome、chrome-extension、https、chrome-extension-resource。这个答案***.com/a/4819114/1649165 对我有用,即从命令行运行 chrome:chrome --allow-file-access-from-files @JessamynSmith:抱歉,您认为我的建议无关紧要。由于您认为某个特定的答案是相关的,因此我认为您可能希望对您的评论进行过时的验证。我的错。 【参考方案1】:

使用--disable-web-security 开关是相当危险!为什么要禁用安全性,而您可以只允许 XMLHttpRequest 使用 --allow-file-access-from-files 开关从其他文件访问文件?

在使用这些命令之前,请务必结束所有正在运行的 Chrome 实例。

在 Windows 上:

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

在 Mac 上:

open /Applications/Google\ Chrome.app/ --args --allow-file-access-from-files

Chrome的这个“特性”的讨论:

https://bugs.chromium.org/p/chromium/issues/detail?id=37586, https://bugs.chromium.org/p/chromium/issues/detail?id=47416, https://productforums.google.com/forum/#!topic/chrome/v177zA6LCKU

【讨论】:

是否可以将此设置为默认行为,而不必每次都打开终端/命令行或自定义快捷方式? @Kokodoko 我认为没有。 @JoshH 我完全同意使用本地 Web 服务器进行网站开发比直接通过浏览器访问本地文件要好得多。然而,确切的问题被问到了,我刚刚回答了。 如果其他人要尝试这个:这个标志在chrome://flags中是可用/可修改的 使用这个实例浏览互联网安全吗?就我而言,当我在 Iceweasel 中打开同一个本地文件时,没有错误。他们没有与 Chrome 相同的安全检查?所以我猜在这个浏览器实例中浏览网页还是可以的。【参考方案2】:

使用--disable-web-security启动chrome

在 Windows 上:

chrome.exe --disable-web-security

在 Mac 上:

open /Applications/Google\ Chrome.app/ --args --disable-web-security

这将允许跨域请求。 我不知道这是否也适用于本地文件,但请告诉我们!

另外提一下,这完全符合您的预期,它禁用网络安全,所以要小心。

【讨论】:

您也可以在 Mac 上使用 Safari。当从本地文件发出请求时,它默认允许 AJAX 到本地文件。此外,关于“.exe”,Q 中没有提到 Windows。 Pim 是一名 Windows 开发人员,但仍然没有提及 Windows。 是的,我在 Windows 上,对此感到抱歉。现在试试这个,谢谢。顺便说一句,我总是在我的电脑开机时运行 Chrome,所以有没有办法只允许跨域请求与本地文件或仅在特定选项卡中?因为这样一来,我其实就不能同时安全的上网了…… 我刚刚下载了最新的 Chromium 版本,以便运行一个独立的、不安全的版本进行测试,并安装了“真实”的 Chrome 以进行安全的 Internet 浏览。它确实有效,谢谢! @Tom - 只要您使用“file:///”协议而不是“localhost” 我在 Safari 10.1 上尝试过,它给了我:XMLHttpRequest cannot load file:///<my_local_file>. Cross origin requests are only supported for HTTP.,所以这个线程中关于 Safari 浏览器的声明不再有效。【参考方案3】:

Mac 版本。从终端运行:

open /Applications/Google\ Chrome.app/ --args --allow-file-access-from-files

【讨论】:

如果有更永久的解决方案就好了。这个假设用户事先知道并且还需要重新启动 chrome。 这似乎不再适用于当前版本的 Chrome。【参考方案4】:

在 Ubuntu 上:

chromium-browser --disable-web-security

更多细节/开关:

http://peter.sh/experiments/chromium-command-line-switches/

Referenced from

【讨论】:

我认为指定文件会更安全 ` google-chrome --allow-file-access-from-files ~/foo ` 这对于特定的用例来说有点宽泛。但无论如何都支持解决方案

以上是关于允许 Google Chrome 使用 XMLHttpRequest 从本地文件加载 URL的主要内容,如果未能解决你的问题,请参考以下文章

从Chrome扩展程序访问Google文档

如何为 Google Chrome 启用自动登录用户身份验证

如何运行native client chrome

google-chrome 无法移动到新的命名空间

解决Google chrome不能后台运行的问题

手动清除Google Chrome DNS缓存