欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

怎么實(shí)現(xiàn)兩個瀏覽器窗口間通信

本篇內(nèi)容主要講解“怎么實(shí)現(xiàn)兩個瀏覽器窗口間通信”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“怎么實(shí)現(xiàn)兩個瀏覽器窗口間通信”吧!

創(chuàng)新互聯(lián)是一家專注于網(wǎng)站建設(shè)、網(wǎng)站設(shè)計與策劃設(shè)計,靈山網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)10年,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:靈山等地區(qū)。靈山做網(wǎng)站價格咨詢:028-86922220

1、localStorage

一個窗口更新localStorage,另一個窗口監(jiān)聽window對象的”storage”事件,來實(shí)現(xiàn)通信。

注:兩個頁面要同源(URL的協(xié)議、域名和端口相同)

// 本窗口的設(shè)值代碼 localStorage.setItem('aaa', (Math.random()*10).toString()) // 其他窗口監(jiān)聽storage事件 window.addEventListener("storage", function (e) {  console.log(e)  console.log(e.newValue) })

2、WebSocket

所有的WebSocket都監(jiān)聽同一個服務(wù)器地址,利用send發(fā)送消息,利用onmessage獲取消息的變化,不僅能窗口,還能跨瀏覽器,兼容性***,只是需要消耗點(diǎn)服務(wù)器資源。

