3

私のウェブページには、隠しフィールドから残り時間を読み取るカウントダウンスニペットがあります。1秒刻みで300から0までカウントダウンし、その結果、非表示フィールドを更新します。ページをリロードすると、ブラウザはサーバーから取得するのではなく、非表示フィールドの古い値を提供します。

スニペットは次のとおりです。

<span id = "counter"> </ span> <input type = "hidden" id = "remaining" value = "300" />

次のようなイベントリスナーブロック内のページのターゲットURLを取得する必要があります。

$(window).unload(function(){
alert(window.location.destination);});

もちろん、私は「目的地」の部分を作りました。私が本当に必要としているのは、リロードを検出し、キャッシュを防ぐためにURLにハッシュパラメーターを付加することです。

4

1 に答える 1

2

関数でユーザーがアクセスしようとしているページのURLを取得できないか、まったく取得できませんunload(場合によっては、プライバシーのリスクがあります)。また、URLのフラグメント識別子(ハッシュ)はキャッシュを妨げません。変更してもページはリロードされません。?queryキャッシュバスターの場合は、URLの一部に書き込む必要があります。これは、たとえば、location.search= '?'+Math.random();

しかし、それはどれも良い考えではありません。ブラウザがページをリロードまたはページに戻る/進むときにフォームの以前の値を「記憶」する動作は望ましくないため、フォームフィールドをまったく使用しないことが最善の策です。スクリプトにDOMの別の部分にデータを書き出させます。

<span id="counter" class="remaining-300"></span>

スクリプトのspan要素からそれを読み取るか.className、変数をJSに直接書き込みます。

<span id="counter"></span>
<script type="text/javascript">
    var remaining= 300;
</script>

これにより、ページが読み込まれるたびにカウントダウンが300秒にリセットされます。

また、多くの最新のブラウザでは、ユーザーが移動したときに元のページ(すべてのコンテンツとスクリプトの状態を含む)を保持し、「戻る」を押したときにリロードせずに元に戻す「bfcache」について考える必要があるかもしれません。 。

現在、カウントダウンは引き続きチェックされますが、ページが非表示になっている間はチェックされないため、離れたときと同じくらいの時間が残ります。それが望ましくない場合は、ティッカー間隔とは関係なく期限タイムアウトを設定して、常に予想されるリロード時間に起動するようにしてください。または、最後の手段として、一般的に回避するために、onunload何もしない関数であっても、何かに設定することで意図的にbfcacheを壊すことができます。

于 2010-05-05T21:50:30.770 に答える