Access-Control-Allow-Origin不允许Origin null

我做了一个小的xslt文件来创build一个名为weather.xsl的html输出,代码如下:

<!-- DWXMLSource="http://weather.yahooapis.com/forecastrss?w=38325&u=c" --> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" exclude-result-prefixes="yweather" xmlns:yweather="http://xml.weather.yahoo.com/ns/rss/1.0" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"> <xsl:output omit-xml-declaration="yes" indent="yes"/> <xsl:strip-space elements="*"/> <xsl:template match="/"> <img src="{/*/*/item/yweather:condition/@text}.jpg"/> </xsl:template> </xsl:stylesheet> 

我想加载到一个HTML文件,我试图做如下使用jQuery的HTML输出到div:

 <div id="result"> <script type="text/javascript"> $('#result').load('weather.xsl'); </script> </div> 

但是我收到以下错误:Access-Control-Allow-Origin不允许Origin null。

我已经阅读了有关添加头到xslt,但我不知道如何做到这一点,所以任何帮助将不胜感激,如果加载在html输出不能这样做,然后build议如何这样做会很好。

Origin null是本地文件系统,因此,build议您加载通过file:/// URL进行load调用的HTML页面(例如,只需在本地文件浏览器或类似文件中双击)。 不同的浏览器采用不同的方法将相同来源策略应用到本地文件。

我的猜测是,你看到这个使用Chrome。 Chrome将SOP应用到本地文件的规则非常严格,甚至不允许从与文档相同的目录加载文件。 Opera也是如此。 其他一些浏览器(如Firefox)允许访问本地文件。 但基本上,与本地资源使用AJAX不会跨浏览器工作。

如果您只是在本地testing您将真正部署到networking上的东西,而不是使用本地文件,请安装简单的Web服务器,然后通过http:// URLs进行testing。 这给你一个更准确的安全图片。

Chrome和Safari对本地资源使用ajax有限制。 这就是为什么它抛出一个错误

Access-Control-Allow-Origin不允许原始空值。

解决scheme:使用Firefox或将您的数据上传到临时服务器。 如果您仍然想使用Chrome,请使用以下选项启动它;

 --allow-file-access-from-files 

更多信息如何将上述参数添加到您的Chrome中:右键单击任务栏上的Chrome图标,在popup窗口中右键单击Google Chrome并单击属性,然后在“快捷方式”选项卡下的“目标”文本框内添加上述参数。 它会像下面那样;

 C:\Users\XXX_USER\AppData\Local\Google\Chrome\Application\chrome.exe --allow-file-access-from-files 

希望这会有所帮助!

只是想补充说,“运行一个web服务器”的答案似乎相当艰巨,但如果你的系统上有python(至less在MacOS和任何Linux发行版默认安装),它就像下面这样简单:

 python -m http.server # with python3 

要么

 python -m SimpleHTTPServer # with python2 

所以,如果你有一个文件夹中的html文件myfile.html ,比如说mydir ,你所要做的就是:

 cd /path/to/mydir python -m http.server # or the python2 alternative above 

然后将您的浏览器指向:

 http://localhost:8000/myfile.html 

你完成了! 适用于所有浏览器 ,无需禁用Web安全性,允许本地文件,甚至可以使用命令行选项重新启动浏览器。

我想谦虚地补充说,根据这个SO源: https : //stackoverflow.com/a/14671362/1743693 ,这种麻烦现在部分解决简单地通过使用下面的jQuery指令:

 <script> $.support.cors = true; </script> 

我试了IE10.0.9200,它立即工作 (使用jquery-1.9.0.js)。

在铬28.0.1500.95 – 这个指令不起作用( 大卫抱怨在上面的链接的评论中发生这一切)

用-allow-file-access-from-files运行chrome并不适用于我(正如Maistora上面的说法)

增加一点使用Gokhan的解决scheme来使用:

 --allow-file-access-from-files 

现在,您只需要在“目标文本”后跟一个空格处添加上面的文本即可。 请确保在添加上述属性后closures所有Chrome浏览器的实例。 现在,通过添加此属性的图标重新启动Chrome。 它应该为所有人工作。