的JavaScript / jQuery的检查断开的链接(JavaScript/jQuery che

2019-08-21 03:24发布

我开发了一个小的Javascript / jQuery的程序访问的PDF文件的集合供内部使用。 我想有一个PDF文件的信息DIV强调,如果该文件确实存在。

有没有一种方法以编程方式确定是否以文件的链接被打破? 如果是这样,怎么样?

任何指南或建议被拨。

Answer 1:

如果文件是在同一个域,那么你可以使用AJAX来测试他们的存在为亚历克斯·塞克斯顿说。 但是,你不应该使用GET方法,只是HEAD然后检查的期待值HTTP状态(200,或者只是小于400)。

下面是从提供简单的方法相关的问题 :

function urlExists(url, callback) {
  var xhr = new XMLHttpRequest();
  xhr.onreadystatechange = function() {
    if (xhr.readyState === 4) {
      callback(xhr.status < 400);
    }
  };
  xhr.open('HEAD', url);
  xhr.send();
}

urlExists(someUrl, function(exists) {
    console.log('"%s" exists?', someUrl, exists);
});


Answer 2:

问题是,JavaScript有同源策略,所以你不能抓住从另一个域的内容。 这将不会被upvoting它(想了解17票)改变。 我认为你需要它的外部链接,所以不可能仅仅是.js ...



Answer 3:

如果文件不是在外部网站上,你可以尝试让每一个文件一个Ajax请求。 如果它回来作为一个失败,那么你知道它不存在,否则,如果它完成和/或时间超过规定的阈值更长的时间才能恢复,你可以猜测,它的存在。 这并不总是完美的,但一般“filenotfound的要求是快速。

var threshold   = 500,
    successFunc = function(){ console.log('It exists!'); };

var myXHR = $.ajax({
  url: $('#checkme').attr('href'),
  type: 'text',
  method: 'get',
  error: function() {
    console.log('file does not exist');
  },
  success: successFunc
});

setTimeout(function(){
  myXHR.abort();
  successFunc();
}, threshold);


Answer 4:

就像塞巴斯蒂安说,这是不可能的,因为同源策略。 如果网站可以发布(临时)在公共领域,你可以使用的链接检查服务之一在那里。 我身后checkerr.org



Answer 5:

您可以$.ajax它。 如果文件不存在,你会得到404错误,那么你可以做任何你需要在错误回调(UI明智)。 这取决于你如何触发请求(定时器?)当然,如果你也必须做一些服务器端的编码,你可以做一个Ajax请求的能力 - 扫描目录,然后返回结果说JSON。



Answer 6:

正如其他人所说,因为JavaScript的同源策略的,简单地使用从接受答案的功能不起作用。 一种解决方法,这是使用代理服务器。 你不必使用自己的代理对于这一点,你可以使用例如此项服务: https://cors-escape.herokuapp.com (代码在这里 )。

代码如下所示:

var proxyUrl = "https://cors-anywhere.herokuapp.com/";

function urlExists(url, callback) {
  var sameOriginURL = proxyUrl + url;
  var xhr = new XMLHttpRequest();
  xhr.onreadystatechange = function() {
    if (xhr.readyState === 4) {
      callback(xhr.status < 400);
    }
  };
  xhr.open('HEAD', sameOriginURL);
  xhr.send();
}

urlExists(someUrl, function(exists) {
  console.log('"%s" exists?', someUrl, exists);
});


文章来源: JavaScript/jQuery check broken links