Origin null is not allowed by Access-Control-Allow-Origin
我创建了一个小的xslt文件来创建一个名为weather.xsl的html输出,其代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 | <!-- 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输出加载到html文件中的div中,我正在尝试使用jQuery,如下所示:
1 2 | <script type="text/javascript"> $('#result').load('weather.xsl'); |
但是我收到以下错误:
Access-Control-Allow-Origin不允许使用null。
我已经读过有关向xslt添加标题的内容,但我不知道该怎么做,所以任何帮助都会受到赞赏,如果在html输出中加载不能这样做,那么建议如何 这样做会很棒。
Origin
我的猜测是你使用Chrome看到这个。 Chrome将SOP应用于本地文件的规则非常严格,甚至不允许从与文档相同的目录中加载文件。 Opera也是如此。其他一些浏览器(如Firefox)允许对本地文件的有限访问。但基本上,使用ajax与本地资源不能跨浏览器工作。
如果您只是在本地测试一些您将真正部署到Web上的内容,而不是使用本地文件,请安装一个简单的Web服务器并通过
Chrome和Safari对使用ajax和本地资源有限制。这就是它抛出错误的原因
Origin null is not allowed by Access-Control-Allow-Origin.
解决方案:使用firefox或将数据上传到临时服务器。如果您仍想使用Chrome,请使用以下选项启动它;
1 | --allow-file-access-from-files |
有关如何将以上参数添加到Chrome的更多信息:右键单击任务栏上的Chrome图标,右键单击弹出窗口中的Google Chrome并单击属性,然后在"快捷方式"选项卡下的"目标"文本框中添加上述参数。它将如下所示;
1 | C:\Users\XXX_USER\AppData\Local\Google\Chrome\Application\chrome.exe --allow-file-access-from-files |
希望这会有所帮助!
只是想补充一点,"运行一个网络服务器"的答案似乎相当令人生畏,但如果你的系统上有python(默认安装至少在MacOS和任何Linux发行版上),它就像下面这样简单:
1 | python -m http.server # with python3 |
要么
1 | python -m SimpleHTTPServer # with python2 |
因此,如果你的html文件
1 2 | cd /path/to/mydir python -m http.server # or the python2 alternative above |
然后将浏览器指向:
1 | http://localhost:8000/myfile.html |
你完成了!适用于所有浏览器,无需禁用Web安全性,允许本地文件,甚至可以使用命令行选项重新启动浏览器。
添加一点使用Gokhan的解决方案使用:
1 | --allow-file-access-from-files |
现在,您只需要在目标文本中的文本上方附加一个空格。
确保在添加上述属性后关闭所有chrome浏览器实例。
现在,通过添加此属性的图标重新启动chrome。
它应该适用于所有人。
我想谦虚地补充说,根据这个SO来源:https://stackoverflow.com/a/14671362/1743693,这种麻烦现在只需使用以下jQuery指令部分解决:
1 | $.support.cors = true; |
我在IE10.0.9200上尝试过,它立即起作用(使用jquery-1.9.0.js)。
在Chrome 28.0.1500.95 - 这条指令不起作用(大卫在上面链接的评论中抱怨,这种情况发生了)
使用--allow-file-access-from-files运行chrome并不适合我(正如Maistora上面提到的那样)