2017-08-02 5 views
3

私は、ブラウザ上でイベントを処理する必要があります。問題は、私の顧客がそれぞれのイベントごとに異なるロジックを必要としていることです。バックボタンの は、このソリューションは、非常に細かいです:リフレッシュ(F5 /リフレッシュボタンによる)とクローズブラウザの区別方法は?

が、今ではリフレッシュと近くを区別するのは難しいですが、私が見つけたすべてのソリューションは、「beforeunload」イベントの使用についてです。

を(これは安定して動作しません)が、ときに、ブラウザ上のユーザのプレス更新ボタンは、私はできません。私が "beforeunload"を使用している場合は、ブラウザの近くのイベントと同じです。

私もこの問題を回避するソリューションが見つかりました:ブラウザが近い場合

が、残念ながら、私は何をしたいこと(ページアンロードする前にメッセージを表示されるが表示されなくリフレッシュするとき)

誰もが解決策を知っていますか(クロスブラウザ)

ありがとう

答えて

0

Cookies/window.sessionStorageを使用します。

明示的に有効期限を設定しないでCookieを設定すると、現在のセッション(ブラウザウィンドウを閉じるまで有効)にのみ使用できるようになります。
また、sessionStorageオブジェクトを使用することもできます。これは、1つのセッションにのみデータを格納します。ユーザーが特定のブラウザー・タブを閉じると、データは削除されます。

あなたはこのappraochに従うことができます:
1.Createにクッキーをユーザーが最初に訪問するページdocument.cookie = "userloggedin=true"; ORクッキーが存在しない場合sessionStorage.userLoggedIn = true;

2.Cookieは、リフレッシュ/クローズと再開タブの後に利用できるようになります設定ユーザーがウィンドウを閉じて、再度開いたことを意味します。
同様に、ユーザーがブラウザタブを閉じた後にセッションデータが削除されます

+0

こんにちは@ankit_sharma 私はlocalStorageが良くなると思う –

+0

私はsessionStorageが良いと思う:P – Winnie

+0

はい、それは私の場合のために働く。 beforeunload私はフラグisUnloadPageを設定し、ロードイベントで私はこのフラグを得ることができるので、ユーザーがちょうど私はロード機能が動作しませんブラウザを閉じる場合、ページを更新することができます知ることができます。何とかそれは回避策の解決策です。ありがとう –

-1

ブラウザのperformance.navigationオブジェクトを使用して、ページへのナビゲーションのタイプを検出できます。

var navigationType = performance.navigation.type; 

if (navigationType === performance.navigation.TYPE_BACK_FORWARD) { 
    console.log("Back/Forward button"); 
} else if (navigationType === performance.navigation.TYPE_RELOAD) { 
    console.log("Reloaded"); 
} else if (navigationType === performance.navigation.TYPE_NAVIGATE) { 
    console.log("Normal navigation"); 
} 

そしてonbeforeunloadイベントは、ブラウザのクローズを検出するためにいつものように使用することができます。ナビゲーション定数の詳細については、this documentationを参照してください。

+0

こんにちは@ 31piy 私はIE 11.1480.14393.0で試してみましたが、うまくいきません。私がリフレッシュアイコンを押すと、ナビゲーションタイプは常に0になります。 –

+0

@unclebob - [このリンク](https://msdn.microsoft.com/en-us/library/ff974736(v=vs.85).aspx) '1'を返します。あなたはそれをどこから手に入れていますか?コードで質問を更新できますか? – 31piy

+0

こんにちはここ31piy @は私のコード >>> '$(ドキュメント).ready(関数(){; \t handleUnloadPage()})です。 関数handleUnloadPage(){ \t $(ウィンドウ).bind( "beforeunload" 機能(E){ \t \t VAR navigationType = performance.navigation; \t \t IF(navigationType === performance.navigation.TYPE_BACK_FORWARD) { \t \t \tはconsole.log( "戻る/進むボタン"); \t \t \t}もしそうでなければ(navigationType === performance.navigation.TYPE_RELOAD){ \t \t \tはconsole.log( "リロード"); \t \t \t} else if(navigationType === performance.navigation.TYPE_NAVIGATE){ \t \t \t console.log( "normal navigation"); \t \t \t} \t}); } ' それはそれです –

関連する問題