检查跨域url是否使用javascript提供404
我正在尝试这段代码,但它给了我一个DOM异常。我希望它使用普通Javascript从函数中获得真/假“答案”检查跨域url是否使用javascript提供404,javascript,xml,ajax,Javascript,Xml,Ajax,我正在尝试这段代码,但它给了我一个DOM异常。我希望它使用普通Javascript从函数中获得真/假“答案” var url = 'http://www.google.com/'; function UrlExists(url) { var http = new XMLHttpRequest(); http.open('HEAD', url, false); http.send(); return http.status!=404; } UrlExists(url); 我从获
var url = 'http://www.google.com/';
function UrlExists(url)
{
var http = new XMLHttpRequest();
http.open('HEAD', url, false);
http.send();
return http.status!=404;
}
UrlExists(url);
我从获得此代码,所以请回答,但正如所说,我无法使其工作…跨域不提供任何状态代码。当服务器以是或否响应时,状态代码是从服务器接收的内容的一部分。在跨域的情况下,服务器从不响应请求
代码中的第二个错误是,如果没有任何等待时间或成功事件,就无法直接捕获状态代码。函数中的return语句不会等到服务器响应ajax请求,所以您不能依赖它。由于JavaScript中的“同源策略”,您不能从不同的URL调用服务。这里介绍了一些解决方法:
最简单的方法是使用“iframe”。通过打开带有目标url的iframe,您将能够向该url发出http请求。我看到了您的小提琴,它包括两个问题:
- 由于正在进行同步调用,因此将出现DOM异常
true
http.open('GET',url,true)代码>
您可以在这里阅读文档
同时,请查看以下内容:
- 你可以了解cors的问题
setTimeout()
hack检查页面是否存在
//基于https://stackoverflow.com/a/18552771
//@作者欧文·多明
函数UrlExists(url)
{
var iframe=document.createElement('iframe');
var iframeError;//存储iframe超时
iframe.onload=函数(){
console.log(“成功登录”+url);
clearTimeout(iframeError);
}
iframeError=setTimeout(函数(){
console.log(“错误在”+url上)
}, 3000);
iframe.src=url;
document.getElementsByTagName(“body”)[0].appendChild(iframe);
}
URLESS('http://www.google.com/');
URLESS('http://www.goo000gle.com');代码>此方法将不起作用,因为它是同源策略。您必须使用服务器端组件来检查URL是否存在。一种选择是使用YQL,如下面的回答所示:@vsr,谢谢你的想法。有没有客户端方法可以做到这一点?只有当url
的主机支持CORS()时,客户端才有可能。由于许多网站不支持CORS,客户端解决方案并非万无一失。重复:破解SOP的唯一方法是以浏览器认为更安全的方式加载页面,使用另一个元素进行破解。我建议尝试img
或可能的object
标记的onerror
处理程序,看看是否可以检索状态代码。在过去,我类似地滥用了iframe
s,但有一些限制(我在fire和forget调用中有效地使用了它,或者当iframe源显式回调父级时使用了它)。http.open有一个async参数,当它设置为false
时,send()将在响应结束之前不会返回。但是,不建议在主线程中执行。