【发布时间】:2016-05-04 12:30:57
【问题描述】:
解决了?,几乎..
这与 Chrome (47.0.2526.73) 如何处理 xml 文件有关。我不知道细节,但这段代码在 Firefox (43.0.4) 中运行良好。
我仍然很好奇为什么会这样,或者如何让它在 Chrome 中工作。
我正在尝试做的事情:
创建一个 javascript 小书签来检查 sitemap xml 链接中的 404s/500s/等。
有问题的代码 sn-p:
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:/// 或本地计算机上具有源或目标。
我的情况不是这些。
【问题讨论】:
-
你控制sitemap.xml文件/服务器吗?
-
我觉得这与它是一个xml页面有关
-
Jaromanda,你是对的!我刚刚尝试使用其他人的 xml 站点地图(只是用谷歌搜索“filetype:xml 站点地图”并选择了一个),并且发生了完全相同的事情。这确实很奇怪。根据 location.origin,原点不为空。我正在作为书签或控制台执行,但 xml 文件仍然存在错误。
-
那么,如果您尝试完全相同的代码但使用 HTML 文件会发生什么?即
http://www.example.com/sitemap.html而不是http://www.example.com/sitemap.xml?
标签: javascript ajax cors bookmarklet sitemap.xml