2016-08-09 4 views
2

私は、ページをリロードする必要がないため、ユーザーには最新のバージョンがない単一ページのアプリケーションで問題が発生しています。ページが最初にjavascriptで読み込まれる日付を得る方法はありますか?私は、データベースにコードを更新した日付を保存し、その日付を定期的にチェックして、ユーザーが更新する必要があるかどうかを確認できます。私はそれを比較する日付が必要です。JavaScriptが読み込まれた日付を取得する

私はlocalStorageを使用し、ページが読み込まれるときにタイムスタンプを入れることができると思っていましたが、複数のタブが開いていると問題が発生します。また、サーバー上のデータベースに格納しようとすると、同じ問題が発生します。

私が達成しようとしているのは、グーグルインボックスの「利用可能な新しいバージョンがあります。リフレッシュしてください」メッセージに似ています。

アイデア?

+0

ユーザーの時間を使用したくないと思っています。サーバーの時間と異なる可能性があるからです。なぜセッションにデータを保存しないのですか?そうすれば、サーバーの時間とセッションごとに一意になります(つまり、新しいタブはこれに干渉しません)。 –

答えて

2

理想的には、応答ヘッダーにアクセスする必要があります。しかし、私はあなたがそれを行うことができるとは思わない。何か簡単なことをすればどうでしょうか? localStorageまたはクッキーで遊ぶ必要はありません。ページがロードされたときに変数がnew Date()に設定されているだけです。その後、

<html> 
... 
<script> 
    var pageLoadedOn = new Date() 
</script> 
</html> 

そして何かのように、後で上のページが最初にレンダリングされたときと同じでなければなりませんpageLoadedOnを確認することができます。これは、各ページがタブごとに別々にレンダリングされるため、タブ全体でも機能するはずです。

1

タイムスタンプを確認することは、お使いの環境に応じて悪い考えです。ユーザーにRTCのないデバイス(ラズベリーパイと思う)があると、不運になる可能性があり、Webページを開いたときにシステムクロックが完全に間違っている可能性があります(数時間、数日、さらには数年間)。あなたはこのように偽陽性を得るでしょう。たとえば、過去の時計が非常に遠い場合、最新のバージョンを使用しているにも関わらず、リロードを促すメッセージが表示されます。もちろん、これは極端なケースです。

バージョンが古くなっているかどうかを知る必要があり、とにかくサーバーに照会する必要がある場合は、JavaScriptのどこかにバージョンを置くのはなぜですか?

var VERSION="1.0.1"; // gobablly accessible variable 

または、それ自体がjavascriptで取得できますか?

var VERSION=7; // version 7. Increment for each new release. 

、あるいはリリース・タイムスタンプ:あなたは数値とドット表記を好きではない場合

<body class="something" data-version="1.0.1"> 

、単純な整数で十分です

var VERSION=1470786198; 

その後、定期的にサーバーに最新のバージョンが何であるかを尋ねてください。ご使用のバージョンが異なる場合は、ユーザーにページの再ロードを促します。

関連する問題