2009-10-19 8 views
24

私は内部で使用するためのPDFファイルのコレクションにアクセスするための小さなJavascript/jQueryプログラムを開発しました。そして、ファイルが実際に存在する場合、pdfファイルの情報divをハイライト表示させたいと思っていました。JavaScript/jQueryは壊れたリンクを確認します

ファイルへのリンクが壊れているかどうかをプログラムで判断する方法はありますか?もしそうなら、どのように?

すべてのガイドまたは提案は充当されています。

答えて

52

ファイルが同じドメインにある場合は、AJAXを使用してその存在をテストすることができます。Alex Sextonと言っています。 ただし、GETメソッドは使用しないでください。ちょうどHEADとし、期待値(200または400未満)のHTTPステータスを確認してください。ここで

related questionから提供された簡単な方法です:

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); 
}); 
+0

私はOPの質問のためにこれを実装する方法を知りたがっています。誰でも? – Trip

+0

あなたは何を求めていますか? –

+0

次のコードでエラーが発生します。「Origin http:// localhostは、Access-Control-Allow-Originによって許可されていません。 – rob

2

ファイルが外部Webサイトにない場合は、各ファイルに対してajaxリクエストを試みることができます。それが失敗として戻ってきた場合は、それが存在しないことを知っています。そうでない場合は、完了した場合、および/または返されるしきい値よりも長くかかる場合は、それが存在すると推測できます。それはいつも完璧というわけではありませんが、一般的に「発見」のリクエストは迅速です。

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); 
0

$.ajaxとすることができます。ファイルが存在しない場合は、404エラーが発生し、エラーコールバックで必要なもの(UI指向)を実行できます。リクエスト(タイマー?)をトリガーする方法はあなた次第です。もちろん、サーバーサイドのコーディングを行う能力がある場合は、1つのAJAXリクエストを行うことができます - ディレクトリをスキャンし、JSONのように結果を返します。

2

問題は、別のドメインからコンテンツをつかむことはできませんので、JavaScriptが同一生成元ポリシーを持っていることです。これはそれをアップヴォーティングすることで変わらないだろう(17票に不思議)。 外部リンクのために必要と思うので、.jsだけでは不可能です。

1

セバスチャンは、同じ起源ポリシーのために可能ではないと言います。サイトがパブリックドメインに(一時的に)公開されている場合は、リンクチェッカーサービスの1つを使用することができます。私は後ろですcheckerr.org

関連する問題