2009-09-02 5 views
3

状況です。ページ2がロードされる前に、私はまだエスケープしているので、まだページ1にとどまっています。JavaScriptの割り込みイベントここ

その時点で、私はそのイベントを追跡したいと思います。

上記のシナリオを追跡できるように、JavaScriptイベントがありますか。

詳細:

に複数の要求を避けるために、「ページ-2」、ユーザーがページ-1からのリンクをクリックしたときに、私はページ-2へのリダイレクトリンクを無効にしています(への同時要求を避けるために。。

<html> 
<head> 
    <script> 
    document.onkeypress = KeyPressed; 

    function KeyPressed(e) 
    { 
     if (!e) e = window.event; //IE Compatibility 
     alert(e.keyCode); 
    } 
    </script> 
</head> 

<body> 
    <a href="http://stackoverflow.com">Stack Overflow</a> 
</body> 
</html> 

それを:「ページ-2)この時点で、我々はEscキーを押すとロードページ-2、iのページ-1で再びリンクを有効にする必要が中止

+0

タイマーやブラウザのハッキングがないとこれが可能であるかどうかはわかりません。そのハックを使用すると、さまざまなブラウザで多くの問題が発生します。なぜそのイベントが必要なのか説明してください。おそらくあなたの問題を解決するより良い方法がありますか? – bezmax

+1

"page-2"への同時要求を避けるため、ユーザーがpage-1からのリンクをクリックすると、ページ2にリダイレクトされ、リンクが無効になります(page-2に対する複数の要求を避けるため)。私たちはEscを押してページ2の読み込みを中止します。ページ1のリンクを再度有効にする必要があります。 – Madhu

+0

@Madhu:余分な情報が役に立ちます。質問に追加する必要があります。 –

答えて

3

私はこのコードを使用してみましたあなたがページにいる間に押されたキーを検出します。あなたがSOリンクをクリックしてエスケープすると、noth ingが起こる。ブラウザはすでにSOサーバーからの応答を受信して​​おり、処理中です。ブラウザのステータスバーに「Waiting for http://stackoverflow.com」と表示されているにもかかわらず、このページは既に「残っています」。

0

ページがアンロードされると、2つのイベントがトリガーされます。

window.onUnload 
window.onBeforeUnload 

これらのイベントを使用してページのアンロードをキャンセルすることはできますが、その後はページが完了したと見なされます。あなたは何ができるか

ページが新しいページに行く前に5秒ほど待っ作るです:

例:実際には

window.onunload = (function() { 
    var time = new Date(); 
    var cancel = false; 
    window.onkeypress = function (e) { 
    if ((e || window.event).keyCode == 27) cancel = true; 
    }; 
    while(time > new Date() - 5000) { 
    if (cancel) return false; 
    } 
}); 

あなたがしているため、一部のブラウザがハングすることがあり、そのJSスクリプトに与えられたすべての処理時間を引き継ぐ。すなわち:whileブロックで。

これは、ネットワーク待ち時間に縛られているように、処理が集中的ではないブロッキング関数呼び出しを行うことで回避できます。例えば:XMLHttpRequest()など。私はsetTimeout()のような呼び出しがブロックされないので、ここで動作するとは思われません。

+0

はい、ブラウザがフリーズします。 –

0

<a href>タグは、ブラウザに別のページに移動するように指示するので、スクリプトがまだ実行されているかどうかを判断することができます。私がそれだったら、私は聞いていないでしょう。

あなたはそれを上書きしたい場合は、私はあなたがその特定のonClickイベントに耳を傾け、そしてバックグラウンドで目的のページをロードする代わりにコールバックを入れて、ブラウザないを伝える必要がありますね。これはあなたのページがまだアクティブであることを保証します。ターゲットページが読み込まれた後(スクリプトによって)、受信したコンテンツでブラウザを更新するように頼んでください。

これは理論です。私は、DOMによってロードされたページの内容をオーバーライドさせることはできないのかどうかはわかりません。

+0

対象のページが別のサーバー上にある場合、JSはリクエストを許可しません。 – Alsciende

+0

私は専門家ではありません - javascriptのHttpRequestクラスはありませんか?XMLHttpRequestを使用できますか? – xtofl

1

このイベントを処理するというあなたの考えは間違っています。ユーザーがダブルポストデータを操作できないようにするには、ボタンをブロックする必要があります。ただし、リクエストは瞬時に送信されます(!)をクリックしてください。

リンクを1回クリックすると、ページを停止してからもう一度クリックします.2回送信すると、それは何が起こるのか意図されていません。

関連する問題