国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > HTML5 > 正文

利用Storage Event實現頁面間通信的示例代碼

2024-09-05 07:22:35
字體:
來源:轉載
供稿:網友

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

  • 通過localStorage.setItem或sessionStorage.setItem保存(更新)某個storage
  • 保存(更新)這個storage時,它的新值必須與之前的值不同

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

舉例:

// 初始化storagewindow.localStorage.setItem('a', 123);// 注冊onstorage事件window.onstorage = (e) => {  console.log(e);};// 更新storagewindow.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('a', 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 里面的數據在頁面會話結束時會被清除

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 西华县| 额敏县| 本溪市| 犍为县| 西宁市| 西平县| 乌拉特后旗| 宣汉县| 绵竹市| 沁阳市| 阳高县| 察雅县| 会昌县| 宁南县| 界首市| 吐鲁番市| 内江市| 扎囊县| 丹巴县| 米林县| 河池市| 文安县| 专栏| 古蔺县| 古田县| 隆化县| 吉木萨尔县| 拉萨市| 弥勒县| 砚山县| 天全县| 云安县| 韩城市| 五原县| 临武县| 海兴县| 遵义市| 鲁甸县| 开封县| 龙江县| 盐源县|