2

ブラウザが閉じられるときにいくつかの機能を実装しました。

window.onbeforeunload = function (evt) {

    evt = (evt)? evt:event;
    clickY = evt.clientY;
    altKey = evt.altKey; 
    keyCode = evt.keyCode; 

if (altKey == true && keyCode == 0){ 
            //Make call to the server to clear the cache                   
    }else if(clickY < 0){
     //Make a call to the server to clear the cache
    }else {
        return;
    }             
};

上記のコードの問題は、アドレスバーをクリックしてEnterキーを押すか、更新ボタンでページを更新したときに、コードがアラート( "21112")を表示することです。ブラウザが閉じている場合。誰かがこれを達成するのを手伝ってくれますか。

4

3 に答える 3

8

window.onbeforeunloadイベントは、ページがunload編集される前の呼び出しです。更新イベントかブラウザウィンドウクローズイベントかを確認する方法はありません。

さまざまなシナリオで起動しますMSDN

  • 現在のウィンドウを閉じます。
  • 新しいアドレスを入力するか、お気に入りを選択して、別の場所に移動します。
  • 別のドキュメントを参照するアンカーをクリックします。
  • メソッドを呼び出しanchor.clickます。
  • メソッドを呼び出しdocument.writeます。
  • メソッドを呼び出しdocument.closeます。
  • メソッドを呼び出しwindow.closeます。
  • window.navigateまたはNavigateAndFindメソッドを呼び出します。
  • メソッドを呼び出しlocation.replaceます。
  • メソッドを呼び出しlocation.reloadます。
  • プロパティに新しい値を指定しlocation.hrefます。
  • INPUTtype=submitコントロールを介してACTION属性で指定されたアドレスにフォームを送信するか、メソッドを呼び出しform.submitます。
  • メソッドを呼び出し、ウィンドウ名window.openに可能な値を指定します。_self
  • メソッドを呼び出しdocument.openます。
  • [戻る]、[進む]、[更新]、または[ホーム]ボタンをクリックします。

そして、あなたはこれを処理することはできません。

またwindow.onbeforeunload、ユーザーがページを離れることを通知するイベントとハンドラー関数はreturn、確認ポップアップに含まれる値を文字列化する必要があることに注意してください(バグFirefox 4+を参照)。

ユーザーにページに留まることを強制することはできません。

注:あなたができる唯一のことはonbeforeunload、彼があなたのページを離れることをユーザーに通知することです (これは、いくつかの邪悪なページが別のページを開く可能性があるためです...そしてユーザーをスパムします。これはセキュリティ制限です)。

onunloadウィンドウがアンロードされる前にAJAX呼び出しを行う場合は、イベントを使用する必要があります。AJAX呼び出しは同期する必要があることに注意してください。非同期呼び出しは機能しません。

于 2012-05-17T14:25:00.207 に答える
0

私はしばらくの間この同じ問題に取り組んだので、私が見つけたことを説明します。

1)window.onbeforeunloadイベントはブラウザごとに少し異なる方法で処理されます。ユーザーがページにとどまることを選択したかどうかに関係なく、イベントが発生するとすぐにセッションが失われるのを見てきました。

2) Web アプリケーションには、ユーザーがブラウザーを閉じたり、ページから離れたりするのを防ぐ力がありません (明らかな理由により) が、サーバー側のフックを実装することで、次の場合にのみ必要なクリーンアップ コードを呼び出すことができました。ブラウザーは閉じられていたので、ユーザーにプロンプ​​トを出すことはしませんでした (これは、ユーザーのブラウザーをハイジャックするようなものです)。

ウィンドウを閉じる前にユーザーにプロンプ​​トを表示する必要がある場合は、ユーザーが新しい URL を入力するときにもプロンプトを表示します。それらは同一のものです

于 2012-05-21T16:46:00.867 に答える
0

このスレッドの男は、イベントに基づく彼のアプローチonbeforeunloadが IE で機能すると述べています。

私見ですが、あなたが望むことを行うための最良の(そしてクロスプラットフォームの)チャンスは、Ajaxポーリングリクエストをセットアップして(ここに素晴らしいデモがあります)、最後のユーザーアクティビティからの経過時間を確認し、それに応じてキャッシュをクリアすることです.

于 2012-05-18T18:24:28.573 に答える