var ws = new WebSocket("ws://localhost:3000/") ws.onopen = function (event) {  // 或者把此方法注冊到其他事件中,即可與其他服務(wù)器通信  ws.send({now : Date.now()}); // 通過服務(wù)器中轉(zhuǎn)消息 }; ws.onmessage = function (event) {  // 消費(fèi)消息  console.log(event.data); }

3、postMessage

借助iframe 或 window.open

回顧一下API

otherWindow.postMessage(message, targetOrigin, [transfer]);

otherWindow:

其他窗口的一個引用,比如iframe的contentWindow屬性、執(zhí)行window.open返回的窗口對象、或者是命名過或數(shù)值索引的window.frames。

message:

將要發(fā)送到其他 window的數(shù)據(jù)。它將會被結(jié)構(gòu)化克隆算法序列化。這意味著你可以不受什么限制的將數(shù)據(jù)對象安全的傳送給目標(biāo)窗口而無需自己序列化。

targetOrigin:

通過窗口的origin屬性來指定哪些窗口能接收到消息事件,其值可以是字符串""(表示***制)或者一個URI。在發(fā)送消息的時候,如果目標(biāo)窗口的協(xié)議、主機(jī)地址或端口這三者的任意一項(xiàng)不匹配targetOrigin提供的值,那么消息就不會被發(fā)送;只有三者完全匹配,消息才會被發(fā)送。這個機(jī)制用來控制消息可以發(fā)送到哪些窗口;例如,當(dāng)用postMessage傳送密碼時,這個參數(shù)就顯得尤為重要,必須保證它的值與這條包含密碼的信息的預(yù)期接受者的origin屬性完全一致,來防止密碼被惡意的第三方截獲。如果你明確的知道消息應(yīng)該發(fā)送到哪個窗口,那么請始終提供一個有確切值的targetOrigin,而不是。不提供確切的目標(biāo)將導(dǎo)致數(shù)據(jù)泄露到任何對數(shù)據(jù)感興趣的惡意站點(diǎn)。

transfer 可選:

是一串和message 同時傳遞的 Transferable 對象. 這些對象的所有權(quán)將被轉(zhuǎn)移給消息的接收方,而發(fā)送一方將不再保有所有權(quán)。

/*  * A窗口的域名是<http://example.com:8080>,以下是A窗口的script標(biāo)簽下的代碼:  */ var popup = window.open(...popup details...); // 如果彈出框沒有被阻止且加載完成 // 這行語句沒有發(fā)送信息出去,即使假設(shè)當(dāng)前頁面沒有改變location(因?yàn)閠argetOrigin設(shè)置不對) popup.postMessage("The user is 'bob' and the password is 'secret'",  "https://secure.example.net"); // 假設(shè)當(dāng)前頁面沒有改變location,這條語句會成功添加message到發(fā)送隊(duì)列中去(targetOrigin設(shè)置對了) popup.postMessage("hello there!", "http://example.org"); function receiveMessage(event) {  // 我們能相信信息的發(fā)送者嗎? (也許這個發(fā)送者和我們最初打開的不是同一個頁面).  if (event.origin !== "http://example.org")  return;  // event.source 是我們通過window.open打開的彈出頁面 popup  // event.data 是 popup發(fā)送給當(dāng)前頁面的消息 "hi there yourself! the secret response is: rheeeeet!" } window.addEventListener("message", receiveMessage, false); /*  * 彈出頁 popup 域名是<http://example.org>,以下是script標(biāo)簽中的代碼:  */ //當(dāng)A頁面postMessage被調(diào)用后,這個function被addEventListenner調(diào)用 function receiveMessage(event) {  // 我們能信任信息來源嗎?  if (event.origin !== "http://example.com:8080")  return;  // event.source 就當(dāng)前彈出頁的來源頁面  // event.data 是 "hello there!"  // 假設(shè)你已經(jīng)驗(yàn)證了所受到信息的origin (任何時候你都應(yīng)該這樣做), 一個很方便的方式就是把enent.source  // 作為回信的對象,并且把event.origin作為targetOrigin  event.source.postMessage("hi there yourself! the secret response " +  "is: rheeeeet!",  event.origin); } window.addEventListener("message", receiveMessage, false);

4、cookie + setInterval【差】

在頁面A設(shè)置一個使用 setInterval 定時器不斷刷新,檢查 Cookies的值是否發(fā)生變化,如果變化就進(jìn)行刷新的操作。

由于 Cookies 是在同域可讀的,所以在頁面 B 審核的時候改變 Cookies 的值,頁面 A 自然是可以拿到的。

這樣做確實(shí)可以實(shí)現(xiàn)想要的功能,但是這樣的方法相當(dāng)浪費(fèi)資源。雖然在這個性能過盛的時代,浪費(fèi)不浪費(fèi)也感覺不出來,但是這種實(shí)現(xiàn)方案,確實(shí)不夠優(yōu)雅。

5、SharedWorker

HTML5 中的 Web Worker 可以分為兩種不同線程類型,一個是專用線程 Dedicated Worker,一個是共享線程 Shared Worker。

  1. Dedicated Worker直接使用new Worker()即可創(chuàng)建,這種webworker是當(dāng)前頁面專有的。。

  2. SharedWorker可以被多個window、標(biāo)簽頁、iframe共同使用,但必須保證這些標(biāo)簽頁都是同源的(相同的協(xié)議,主機(jī)和端口號)

6、直接引用

其實(shí)就是直接獲取對方DOM,適用于兩個頁面在同一域;可以傳遞對象數(shù)據(jù)(對象數(shù)據(jù)使用 instanceof 做類型判斷時有坑);參考 window.open;

例:

// 父頁面獲取子iframe document.getElementById('iframe的id').contentWindow.document // 子iframe獲取父頁面 window.parent.document

7、window.name

瀏覽器窗口有window.name屬性。這個屬性的***特點(diǎn)是,無論是否同源,只要在同一個窗口里,前一個網(wǎng)頁設(shè)置了這個屬性,后一個網(wǎng)頁可以讀取它。

父窗口先打開一個子窗口,載入一個不同源的網(wǎng)頁,該網(wǎng)頁將信息寫入window.name屬性。

window.name = data;

接著,子窗口跳回一個與主窗口同域的網(wǎng)址。

window.location.href = 'http://parent.url.com/xxx.html';

然后,主窗口就可以讀取子窗口的window.name了。

var data = document.getElementById('iframe的id').contentWindow.name;

這種方法的優(yōu)點(diǎn)是,window.name容量很大,可以放置非常長的字符串;缺點(diǎn)是必須監(jiān)聽子窗口window.name屬性的變化,影響網(wǎng)頁性能。

到此,相信大家對“怎么實(shí)現(xiàn)兩個瀏覽器窗口間通信”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

網(wǎng)頁名稱:怎么實(shí)現(xiàn)兩個瀏覽器窗口間通信
本文來源:http://aaarwkj.com/article26/gghhjg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站、做網(wǎng)站品牌網(wǎng)站設(shè)計、用戶體驗(yàn)、小程序開發(fā)、網(wǎng)站策劃

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站
国产精品播放一区二区三区| 一区二区日韩激情在线观看视频| 日韩不卡在线免费播放| 日韩av一区二区久久久| 亚洲精品老司机福利在线| 天堂av一区二区在线播放| 欧美国产激情一区二区| 国产97精品在线播放| 美女高潮呻吟免费观看久久久| 国产精品高清国产三级av| 国产三级国产剧情国产av| 2004年亚洲中文字幕| 自拍国语对白在线视频| 欧美日韩视频一区二区| 精品国产乱码久久蜜桃| 麻豆国产精品原创av男女| 成人av影视中文字幕| 久久成人免费在线电影| 欧美老熟妇子乱视频在线| 国内精品一区二区欧美| 未满十八禁止观看免费| 免费亚洲网站在线观看视频| 成人性生活毛片免费视频| 欧美日韩黄色在线观看| 国产精品一区二区综合亚洲| 国偷蜜桃av一区二区三区| 日韩精品毛片一区到三区| 亚洲五月婷婷久久综合| 欧美一级黄色免费电影| 午夜视频在线观看91| 日韩伦理高清在线观看| 国产精品粗又长一区| 91这里只有精品在线观看| 日韩欧美中文字幕综合网| 日韩久久精品五月综合| 18岁以下禁看视频网站| 传媒精品视频在线观看| 四虎在线观看精品一区| 国产一区二区三区区别| 久久草福利视频在线观看| 成人黄色av网站在线观看|