检查跨域网址是否为404提供了javascript

时间:2013-07-20 10:35:00

标签: 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);

FIDDLE

我从 this SO答案中得到了这段代码,但正如我说的那样我无法正常工作......

4 个答案:

答案 0 :(得分:1)

不检测 404 错误,但可以通过 setTimeout() hack 检查页面是否存在。

// Based on https://stackoverflow.com/a/18552771
// @author Irvin Dominin <https://stackoverflow.com/u/975520>
function UrlExists(url)
{
  var iframe = document.createElement('iframe');
  var iframeError; // Store the iframe timeout
  
  iframe.onload = function () {
    console.log("Success on " + url);
    clearTimeout(iframeError);
  }
  
  iframeError = setTimeout(function () {
    console.log("Error on " + url)
  }, 3000);
  
  iframe.src = url;
  document.getElementsByTagName("body")[0].appendChild(iframe);
}

UrlExists('http://www.google.com/');
UrlExists('http://www.goo000gle.com');

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

由于JavaScript中的“相同来源策略”,您无法从其他URL调用服务。这里提供一些解决方法:

Ways to circumvent the same-origin policy

最简单的方法是使用“ iframe”。通过使用目标网址打开iframe,您可以向该网址发出http请求。

答案 3 :(得分:0)

我看到了你的小提琴,它包含 2 个问题:

  1. DOM 异常
  2. CORS 政策
  • 您收到 DOM 异常,因为您正在进行同步调用。
<块引用>

通过将最后一个属性设置为 true

使调用同步

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

您可以在此处阅读文档XMLHttpRequest Parameters

还要检查一下:DOM Exception-failed-to-execute-send-on-xmlhttprequest-on-chrome-only

  • 您可以了解 cors 问题 here