2

问题是我的网站上有很多外部下载链接,有些链接已经过期,所以我想自动检测过期的链接。

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

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

有任何想法吗??多谢

4

3 回答 3

2

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


解决方案:

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

<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>
于 2012-09-30T16:07:56.820 回答
2

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

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

看看你能不能从中得到一些想法: http: //userscripts.org/scripts/show/77701

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

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

于 2012-09-30T16:41:37.703 回答
0

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

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

于 2017-04-20T18:12:07.117 回答