解决了?,几乎..
这与 Chrome (47.0.2526.73) 如何处理 xml 文件有关。我不知道细节,但这段代码在 Firefox (43.0.4) 中运行良好。
我仍然很好奇为什么会这样,或者如何让它在 Chrome 中工作。
我正在尝试做的事情:
创建一个 javascript 小书签来检查404s/500s/等的站点地图 xml链接。
有问题的代码片段:
var siteMap="http://www.example.com/sitemap.xml";
var httpPoke = function(url,callback){
var x;
x = new XMLHttpRequest();
x.open('HEAD', url);
x.onreadystatechange = function() {
if (this.readyState == this.DONE) {
callback(this.status);
}
}
x.send();
};
var response=httpPoke(siteMap,function(n){
console.log(n);
});
如果我在域中的任何其他页面上,响应是:
200
如果我导航到实际的站点地图http://www.example.com/sitemap.xml,相同的代码会响应:
请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,Origin 'null' 不允许访问。
因为我的目标是提供一个可以在站点地图本身上调用的书签,所以这给我的计划带来了麻烦。
如何测试这个:
1)从某个网站找到任何xml。谷歌“filetype:xml 站点地图”并寻找只是一个 xml 文件的响应(你会发现有些会重定向你)。
2) 将上面的代码放在书签中,或直接放在浏览器的开发者控制台中。
3) 确保变量 siteMap 设置为当前 URL。这是为了符合 CORS。你甚至可以做 siteMap=location.href;
您会发现它在 Firefox 中运行良好,但在 Chrome 中却不行。
笔记:
从 HTML 页面执行代码,以 HTML 页面为目标确实有效。
从 HTML 页面执行代码,以 XML 页面为目标确实有效。从 XML 页面执行代码,
以 HTML 页面为目标不起作用 。以 XML 页面为目标,从
XML 页面执行代码不起作用。
我做过的研究:
我能找到的关于这个错误的一切(可以理解)都与:
- 跨域请求
- 将源或目标放在 localhost、file:/// 或其他本地机器上。
我的情况不是这些。