我试图创建一个网站,可以下载并通过启动其索引文件在本地运行。

所有文件都是本地的,没有在线使用资源。

当我尝试使用jQuery的AJAXSLT插件来处理带有XSL模板的XML文件(在子目录中)时,我收到以下错误:

XMLHttpRequest无法加载文件:///C:/path/到/XSL%20Website/data/home.xml。Access-Control-Allow-Origin不允许原点为空。

XMLHttpRequest无法加载文件:///C:/path/到/XSL%20Website/assets/ XSL /main.xsl。Access-Control-Allow-Origin不允许原点为空。

提出请求的索引文件是file:///C:/path/to/XSL%20Website/index.html,而使用的JavaScript文件存储在file:///C:/path/to/XSL%20Website/assets/js/。

我该如何解决这个问题?


当前回答

如果您只需要在本地访问文件,那么您可以包含文件的确切路径,而不是使用

../images/img.jpg

use

C:/Users/username/directoryToImg/img.jpg

CORS发生的原因是因为你试图在一个网页中遍历到另一个目录,通过包括直接路径,你不是在改变目录,你是从一个直接位置拉。

其他回答

从本质上讲,处理这个问题的唯一方法是在本地主机上运行一个web服务器,并从那里为它们提供服务。

对于浏览器来说,允许ajax请求访问您计算机上的任何文件是不安全的,因此大多数浏览器似乎将“file://”请求视为没有同源策略的目的。

启动一个web服务器就像输入文件所在的目录并运行一样简单:

python -m http.server

[编辑感谢@alextercete,指出它已在Python3中更新]

打开浏览器绕过这个限制:打开-a "/Applications/谷歌chrome。app/Contents/MacOS/谷歌Chrome"——args——allow-file-access-from-files。

源自Josh Lee的评论,但我需要指定谷歌Chrome的完整路径,以避免谷歌Chrome从我的Windows分区打开(在Parallels中)。

下面是一个applescript,它将开启——allow-file-access-from-files开关,用于OSX/Chrome开发者:

set chromePath to POSIX path of "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"    
set switch to " --allow-file-access-from-files"
do shell script (quoted form of chromePath) & switch & " > /dev/null 2>&1 &"

使用“chrome应用的web服务器”。(不管你知不知道,你的电脑上已经有了。用cortana搜索就可以了!)打开它,点击“选择文件”,选择文件所在的文件夹。不要实际选择文件。选择您的文件文件夹,然后点击“选择文件夹”按钮下的链接。

如果它不带您到文件,然后将文件的名称添加到urs。是这样的:

   https://127.0.0.1:8887/fileName.txt

链接到web服务器chrome:点击我

您可以尝试输入'Access-Control-Allow-Origin':'*'作为响应。writeHead({[这]})。