已解决?,几乎......
这与Chrome(47.0.2526.73)处理xml文件的方式有关。我不知道细节,但这段代码在Firefox(43.0.4)中完全正常。
我仍然很好奇为什么会这样,或者如何让它在Chrome中运行。
我想做的事情:
创建一个javascript书签,检查404s / 500s /等的sitemap 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,则相同的代码会响应:
否'访问控制 - 允许 - 来源'标题出现在请求的上 资源。起源' null'因此不允许访问。
由于我的目标是提供可以在站点地图本身上调用的书签,这会在我的计划中产生问题。
如何测试:
1)从某个网站查找任何xml。 Google" filetype:xml sitemap"并寻找只是一个xml文件的响应(你会发现一些会重定向你)。
2)将上面的代码放在书签中,或直接放在浏览器的开发者控制台中。
3)确保将变量siteMap设置为当前URL。这符合CORS。你甚至可以做siteMap = location.href;
你会发现它在Firefox中运行良好,但在Chrome中却不行。
注意:
从HTML页面执行代码,以HTML页面为目标
从HTML页面执行代码,以XML页面为目标
从XML页面执行代码,定位HTML页面 不 工作。
从XML页面执行代码,以XML页面为目标 不 工作。
研究我已经完成了:
我能找到的关于这个错误的一切(可以理解)与:
有关我的情景不是这些。
答案 0 :(得分:2)
行。
之前,我说:
因此,当您使用Firefox或Chrome(或IE)查看xml文件时 大概),你正在查看的是创建的文档 浏览器内置的xml解析器。
对于Chrome,它是从(nodomain)提供的,而且是 确定如下:
/* Copyright 2014 The Chromium Authors. All rights reserved. * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */
即使网址显示“http://www.example.com/sitemap.xml”,也是如此 在控制台window.location.href中 “http://www.example.com/sitemap.xml”,和 location.origin是 “”http://www.example.com“,实际上,起源是(结果域),就像它一样 是一个扩展页面。因为它是。
因此对于xml页面,origin实际上总是 null 。
不一定是这种情况。
我发现了这个:
Chrome adding Origin header to same-origin request
在Firefox上测试确认FF没有在同源GET或HEAD请求上设置Origin,但Chrome确实如此。这通常不是问题,但在XML页面上,document.domain设置为null。因此它设置的原点为null。
可能是Chrome中的错误?还是故意的?
我仍然不满意自己的答案......
测试:
检查网络标签中的请求标头:
Accept:*/*
Accept-Encoding:gzip, deflate, sdch
Accept-Language:en-GB,en-US;q=0.8,en;q=0.6
Cache-Control:no-cache
Connection:keep-alive
Host:www.example.com
Origin:null
Pragma:no-cache
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.73 Safari/537.36
向上投票jaromanda-x,因为他的直觉导致了我的答案。
答案 1 :(得分:0)