摘要:說明方法可以安全地實(shí)現(xiàn)對(duì)象之間的跨域通信。接收窗口隨后可根據(jù)需要自行處理此事件。傳遞給的參數(shù)通過事件對(duì)象暴露給接收窗口。發(fā)送端程序發(fā)送消息的基本語(yǔ)法就是接收消息的窗口的引用。接收程序度空間從接收消息從收到消息演示地址跨域消息傳遞
說明
window.postMessage()方法可以安全地實(shí)現(xiàn)Window對(duì)象之間的跨域通信。例如,在一個(gè)頁(yè)面和它生成的彈出窗口之間,或者是頁(yè)面和嵌入其中的iframe之間。
通常情況下,不同頁(yè)面上的腳本允許彼此訪問,當(dāng)且僅當(dāng)它們?cè)醋缘捻?yè)面共享相同的協(xié)議,端口號(hào)和主機(jī)(也稱為“同源策略”)。window.postMessage()提供了一個(gè)受控的機(jī)制來安全地規(guī)避這個(gè)限制(如果使用得當(dāng)?shù)脑挘?/p>
一般來說,一個(gè)窗口可以獲得對(duì)另一個(gè)窗口的引用(例如,通過targetWindow=window.opener),然后使用targetWindow.postMessage()在其上派發(fā)MessageEvent。接收窗口隨后可根據(jù)需要自行處理此事件。傳遞給window.postMessage()的參數(shù)通過事件對(duì)象暴露給接收窗口。
發(fā)送端 postMessage程序var receiver = document.getElementById("receiver").contentWindow; var btn = document.getElementById("send"); btn.addEventListener("click", function (e) { e.preventDefault(); var val = document.getElementById("text").value; receiver.postMessage("Hello "+val+"!", "http://res.42du.cn"); });發(fā)送消息的基本語(yǔ)法:
targetWindow.postMessage(message, targetOrigin, [transfer]);targetWindow
targetWindow就是接收消息的窗口的引用。 獲得該引用的方法包括:
Window.open
Window.opener
HTMLIFrameElement.contentWindow
Window.parent
Window.frames +索引值
messagemessage就是要發(fā)送到目標(biāo)窗口的消息。 數(shù)據(jù)使用結(jié)構(gòu)化克隆算法進(jìn)行序列化。 這意味著我們可以將各種各樣的數(shù)據(jù)對(duì)象安全地傳遞到目標(biāo)窗口,而無需自己對(duì)其進(jìn)行序列化。
targetOrigintargetOrigin就是指定目標(biāo)窗口的來源,必須與消息發(fā)送目標(biāo)相一致,可以是字符串“”或URI。 表示任何目標(biāo)窗口都可接收,為安全起見,請(qǐng)一定要明確提定接收方的URI。
transfertransfer是可選參數(shù)
接收端目標(biāo)窗口通過執(zhí)行下面的JavaScript來偵聽發(fā)送過來的消息:
window.addEventListener("message", receiveMessage, false); function receiveMessage(event){ if (event.origin !== "http://www.42du.cn") return; }
event對(duì)象有三個(gè)屬性,分別是origin,data和source。event.data表示接收到的消息;event.origin表示postMessage的發(fā)送來源,包括協(xié)議,域名和端口;event.source表示發(fā)送消息的窗口對(duì)象的引用; 我們可以用這個(gè)引用來建立兩個(gè)不同來源的窗口之間的雙向通信。
完整程序 發(fā)送程序接收程序42度空間-window.postMessage()跨域消息傳遞
演示地址42度空間-從www.42du.cn接收消息 Hello World!
[跨域消息傳遞](http://www.42du.cn/paper/11)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/93273.html
摘要:開發(fā)者需要在中設(shè)置屬性為跨域是的簡(jiǎn)稱這是一種利用瀏覽器漏洞解決跨域的辦法腳本元素可以不受瀏覽器同源策略的限制。 什么是瀏覽器同源策略? 同源是指,域名,協(xié)議,端口號(hào)均相同,如圖: showImg(https://segmentfault.com/img/bV9rAO?w=1088&h=394); 注意:localhost和127.0.0.1雖然都指向本機(jī),但也是跨域. 瀏覽器同源策略(...
摘要:經(jīng)歷了幾場(chǎng)筆試面試,屢次被問到關(guān)于如何實(shí)現(xiàn)跨域。轉(zhuǎn)自個(gè)人博客關(guān)于跨域什么是跨域一般來說,如果你在開發(fā)中需要進(jìn)行跨域操作從一個(gè)非同源網(wǎng)站發(fā)送請(qǐng)求獲取數(shù)據(jù),一般而言,你在瀏覽器控制臺(tái)看到的結(jié)果為同源策略說到跨域就不得不提同源策略。 前言 轉(zhuǎn)眼就是秋招季啦。經(jīng)歷了幾場(chǎng)筆試面試,屢次被問到關(guān)于如何實(shí)現(xiàn)跨域。老實(shí)說,之前都是紙上談兵,也沒有項(xiàng)目需要跨域,甚至覺得這個(gè)東西沒什么意義。直到今天項(xiàng)目中...
摘要:由此可以看出,同源策略確實(shí)是必不可少的,那么它會(huì)帶來哪些限制呢和無法讀取。由于瀏覽器的同源策略,在網(wǎng)頁(yè)端出現(xiàn)了這個(gè)跨域的問題,然而我們發(fā)現(xiàn),所有的屬性并沒有受到相關(guān)的限制,比如等。 本文按照政治問答題必備套路分為以下3個(gè)部分: 為什么要跨域? 跨域是什么? 如何實(shí)現(xiàn)跨域? Section1、為什么要跨域? 自古以來(1995年起),為了用戶的信息安全,瀏覽器就引入了同源策略。那么同...
摘要:書接上文瀏覽器之引擎本章主要講解瀏覽器安全機(jī)制的網(wǎng)頁(yè)的安全和瀏覽器的安全。總結(jié)瀏覽器的安全機(jī)制包括網(wǎng)頁(yè)安全模型和沙箱模型其中網(wǎng)頁(yè)安全模型就是利用了同源策略,讓不同域中的網(wǎng)頁(yè)不能相互訪問,當(dāng)然有好幾種瀏覽器跨域的方法可以其相互訪問。 showImg(https://segmentfault.com/img/remote/1460000016375575); 前言 此文章是我最近在看的【W(wǎng)...
閱讀 767·2023-04-25 15:13
閱讀 1388·2021-11-22 12:03
閱讀 816·2021-11-19 09:40
閱讀 1898·2021-11-17 09:38
閱讀 1702·2021-11-08 13:18
閱讀 649·2021-09-02 15:15
閱讀 1760·2019-08-30 15:54
閱讀 2623·2019-08-30 11:12