項目中需要用到web一機雙屏,也就是一臺電腦,兩個屏幕,每個屏幕分別展示一部分的內(nèi)容,兩個web標簽頁之間自然少不了實時通信和互動,下面簡單介紹一下,在項目中對該問題的思考和最終解決方案:
成都創(chuàng)新互聯(lián)致力于成都網(wǎng)站制作、網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè),成都網(wǎng)站設(shè)計,集團網(wǎng)站建設(shè)等服務(wù)標準化,推過標準化降低中小企業(yè)的建站的成本,并持續(xù)提升建站的定制化服務(wù)水平進行質(zhì)量交付,讓企業(yè)網(wǎng)站從市場競爭中脫穎而出。 選擇成都創(chuàng)新互聯(lián),就選擇了安全、穩(wěn)定、美觀的網(wǎng)站建設(shè)服務(wù)!1.如果打開的標簽頁是固定的,則可以直接在a標簽加上target="_blank"屬性搞定!例如:打開必應首頁 代碼為: 必應首頁
2.如果頁面地址是動態(tài)變化的,則可以使用js的 window.open(url)方法。
有兩個注意點:
第一個安全性問題:如果父頁面和新打開的頁面詩不同域名的,瀏覽器會禁止新窗口訪問opener中內(nèi)容,但是可以通過window.opener.location=newURl來重寫父頁面的url,即使與父頁面不同域。如果父窗口沒有做防止被iframe嵌入,那么可以使用iframe做一個釣魚頁面,如果不注意url的化,你可能就被釣魚了。
第二個性能問題:chrome每個標簽頁都是一個單獨的進程,然后進程內(nèi)包含很多個線程,但是如果是通過a標簽的target="_blank"或者window.open(url)在新窗口中打開頁面,子窗口會于父窗口共用進程和線程,子窗口如果進行了復雜的運算或者請求,那么父窗口極有可能被卡住。
破解方法:
1.通過在a標簽上添加這個noopener屬性,可以將新打開窗口的opner置為空。
2.window.open并設(shè)置opner為空
1 var newWindow= window.open('xxx');2 newWindow.opener = null;
1.localStorage
通過監(jiān)聽localStorage的數(shù)據(jù)變化實現(xiàn)同一瀏覽器下不同頁面之間的通訊,(跨域不適用,需要結(jié)合postmessage),在雙屏有大量的通訊的時候,建議使用,方便快捷!
推薦lsbridge庫直接進行應用。
2.WebSocket
關(guān)于websocket,不在進行詳細說明,在博文服務(wù)器端推送技術(shù)總結(jié)中,有詳細說明
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。