XMLHttpRequest Origin null不允许Access-Control-Allow-Origin for file:/// to file:///(Serverless)

Kev*_*era 206 xml xslt jquery xmlhttprequest cors

我正在尝试创建一个可以下载并通过启动其索引文件在本地运行的网站.

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

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

XMLHttpRequest cannot load file:///C:/path/to/XSL%20Website/data/home.xml. Origin null is not allowed by Access-Control-Allow-Origin.

XMLHttpRequest cannot load file:///C:/path/to/XSL%20Website/assets/xsl/main.xsl. Origin null is not allowed by Access-Control-Allow-Origin.

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

我该怎么做才能解决这个问题?

Cou*_*sen 174

对于无法运行本地网络服务器的情况,您可以允许Chrome file://通过浏览器开关访问文件.经过一番挖掘后,我发现了这个讨论,其中提到了开放帖子中的浏览器切换.运行您的Chrome实例:

chrome.exe --allow-file-access-from-files
Run Code Online (Sandbox Code Playgroud)

对于开发环境而言,这可能是可以接受的,你当然不希望这一直存在.这仍然是一个悬而未决的问题(截至2011年1月).

另请参阅:Chrome中使用本地文件的jQuery getJSON问题

  • 这对macs OS X有帮助http://cweagans.net/blog/2011/1/24/command-line-flags-google-chrome-mac-osx (4认同)
  • 是否有任何原因 - 从文件中访问文件无法解决问题.我只是尝试加载一个脚本文件,如$ .getScript("application.js"); 并得到问题中描述的错误. (4认同)

Sin*_*ned 87

基本上解决这个问题的唯一方法是让一个webserver在localhost上运行并从那里为它们提供服务.

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

启动Web服务器可以像cd进入文件所在的目录一样简单:

python -m SimpleHTTPServer
Run Code Online (Sandbox Code Playgroud)

  • 我能想到的唯一其他解决方案是将整个内容加载到一个页面中,这样您就不需要向文件系统发出任何ajax请求. (5认同)
  • 如果您使用的是Python 3,那么命令将是`python -m http.server`. (4认同)
  • 谢谢@Singletoned!我正在使用你的解决方案,它非常方便! (2认同)

Ren*_*aud 5

此解决方案将允许您使用 jQuery.getScript() 加载本地脚本。这是一个全局设置,但您也可以在每个请求的基础上设置 crossDomain 选项。

$.ajaxPrefilter( "json script", function( options ) {
  options.crossDomain = true;
});
Run Code Online (Sandbox Code Playgroud)


suh*_*lvs 5

使用javascript FileReader函数打开本地文件怎么样,即:

<input type="file" name="filename" id="filename">
<script>
$("#filename").change(function (e) {
  if (e.target.files != undefined) {
    var reader = new FileReader();
    reader.onload = function (e) {
        // Get all the contents in the file
        var data = e.target.result; 
        // other stuffss................            
    };
    reader.readAsText(e.target.files.item(0));
  }
});
</script>
Run Code Online (Sandbox Code Playgroud)

现在单击Choose file按钮并浏览到文件file:///C:/path/to/XSL%20Website/data/home.xml