检查跨域url是否使用javascript提供404

检查跨域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); 我从获

我正在尝试这段代码,但它给了我一个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);


我从获得此代码,所以请回答,但正如所说,我无法使其工作…

跨域不提供任何状态代码。当服务器以是或否响应时,状态代码是从服务器接收的内容的一部分。在跨域的情况下,服务器从不响应请求


代码中的第二个错误是,如果没有任何等待时间或成功事件,就无法直接捕获状态代码。函数中的return语句不会等到服务器响应ajax请求,所以您不能依赖它。

由于JavaScript中的“同源策略”,您不能从不同的URL调用服务。这里介绍了一些解决方法:


最简单的方法是使用“iframe”。通过打开带有目标url的iframe,您将能够向该url发出http请求。

我看到了您的小提琴,它包括两个问题:

  • DOM异常
  • CORS政策
    • 由于正在进行同步调用,因此将出现DOM异常
    通过将最后一个属性设置为
    true

    http.open('GET',url,true)

    您可以在这里阅读文档

    同时,请查看以下内容:

    • 你可以了解cors的问题

    不检测404错误,但可以使用
    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()将在响应结束之前不会返回。但是,不建议在主线程中执行。