麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發 > HTML5 > 正文

使用iframe+postMessage實現頁面跨域通信的示例代碼

2024-09-05 07:23:14
字體:
來源:轉載
供稿:網友

通常情況下,對于兩個不同頁面的腳本,只有當執行它們的頁面位于具有相同的協議(通常為https),端口號(443為https的默認值),以及主機時,這兩個腳本才能相互通信。而在實際項目開發過程中,經常會利用iframe在一個父頁面中嵌入另外一個子頁面,或者在一個父頁面中彈出另一個頁面,由于同源策略的限制,父子頁面之間的腳本無法實現通信,而使用postMessage方法就實現了父子頁面之間的跨域信息傳遞。

語法:

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

otherWindow:其他頁面的引用,例如,iframe的contentWindow屬性,或者執行window.open返回的窗口對象。

message:將要傳遞到另一個頁面的數據(可以不受限制的將數據對象安全的傳送給目標窗口而無需自己序列化,原因是因為采用了結構化克隆算法)。

targetOrigin:通過窗口的origin屬性來指定哪些窗口能接收到消息事件,其值可以是一個字符串"*"(表示無限制)或者一個Url。只有當目標窗口的協議、主機地址、端口號和targetOrigin完全匹配時,目標窗口才會收到message信息。為了防止信息泄露,通常情況下都會指定特定的url。

transfer:可選參數。

使用方法:

1.父頁面:(url為http://www.b.com/main.html):

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>父頁面</title></head><body>    <iframe id="child" src="http://www.a.com/iframepage.html"></iframe>    <script>        window.onload = function(){            document.getElementById("child").contentWindow.postMessage("主頁面傳遞的消息","http://www.a.com/iframepage.html")        }        window.addEventListener('message', function(event){  //父獲取子傳遞的消息            if(event.origin == "http://www.a.com"){                //可以在這里做一些邏輯操作            }        }, false)    </script></body></html>

2.子頁面(url為http://www.a.com/iframepage.html)

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>子頁面</title></head><body>    <div>這里是子頁面</div>    <script>        window.addEventListener('message', function(event){           if(event.origin == "http://www.b.com"){                //可以在這里做一些操作                top.postMessage("子頁面收到父頁面傳遞來的消息", 'http://www.b.com/main.html')//子頁面向父頁面傳遞消息           }        }, false);    </script></body></html>

postMessage方法被調用時,會在所有頁面腳本執行完畢之后像目標窗口派發一個 MessageEvent 消息,該MessageEvent消息有四個屬性需要注意:

type:表示該message的類型

data:為postMessage的第一個參數

origin:表示調用postMessage方法窗口的源

source:記錄調用postMessage方法的窗口對象

特別注意:
1.一定要等A頁面嵌入的B頁面加載完成之后,再進行postMessage跨域通信
2.一定要對origin做判斷,去掉不是來自我們目標窗口的origin,防止來自其他origin的攻擊

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 国产精品亚洲激情 | 欧美高清第一页 | 国产成人自拍av | 久久免费精品 | 涩涩伊人| 日韩精品羞羞答答 | 黄色网址免费在线播放 | 亚洲一区二区在线免费 | 国产精品成人久久久久a级 av电影在线免费 | 日韩黄在线观看 | av电影免费看 | 免费国产成人高清在线看软件 | 日韩视频www| 涩涩伊人 | 免费观看一级黄色片 | 午夜视频你懂的 | 黄色成年在线观看 | 9797色| 午夜噜噜噜 | 久久伊人国产精品 | 老司机一级毛片 | 羞羞的视频 | 中文字幕在线观看视频一区 | 看免费的毛片 | 色婷婷一区二区三区 | 天天干干 | avlululu| 成人做爰s片免费看网站 | 精品国产一区二 | vidz 98hd| 日韩av片在线播放 | 午夜精品一区二区三区免费 | www日韩在线观看 | 草妞视频| 一级黄色毛片a | 免费99热在线观看 | 欧美一级黄色网 | 狠狠久久伊人中文字幕 | 337p日本欧洲亚洲大胆精蜜臀 | 久久久三级免费电影 | 久久一区三区 |