2012-09-30 113 views
2

問題是我在我的網站上有許多exetrnal下載鏈接,並且一些鏈接過期,所以我想自動檢測到過期的鏈接。檢測外部損壞的鏈接

對我來說一個有效的鏈接是指向我的文件服務器之一的直接文件下載鏈接。 斷開的鏈接會導致出現錯誤消息的簡單html頁面。

我的第一個想法是獲取下載鏈接的html源代碼,看看它是否包含錯誤,但它不起作用。 我也試過javascript,但問題是,js不處理外部鏈接。

任何想法?? 非常感謝

+0

你總是可以發送您要查找的每一個URL的AJAX請求,並看看你是否有404,500等錯誤。 – Ian

+2

爲每個鏈接執行此客戶端,並且對於訪問您的站點的每個客戶端都有很大的開銷,爲什麼不在服務器端每天檢查一次,如果鏈接中斷並將其從數據庫中刪除? – supernova

回答

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> 
+0

我的目標是有一個按鈕,一旦點擊它掃描給定頁面上的所有鏈接,並顯示斷開的鏈接,這就是全部。 – user1709976

+0

好的,您的場景與我上面提到的完全相同,您需要在服務器中執行此操作,因爲跨域請求無法通過AJAX進行。如果您要檢查的鏈接位於您的應用託管的同一個域中,則只能使用JS,但我認爲這不是您的情況。你在服務器上使用什麼語言? –

+0

我使用PHP作爲語言 – user1709976

2

,你可以嘗試用JavaScript這樣做。

我有一個greasemonkey腳本,它會自動檢查打開頁面中的所有鏈接,並根據服務器響應(未找到,禁止等)標記它們。

看看你是否可以從它那裏得到一些建議:http://userscripts.org/scripts/show/77701

我知道跨域策略並不適用於GM_xmlhttprequest,如果想使用JavaScript的解決方案,可能必須嘗試一種變通方法,如:

如果你想要一個服務器端解決方案,我相信上面的答案可以幫助你。