Javascript 获取浏览器控制台中显示的XMLHttpRequest连接状态
我想检查是否可以通过XMLHttpRequest访问网站。 我编写了一个JS函数:Javascript 获取浏览器控制台中显示的XMLHttpRequest连接状态,javascript,html,xmlhttprequest,Javascript,Html,Xmlhttprequest,我想检查是否可以通过XMLHttpRequest访问网站。 我编写了一个JS函数:UrlExsists(url);尝试建立连接 function UrlExists(url) { var http = new XMLHttpRequest(); http.open('HEAD', url, false); http.send(); if (http.status != 404) { console.log("did work:" + url)
UrlExsists(url)
;尝试建立连接
function UrlExists(url) {
var http = new XMLHttpRequest();
http.open('HEAD', url, false);
http.send();
if (http.status != 404) {
console.log("did work:" + url)
} else {
console.log("did not work:" + url)
}
};
当我转到浏览器控制台并像这样调用函数时:urlexists(“https://www.google.com/");代码>,控制台中显示以下内容:
“XHR头[HTTP/2.0 200 OK 668ms]”
但由于“跨源请求被阻止”而失败,并发生网络错误。=>
如果我调用urlexists(“https://www.google.com/test");代码>将显示以下内容:
“XHR头[HTTP/2.0 404未找到0毫秒]”
再次出现“跨源请求被阻止”和网络错误。=>
现在这些状态码404和200正是我想要的,但是我如何在javascript中获得它们,以确定给定的网站是否可用
如果我走错了路,有人能给我点对的吗?由于CORS错误,这是不可能的(如果没有启用跨源资源共享,您无权加载其他站点的脚本:)。您无法获取信息,甚至无法获取HTTP响应代码
我看到的唯一解决方法是向DOM追加css请求。并检查css是否成功加载。但这不是一个通用的解决方案,您需要选择一些css类并检查它是否已加载。此外,还需要使用HTML元标记禁用缓存
您还可以动态附加css链接标记(说明:)
经过一些延迟(如3-5秒超时),您将检查css是否已成功加载:
function verifyStyle(selector) {
var rules;
var haveRule = false;
if (typeof document.styleSheets != "undefined") { //is this supported
var cssSheets = document.styleSheets;
outerloop:
for (var i = 0; i < cssSheets.length; i++) {
//using IE or FireFox/Standards Compliant
rules = (typeof cssSheets[i].cssRules != "undefined") ? cssSheets[i].cssRules : cssSheets[i].rules;
for (var j = 0; j < rules.length; j++) {
if (rules[j].selectorText == selector) {
haveRule = true;
break outerloop;
}
}//innerloop
}//outer loop
}//endif
return haveRule;
}//eof
var ok = verifyStyle(".url-exists");
函数验证样式(选择器){
var规则;
var-haveRule=false;
如果(typeof document.styleSheets!=“undefined”){//是否支持此操作
var cssSheets=document.styleSheets;
外部环路:
对于(变量i=0;i
如果变量ok为true,那么给定的url()是可访问的。我想,我找到了解决问题的方法。
fetchapi似乎正是我想要的。
我按照Kaido的回答做了:
:“浏览器在出现XMLHttpRequest错误时也会报告状态为0。”-因此,如果出现CORS错误,您将无法获得此信息。感谢您的回答,我不知道您可以这样做。我肯定会进一步研究这个问题,不过我找到了解决问题的办法。fetchapi似乎起到了作用。
.url-exists {
}
function verifyStyle(selector) {
var rules;
var haveRule = false;
if (typeof document.styleSheets != "undefined") { //is this supported
var cssSheets = document.styleSheets;
outerloop:
for (var i = 0; i < cssSheets.length; i++) {
//using IE or FireFox/Standards Compliant
rules = (typeof cssSheets[i].cssRules != "undefined") ? cssSheets[i].cssRules : cssSheets[i].rules;
for (var j = 0; j < rules.length; j++) {
if (rules[j].selectorText == selector) {
haveRule = true;
break outerloop;
}
}//innerloop
}//outer loop
}//endif
return haveRule;
}//eof
var ok = verifyStyle(".url-exists");