ユーザーが最初に自分のページにアクセスしたときに (リンクを介して、または URL を直接入力して)、いくつかの作業を行いたいと考えています。ただし、ユーザーが別の場所に移動し、戻る/進むボタンを使用して自分のページに戻ってきた場合、その作業をやり直したくありません。
これを達成するための最良の方法は何ですか?
注: ユーザーが更新ボタンを押してページの再読み込みを強制した場合は、作業を行う必要があります。
ユーザーが最初に自分のページにアクセスしたときに (リンクを介して、または URL を直接入力して)、いくつかの作業を行いたいと考えています。ただし、ユーザーが別の場所に移動し、戻る/進むボタンを使用して自分のページに戻ってきた場合、その作業をやり直したくありません。
これを達成するための最良の方法は何ですか?
注: ユーザーが更新ボタンを押してページの再読み込みを強制した場合は、作業を行う必要があります。
if (performance.navigation.type !== performance.navigation.TYPE_BACK_FORWARD) {
//No back or forward button.
}
これを localStorage と組み合わせると思います。
考えられるアプローチの 1 つを以下に概説しますが、これはまったくエレガントではありません。
ただのアイデア:
通常、ブラウザは入力値を記憶しているため、戻ったときに表示されます。
入力 (CSS で非表示) を使用できます。
入力の現在の値に特別な値があるかどうかをオンロード チェックします (この値はサーバー側で生成する必要があるため、back/forward を使用しても更新されません)
<script type="text/javascript">
jQuery(
function($)
{
if($('#history').val()==$('#history').data('value'))
{
alert('you did use back/forward');
}
else
{
$('#history').val($('#history').data('value'));
alert('you did not use back/forward');
}
}
);
</script>
<input style="display:none" id="history" data-value="<?php echo time();?>"/>
ユーザーが back/forward を使用すると、input-value は data-value 属性と等しくなります (ただし、ユーザーが F5 キーを押した場合は異なります。これは、data-value-attribute も更新されるためです)。
最善の方法は、HTML5 Web ストレージを使用することです。セッション ストレージを使用します。ページを最初にロードするときに、ローカルストレージ変数が設定され、データが保存されているかどうかを確認します。そうでない場合は、データを設定します。ユーザーが次/前のボタンを使用し、ページロードイベントが呼び出されたときに再び戻ってくると、ユーザーが以前にここにいたことを検出できます。最初のページ読み込みではありません。このデモ http://www.amitpatil.me/demos/html5-web-storage/web_storage.htmlを参照してください。詳細な記事はhttp://www.amitpatil.me/introduction-to-html5-feature-web-です。保管所/
ここではLocalStorageがいいでしょう。Cookie と同様に機能しますが、クライアント側にのみ存在し、ヘッダーと共に何も送信されません。他の人も同じまたは似たようなことを言っています。
したがって、変数の値を現在のページの識別子に設定し、それを変数 A) 既存の変数、および B) 最初のページに設定されている変数に対して参照します。
<script>
if( !localStorage["lastPage"] && localStorage["lastPage"] != theFirstPageIdentifier ) {
// this is the first view
localStorage["lastPage"] = currentPageIdentifier;
}
</script>
注: 古いバージョンの IE (おそらく他のバージョン) では localStorage を使用できず、フォールバックのためにここで Cookie を使用できます。同じコンセプト。
これが機能することを示す例が必要だと思います: http://rlemon.github.com/demos/12323999/page1.htmlソースを表示。
あなたの問題の解決策は、現在のブラウザが開いている間は残り、その後期限切れになるセッションCookieを保存することだと思います-これはjQuery Cookieプラグインを使用して簡単です
次に、これと同じくらい簡単にCookieを設定できます
$.cookie("example", "foo");
あなたが話している作業は、Cookie が存在しない場合に実行され、Cookie が存在する場合は無視されます