2013-07-22 1 views
7

javascriptを使用してブラウザの「ナビゲーションを停止」ボタンを押したユーザーを検出する方法があるかどうか不思議でした。たとえば、読み込みに時間がかかるウェブページのリンクをクリックすると、スピニングローダーを表示することができます。しかし、ユーザーがページへのナビゲーションをキャンセルするとどうなりますか?あなたが置いた回転ローダーを取り除くためにそれを検出するためにとにかくありますか?JavascriptまたはjQueryでのキャンセルの検出

EDIT:私はもう少し研究を行なったし、JavaScriptでonStopイベントがあるようだけど、あなたがそれを知っているだろう、それが唯一のインターネットエクスプローラで動作します。誰かがonStopのようなクロスブラウザソリューションを実装するための他のアイデアを持っているなら、それはすばらしいでしょうが、そうでなければ、数日後にこれを閉じるために私自身の質問に答えます。

EDIT 2https://stackoverflow.com/a/16216193と言っています。他にもいくつかの答えがあります。

+2

JSがページにロードされる前にSTOPが発生する可能性があるため、信頼できる方法はないと思います。 –

答えて

1

申し訳ありませんが、約束どおり、私は自分の質問に答えるつもりです。

私はこれについてかなり考えています。私は解決策を思いつきました。私はそれをコードで動作させることができませんでした(私はあまりにも頑張っていませんでした)が、理論的にはうまくいくはずです。

ウェブページが停止を決定するタイミングを決める基準を考えました。私はこれを思いついた:

  • 妥当な時間が経過してもスクリプトが終了しなかった場合は、ナビゲーションがキャンセルされたとみなすことができます。

次に、bodyなどでjQueryイベントを発生させることができます。しかし、何が「時間の共鳴」ですか?私は、部分的にページのレンダリング時間(画像を取り込むなど)に基づいて、ユーザーのインターネットがどれほど速いかを知ることになると考えました。

var start = new Date(); 
var time; 
$("body").load(function() { 
    time = new Date() - start; 
    ... 
}); 

乗算を係数(多分3か何か)でとapproxamate転送時間を得ること:それはやっによって得することができます。 (これは、サーバーが次のページを生成するのにどれだけ時間がかかっているかを考慮して調整する必要があります)。次に、この新しく見つかったtime*3を次のように記述します。

$("a").click(function() { //Anything that could go to another page should filter through here 
    setInterval(function() {$(document).trigger("navstopped");},time*3); 
} 
$(document).on("navstopped") { 
    //Do stuff now that we assume navigation stopped. 
} 

を仮定する。これは実際に私たちがここでやっていることです。一貫性のないインターネット接続が可能です(1分後、遅くなります)。サーバーの負荷が矛盾する可能性があります。たぶん、このページの忍者のようなイメージを提供しているかもしれませんが、次のページを生成/提供するためには、次のリクエストがたくさんあります。だから我々は何かがナビゲーションを中断したと仮定している。しかし、我々は特定ではない

もちろん、これはIEのonStopイベントと組み合わせて使用​​できますが、これは実際に私が考えることができる唯一のクロスブラウザソリューションでした。私はそれを動作させることができませんでしたが、将来jQueryの神ができるかもしれません。

投稿前に編集:これを投稿する前から、別のアイデアがありました。より多くのブラウザはonAbortをサポートしています。もし私たちが一度も読み込まれていない写真を持っていて、ユーザーがストップを押すと、onAbortは解雇されますか?別のWebページがロードされていても?それはテストが必要ですが、それも動作する可能性があります。私は最初のアイデアが好きです。不安定ではありますが、それはこのcockamamieのアイデアよりも安定しており、これは悪い習慣になる可能性があることを認識しています。

+1

うわー、これはかなりクールです。私はいくつかのアイデアを持って遊び、私たちは更新していきます。 –

+0

このトピックに関する最新情報はありますか? – ChrFin

+0

まだあなたのアイデアをテストしましたか? –

関連する問題