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

首頁 > 編程 > HTML > 正文

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

2024-08-26 00:20:52
字體:
來源:轉載
供稿:網友

我們都知道觸發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 里面的數據在頁面會話結束時會被清除

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


注:相關教程知識閱讀請移步到HTML教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 伊川县| 昌都县| 嘉峪关市| 鄯善县| 昌乐县| 眉山市| 前郭尔| 云安县| 黄骅市| 鲁甸县| 房山区| 饶阳县| 本溪市| 剑河县| 云安县| 江都市| 杨浦区| 吉首市| 无棣县| 齐河县| 阜城县| 广丰县| 乐陵市| 辰溪县| 都安| 大足县| 宁德市| 丹巴县| 泊头市| 崇仁县| 温州市| 宝应县| 台南县| 彰化县| 昌都县| 黑龙江省| 蕲春县| 额敏县| 杭锦旗| 云梦县| 龙岩市|