2016-08-09 47 views
2

我遇到了單頁應用程序的問題,其中用戶沒有最新版本,因爲他們不需要重新加載頁面。有什麼辦法可以得到頁面第一次通過JavaScript加載的日期?我可以將更新代碼的日期存儲在數據庫中,然後定期檢查該日期以查看用戶是否需要刷新。我只需要一個日期來比較它。Javascript獲取該頁面加載日期

我在想我可以使用localStorage,只是在頁面加載時放入一個時間戳,但如果有多個標籤打開,這會產生一個問題。如果我試圖將其存儲在服務器上的數據庫中,我也遇到同樣的問題。

我期望實現的目標與谷歌收件箱的「有新版本可用,請刷新」消息類似,我不時在該頁底部看到該消息。

任何想法?

+0

我想你不想使用用戶的時間,因爲它可能與服務器的不同。你爲什麼不把數據保存在會話中?這樣,它將成爲服務器的時間,並且每個會話都是唯一的(這意味着新選項卡也不會干擾這一點)。 –

回答

2

理想情況下,您需要訪問響應標題。但我不相信你能做到這一點。如果你做更簡單的事情會怎麼樣。你不需要玩localStorage或餅乾。加載頁面時,只需將變量設置爲new Date()即可。喜歡的東西

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

然後,以後你可以檢查pageLoadedOn這應該是平等的,當頁面第一次呈現給。這也應該跨越標籤,因爲每個頁面都是按標籤單獨呈現的。

1

檢查時間戳可能是一個壞主意,這取決於您的工作環境。如果你的用戶有一臺沒有RTC的設備(想想:樹莓派),你可能會感到不幸,而且他們的系統時鐘在打開你的網頁時可能完全錯誤(幾小時,幾天甚至幾年)。這樣你會得到誤報。例如,如果他們的時鐘在過去很遠,他們會被提示重新加載,儘管有最新版本。當然,這是一個極端的例子。

如果您只需要知道版本是否過時,並且您將要查詢服務器,爲什麼不只是在JavaScript中放置某個版本的某個版本?

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

或者在html本身,然後用javascript檢索它?

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

如果你不喜歡數字,和點符號,一個簡單的整數就足夠了:

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

甚至釋放時間戳:

var VERSION=1470786198; 

然後,當你週期性向服務器詢問最新版本是什麼,然後和你的產品進行比較。如果您的版本不同,則提示用戶重新加載頁面。