2015-08-19 55 views
1

我正在製作一系列通過localStorage共享信息的JavaScript頁面。一切工作正常,但當我更改其中一個頁面的參數,然後移動到另一個,我需要手動重新加載與CtrlR,以便更改生效。我成功地使用onBlur進行了自動刷新,但是,當我將腳本上傳到Android(這些腳本的最終目標是成爲Android應用程序)時,此類功能停止工作。JavaScript:如何在local storage更改時重新加載頁面?

所以現在我試圖使用addEventListener與存儲事件,但沒有任何反應,我仍然必須手動刷新。我讀過很多網站,並經歷了很多例子,但我仍然不明白。下面是相關代碼:

window.addEventListener("storage", handler); 

function handler() { 
    location.reload(); 
} 

讓我分享一些更多的我想要做的事:我有一系列的HTML頁面,它們中的每一個形式,使一個飲食計劃的計算。例如:第一個要求身體信息,並給你你的基礎卡路里攝入量。

第二頁顯示基礎卡路里攝入量,使用localStorage存儲,顯示在屏幕上,並要求您填寫日常卡路里指標;用這兩個數字,它計算需要多長時間才能減掉一公斤。

如果我回到第一頁並輸入不同的身體尺寸,生成不同的輸出,然後重新瀏覽第2頁,我想找到那裏的基礎卡路里數自動刷新。我成功了,在這樣使用的onblur和聚焦狀態在計算機上:

window.onblur= function() {window.onfocus= function() {location.reload(true)}}; 

此重新加載你降落在每一個JS檢測你只是改變了從一個標籤到另一個時間標籤的頁面,儘管如果localStorage的數據已經改變或者沒有改變 - 一種「萬一」的方法。

問題是,當我上傳這些網頁到Android,刷新停止停止工作(並在Android中,你不能做Ctrl + R強制它)。顯然Android不會將不同頁面視爲製表符;這將解釋關於Blur和onFocus無法正常工作。

這就是爲什麼現在我正在嘗試localStorage方法:「如果localStorage已經改變(即有人一直在改變其他頁面的值),然後刷新當前頁面上的屏幕(以便新值顯示向上)」。

我知道localStorage事件在我的瀏覽器中工作,因爲this demo有效。但是我不能讓代碼在我的腳本中工作。

我希望有更多的清楚這個時候解釋自己(請多多包涵,這是我的第一篇文章......)

+0

[localStorage的(https://developer.mozilla.org/en-US/docs/Web/API/Storage)沒有事件 – hindmost

+0

你應該每次更改頁面時重新加載數據,或者如果你實際上並不是從一個網址到另一個網址,將數據作爲本地對象並在更新時保存,但總是從該對象讀取。 – Archer

回答

0

,當它在另一個標籤在當前標籤不改變存儲處理程序被調用。
您可以重寫setItem方法。

!function() { 
    var setItem = Storage.prototype.setItem; 

    Storage.prototype.setItem = function() { 
     setItem.apply(this, arguments); 
     location.reload(); 
    }; 
}(); 
相關問題