91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用iframe和postMessage怎么實現頁面跨域通信

發布時間:2021-04-06 17:02:54 來源:億速云 閱讀:298 作者:Leah 欄目:web開發

這篇文章將為大家詳細講解有關使用iframe和postMessage怎么實現頁面跨域通信,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

通常情況下,對于兩個不同頁面的腳本,只有當執行它們的頁面位于具有相同的協議(通常為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的攻擊

關于使用iframe和postMessage怎么實現頁面跨域通信就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

裕民县| 布拖县| 金坛市| 镇宁| 施秉县| 防城港市| 来凤县| 中阳县| 千阳县| 遂平县| 襄垣县| 德江县| 虎林市| 鹤峰县| 仪陇县| 桑日县| 舒兰市| 无棣县| 康马县| 湘西| 河曲县| 五原县| 北安市| 乐平市| 镇康县| 长治县| 福海县| 皮山县| 普安县| 亚东县| 烟台市| 陵川县| 泾源县| 专栏| 东源县| 凤阳县| 阿拉善盟| 东乡| 安陆市| 贡山| 南澳县|