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

144

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

但是,我正在使用本地网页,因此我想知道是否有任何方法可以让Google Chrome允许从本地文件到互联网上的URL的这些请求。

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

那么,我如何才能允许Google Chrome使用XMLHttpRequest从本地文件加载URL?


1
网站工作时的“Access-Control-Allow-Origin: null”(当然不是由google.com) - inf3rno
3
答案的顺序可能会改变,被采纳的答案也可能会改变,因此最好链接到一个答案,而不是说“在被采纳的答案下方”。使用答案的“分享”链接所指向的URL。 - Michael Scheper
2
@MichaelScheper您的评论有些不相关,因为我已经粘贴了实际有效的命令。但是,如果包含链接有价值,我已将其删除并重新发布。在现代Chrome中,错误看起来像:XMLHttpRequest无法加载file:///path/to/file/css/base.css。跨源请求仅支持协议方案:http、data、chrome、chrome-extension、https、chrome-extension-resource。这个答案https://dev59.com/K2445IYBdhLWcg3wg6tm#4819114对我有用,即从命令行运行chrome:chrome --allow-file-access-from-files - Jessamyn Smith
@JessamynSmith:很抱歉您认为我的建议与问题无关。既然您认为某个答案是相关的,我想您可能会喜欢将您的评论未来化。这是我的错误。 - Michael Scheper
4个回答

265

使用--disable-web-security开关非常危险!既然您可以使用--allow-file-access-from-files开关允许XMLHttpRequest从其他文件访问文件,为什么要禁用安全性呢?

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

在Windows上:

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

在 Mac 上:

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

讨论Chrome的这个"功能"


6
能否将此设置作为默认行为,而不必每次都打开终端/命令行或自定义快捷方式? - Kokodoko
1
@Kokodoko 我认为不是。 - Konstantin Smolyanin
2
@JoshH 我完全同意使用本地Web服务器进行网站开发比直接通过浏览器访问本地文件要好得多。然而,确切的问题已经被问出来了,我只是回答了它。 - Konstantin Smolyanin
17
如果有其他人想尝试这个操作的话:这个标志在chrome://flags不可用/不可修改 - Blaise
2
使用这个实例浏览互联网安全吗?在我的情况下,当我在Iceweasel中打开相同的本地文件时,没有出现错误。它们没有像Chrome那样的相同安全检查吗?所以我猜在这个浏览器实例中上网应该还是可以的。 - Neerkoli
显示剩余6条评论

49

使用--disable-web-security启动Chrome。

在Windows系统上:

chrome.exe --disable-web-security

在Mac上:

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

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

同时需要注意的是,它确实能够达到你所期望的效果,即禁用了网络安全性,请小心使用。


1
是的,我在Windows上,抱歉。现在会尝试这个,谢谢。顺便问一下,我电脑开机后总是运行Chrome,那有什么办法只允许本地文件或特定选项卡内的跨域请求吗?因为这样的话,我实际上无法同时安全地浏览互联网... - pimvdb
1
我刚刚下载了最新的Chromium构建,以便运行一个独立的、不安全的版本进行测试,并使用“真正的”安装Chrome进行安全的互联网浏览。它确实可行,谢谢! - pimvdb
跟随 @Konstantin Smolyanin 的建议。 - daniel.gindi
更好的答案是允许文件访问。 - Maladon
4
我在Safari 10.1上尝试了它,结果显示:“XMLHttpRequest无法加载file:///<my_local_file>。跨域请求仅支持HTTP。”因此,这个帖子中有关Safari浏览器的说法已经不再适用。 - Michal Cichon
显示剩余4条评论

22

在Mac版本中,从终端运行:

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

希望有一个更持久的解决方案。这个假设用户事先知道,并且需要重新启动Chrome。 - Michael Dunn
1
在当前版本的Chrome中,这似乎不再起作用。 - jasamer
就我个人而言,使用Chrome 106.0.5249.91在macOS 12.6(21G115)上可以正常运行。 - Tomáš Hübelbauer

3

3
我认为指定文件会更安全 ` google-chrome --allow-file-access-from-files ~/foo` - Muhammed Moussa
这对于特定的用例来说有点宽泛。但无论如何,感谢提供解决方案。 - Michael Dunn

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