首頁  >  文章  >  web前端  >  利用Storage Event實現頁間通訊的範例程式碼

利用Storage Event實現頁間通訊的範例程式碼

青灯夜游
青灯夜游轉載
2018-10-09 16:46:511876瀏覽

這篇文章主要介紹了利用Storage Event實現頁間通訊的範例程式碼的相關資料,有一定的參考價值,有需要的朋友可以參考一下,希望對你們有所幫助。

我們都知道觸發window.onstorage必須滿足以下兩個條件:

  • 透過localStorage.setItem或sessionStorage.setItem儲存(更新)某個storage

  • 在儲存(更新)這個storage時,它的新值必須與之前的值不同

上面的第二個條件,簡單來講就是:要嘛是storage的初始化,因為不存在的storage,其值為null;要嘛就是對已有storage的更新

舉例:

// 初始化storage
window.localStorage.setItem('a', 123);

// 注册onstorage事件
window.onstorage = (e) => {
  console.log(e);
};

// 更新storage
window.localStorage.setItem('a', 123);

上面的最後一行程式碼並不會觸發onstorage事件,因為a的值並沒有變化,前後都是123,所以瀏覽器判定這次更新是無效的

由於onstorage事件是瀏覽器觸發的,所以如果我們打開了多個相同域名下的頁面,並在其中任一頁面執行window.localStorage.setItem方法(也要保證滿足文章開頭提到的第二個條件),那麼其他頁面如果監聽了onstorage事件,則這些頁面中的onstorage事件回呼都會被執行

舉例:

// http://www.example.com/a.html
<script>
// 注册onstorage事件
window.onstorage = (e) => {
  console.log(e);
};
</script>
// http://www.example.com/b.html
<script>
// 注册onstorage事件
window.onstorage = (e) => {
  console.log(e);
};
</script>
// http://www.example.com/c.html
<script>
// 触发onstorage事件
window.localStorage.setItem(&#39;a&#39;, new Date().getTime());
</script>

只要保證c頁面在a和b頁面之後打開(哪怕三個頁面不在同一瀏覽器窗口,這裡需要區別窗口與tab頁的區別),那麼a和b頁面中的onstorage事件都會被觸發

現在我們已經知道如何利用storage event實現了頁面之間的通信,那麼這個通信對於我們有何用途呢?

其實我們只需知道是哪個storage的更新操作觸發了onstorage事件就足夠了,那我們要如何知道呢? onstorage事件回呼和其他事件回呼函數一樣,也接收一個event物件參數,在這個物件中有3個有用的屬性,它們分別是:

  • key 被初始化或更新的storage的鍵名稱

  • oldValue 被初始化或更新的storage之前的值

  • ##newValue 被初始化或更新的storage之後的值

結合這3個關鍵屬性,我們就可以實現頁間的資料同步

#最後提一下localStorage與sessionStorage的差異

localStorage 裡面儲存的資料沒有過期時間設置,而儲存在sessionStorage 裡面的資料在頁面會話結束時會被清除

總結:以上就是本篇的全部內容,希望能對大家的學習有所幫助。更多相關教學請造訪

Html5影片教學

相關推薦:

php公益訓練影片教學

#HTML5圖文教學

HTML5線上手冊

以上是利用Storage Event實現頁間通訊的範例程式碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:jb51.net。如有侵權,請聯絡admin@php.cn刪除