2016-05-23 5 views
0

私は次のページをロードするのに数秒かかる場合があります。イベントではリンクがjavascript/jQueryでダウンロードされたかどうかを検出します

// Assume all internal links start with "http://www.example.com" 
$('a[href*="http://www.example.com"]').on("click", function() { 
    var href = $(this).attr("href"); 
    if (!href || href[0] === "#") { 
    location.hash = href;// set that hash 
    return; 
    } else { 
    location = href; 
    $(".loading-spinner").fadeIn(100, function() { 
     setTimeout(function(){ $(".loading-spinner").fadeOut(200); }, 10000); // 10 second loading maximum 
    }); 
    } 
    return false; 
}); 

:スパムクリックボタンからユーザーを防ぐために次のページがロードさながら、私はページをカバーページローディングスピナーを実装している(と彼らはページを知っているようにローディングがあります)ファイルのダウンロードを開始するリンクのうち、ダウンロードが検出されるとただちに.loading-spinnerをフェードアウトしたいと思います。

リンクがダウンロードをトリガーするか、javascript/jQueryを使用してページを読み込むかを検出する方法はありますか、特別なクラスなどを使用してすべてのダウンロードリンクを特別に識別する必要がありますか?

+1

あなたは 'ダウンロード属性 'を使用していますか? – Rayon

+0

は現時点ではありませんが、これはおそらく "ダウンロード"クラスなどを使用する代わりにやっていることでしょう。一般的に言えば、私はコンテンツタイプが何であるか分かりません。 –

+2

プレヴェンは降下の答えを提供しましたが、 'download'属性を扱うとすれば、物事はより簡単に操作できます.. – Rayon

答えて

1

火URLにAJAX要求とgetResponseHeader機能を使用してコンテンツタイプを取得:

$.get(url, function (response, status, xhr) { 
    if (xhr.getResponseHeader("content-type").indexOf("text") > -1) 
    // Text based stuff. 
    else 
    // Download based stuff. (eg., application/pdf, etc.) 
}); 

詳細:

XMLHttpRequest.getResponseHeader()方法は、テキストを含む文字列を返します。応答がまだ受信されていないか、ヘッダーが応答に存在しない場合は、nullとなります。同じ名前の複数の応答ヘッダーがある場合、その値は単一の連結文字列として返されます。各値はカンマとスペースの組で前の値から区切られます。 getResponseHeader()メソッドは、その値をUTFバイト・スケープとして返​​します。

+0

この方法では、2つの要求を送信する必要があります。おそらく、すべてのダウンロードリンクに 'download'属性を見つけて追加するのが最善でしょう。 –

関連する問題