2013-05-08 4 views
11

私はsetTimeout()を呼び出すなど、さまざまなJavaScriptコードを実行するページを持っています。ユーザーがリンクをクリックして別のページに移動すると、このページのjavascriptはいつ実行されるのでしょうか?したがって、setTimeoutによって呼び出されるコードは呼び出されなくなります。例えばリンクがクリックされた後、いつJavaScriptでページが実行されなくなるのですか?

  • とすぐにリンクが(私はこれは間違っている知っている)をクリックすると
  • ブラウザで新しいページ
  • 他のいくつかのポイントを受信を開始?

これは、さまざまな主要なブラウザで異なりますか?

背景

私は主に関心のためにこれを知っているのではなく任意の特定の問題を解決したいです。私がこれについて考えるように促した問題は、ユーザーがページ上の特定のリンクをクリックしたときに何かしたいことです。私はajax呼び出しを実行して結果を処理したいが、ページがアンロードされる前に終了してもそれほど心配しない。だから私はリンクのクリックでsetTimeout()を発生させ、その後私はそれが終了しますが、私はそれができない場合は幸運だ。私はどんな状況でうまくいくのだろうかと思った。その問題に対する他の解決策があるかもしれませんが、私は問題の解決策を知りたくありません。

+5

おそらく[onunloadイベント](https://developer.mozilla.org/en-US/docs/DOM/window.onunload)の直後ですが、それはなぜあなたにとって重要なのですか? –

+0

_どのブラウザですか? –

+1

*アクティブタイマー*( 'setTimeout'が追加されます)は[ドキュメントのクリーンアップのステップをアンロード]中にクリアされます(http://www.w3.org/TR/html5/browsers.html#unloading-document-cleanup -steps)は、(他のものの中で)['unload document procedure'](http://www.w3.org/TR/html5/browsers.html#unload-a-document)から呼び出されます。しかし、正確にこれらが[ナビゲーションプロセス](http://www.w3.org/TR/html5/browsers.html#navigating-across-documents)中に呼び出されるのかどうかは分かりません – Bergi

答えて

0

可能な解決策の1つは、クリックイベントを停止し、非同期呼び出しを解除し、ajax呼び出しの結果が処理されたときにデフォルトイベントを再開することです。可能であれば、サーバー上の処理を処理することもできます。この場合、デフォルトイベントを停止する必要はなく、非同期呼び出しを起動するだけです。

あなたの質問に答えて、私は、スクリプトがonunloadイベントの後に実行を停止するとJackに同意します。

このheplsを希望します。

3

ここでは何が起こるかのシーケンスを示します。

ステップ1:リンクをクリックします。ここで、ブラウザはサーバに要求を送信し、応答を待ちます。現在のページのドキュメントオブジェクトはまだ存在します。

ステップ2:ブラウザは応答を受信します。現在のページのドキュメントオブジェクトはまだ存在します。

ステップ3:ブラウザは、新しいドキュメントオブジェクトに対する応答を解析し、作成し、レンダリングします。

ステップ3は、現在のページのJSが停止する場合です。ただし、iframeにレスポンスをターゲティングしている場合は除きます。これを行うと、新しいドキュメントオブジェクトはiframe内でレンダリングされ、現在のページのドキュメントオブジェクトはそのまま残り、JSは引き続き機能します。

あなたの質問にお答えします。

+0

ありがとう!あなたは、より詳細に記述する参考資料を持っていますか? – Rory

+0

ブラウザが応答を受け取る前に古いDOMがアンロードされていると思いますか?あなたはこれがシーケンスだと思うのですが、参照はありますか? – Bergi

+0

ユーザーが応答するリンクを待っているかどうかを検出する方法はありますか?例:「ユーザーが退職しようとしていない場合は、もっと忙しい仕事をしてください。 –

関連する問題