javascript - js 有什么優雅的辦法實現在同時打開的兩個標簽頁間相互通信?
問題描述
舉了例子:
我同時打開了a和b兩個頁面,我聚焦在a上,并進行一些操作,讓a頁面上的js處理我的操作并將數據發送到旁邊的b頁面。此時b頁面就能在不刷新、不經過服務器的情況下接收到這些數據并作出反饋。類似于在百度音樂pc網頁版聽歌的時候,如果已經打開了百度音樂盒頁面和列表頁,我在列表頁點一首歌曲的“播放”按鈕時,旁邊的音樂盒頁面就可以自動開始播放那首音樂,而不需要打開新頁面。
總覺得用cookie什么的干這事有些雞肋。
問題解答
回答1:這是一道阿里的面試題,方法很多。利用localstorage的storage事件可以通訊;shadredworker也可以解決;還有就是用websocket。
回答2:如果你能控制ab的頁面甚至決定URL: sharedworker / localstorage / sessionstorage 都可以用
回答3:<ul><li><a href='http://www.aoyou183.cn/song-1' target='player'>song-1</a></li><li><a href='http://www.aoyou183.cn/song-2' target='player'>song-2</a></li><li><a href='http://www.aoyou183.cn/song-3' target='player'>song-3</a></li></ul>
屬性target='framename'表示在指定的框架(頁面)中打開鏈接.可以實現:點擊添加商品到購物車時,如果購物車頁面已經打開,則只刷新該頁面,而不是打開新的購物車頁面.點擊播放歌曲時,如果播放器頁面已經打開,則只刷新該頁面,而不是打開新的播放器頁面.
回答4:提示下思路:瀏覽器同時打開兩個同域名的網頁,他們的localStorage是共享的,不僅如此,他們之間的localStorage值改變也是可以監聽的。同域的a和b兩個頁面,a頁面發生localStorage.set(’abc’, 123),b頁面可以通過如下方式監聽變化:
window.addEventListener('storage', function(e){ console.log(’key:’, e.key); // 'abc' console.log(’oldValue:’, e.oldValue); // null console.log(’newValue:’, e.newValue); // 123});
相關文章:
1. mysql - 請問數據庫字段為年月日,傳進的參數為月,怎么查詢那個月所對應的數據2. node.js - win 下 npm install 遇到了如下錯誤 會導致 無法 run dev么?3. javascript - 我的站點貌似被別人克隆了, google 搜索特定文章,除了域名不一樣,其他的都一樣,如何解決?4. 求救一下,用新版的phpstudy,數據庫過段時間會消失是什么情況?5. [python2]local variable referenced before assignment問題6. Python2中code.co_kwonlyargcount的等效寫法7. html - 移動端radio無法選中8. php - 微信開發驗證服務器有效性9. javascript - vue+iview upload傳參失敗 跨域問題后臺已經解決 仍然報403,這是怎么回事啊?10. mysql - 如何在有自增id的情況下,讓其他某些字段能不重復插入
