检测外部断开的链接

时间:2012-09-30 15:55:05

标签: javascript

问题是我在我的网站上有很多exetrnal下载链接,而且有些链接过期了,所以我想自动检测过期的链接。

对我来说,有效链接是指向我的一个文件服务器的直接文件下载链接。 断开的链接会导致出现一个带有错误消息的简单html页面。

我的第一个想法是获取下载链接的html源代码,看看它是否包含错误,但它不起作用。 我也试过javascript,但问题是js不处理外部链接。

任何想法? 非常感谢

3 个答案:

答案 0 :(得分:2)

这不是前端的任务,而是后端的任务。正如超新星所说,每天从您的服务器检查一次。 AJAX请求不是您的答案,因为browser security policy不允许对不同域的请求。


解决方案:

好的,根据您的评论,请检查此解决方案:

<html>
<head>
  <script src='http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js'></script>
  <script>
    $(document).ready(function(){
      var linksDiv = $('#links');

      $('#generateLinks').click(function(){
        //I don't know your logic for this function, so I'll try to reproduce the same behavior
        var someURLs = ['http://www.google.com','http://www.djfhdkjshjkfjhk.com', 'http://www.yahoo.com'];
        linksDiv.html('');

        for(var i = 0; i < someURLs.length; i++){
          var link = $('<a/>').attr('href', someURLs[i]).append('link ' + i).css('display','block');
          linksDiv.append(link);
        }

      });

      $('#getLinksAndSend').click(function(){
        var links = linksDiv.find('a');

        var gatheredLinks = [];

        $(links).each(function(){
          gatheredLinks.push(this.href);
        });

        sendLinks(gatheredLinks);
      });

      var sendLinks = function(links){
        $.ajax({
          url: "your_url",
          type: "POST",
          data: {
            links: links
          }
        }).done(function(resp) { 
          alert('Ok!')
        });
      }
    });
  </script>
</head>
<body>
  <div id="links">

  </div> 
  <button id="generateLinks">Generate all links</button>
  <button id="getLinksAndSend">Get links and send to validator</button>
</body>
</html>

答案 1 :(得分:2)

如果您不介意让客户端完成工作,您可以尝试使用javascript。

我有一个greasemonkey脚本,可以自动检查打开页面中的所有链接,并根据服务器响应(未找到,禁止等)标记它们。

看看你是否可以从中获得一些想法:http://userscripts.org/scripts/show/77701

我知道跨域策略不适用于GM_xmlhttprequest,如果想要使用javascript解决方案,可能需要尝试一种解决方法,例如:

如果您需要服务器端解决方案,我相信上述答案可以帮助您。

答案 2 :(得分:0)

它可能有点矫枉过正,但linux kde中有一个名为klinkstatus的程序可以在网站中找到损坏的链接:

https://www.kde.org/applications/development/klinkstatus/