国产探花免费观看_亚洲丰满少妇自慰呻吟_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 里面的數據在頁面會話結束時會被清除

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 滦平县| 公安县| 三都| 丹寨县| 赫章县| 金塔县| 清徐县| 盐津县| 马山县| 济南市| 屯昌县| 斗六市| 商都县| 扎兰屯市| 苍梧县| 浦县| 奈曼旗| 北安市| 祁连县| 五指山市| 海盐县| 泸州市| 尚志市| 崇文区| 昌乐县| 美姑县| 全南县| 仁寿县| 河源市| 洪雅县| 通江县| 武川县| 喀喇沁旗| 米脂县| 泸州市| 巨鹿县| 仙桃市| 安康市| 香格里拉县| 砀山县| 诸暨市|