首頁  >  文章  >  後端開發  >  iframe子、父頁面域內及跨域通訊實例

iframe子、父頁面域內及跨域通訊實例

一个新手
一个新手原創
2017-09-11 09:26:062560瀏覽

iframe子頁面與父頁面的通信早就被研究透徹了,之前一直沒有用到這個內容所以也沒有去研究,今天突然遇到一道題目,所以稍微試了一下,跨域通信使用了來自騰訊團隊給的messenger.js,原始碼也很簡單值的一看,官方給的demo很全面,這裡我只是給了一個簡單的例子。

域內通訊

父頁面

<!DOCTYPE html><html><head><title>iframe子页面与父页面通信(同域)</title><meta charset="utf-8"><script type="text/javascript">
    function sayHello(){
        alert("iframeCommunication1.html");
    }    function say(){
        child1.window.sayHello();
        child1.window.document.getElementById("button_c").value = "the call is complete";
    }</script></head><body><h1>iframe子页面与父页面同域通信</h1>调用子页面child1.html中的sayHello()函数:<input type="button" id="button_p" name="hello" value="call" onclick="say()"><br><br><iframe src="child1.html" id="child1"></iframe></body></html>

子頁面

<!DOCTYPE html><html><head><title>iframe子页面与父页面通信(同域)</title><meta charset="utf-8"><script type="text/javascript">
    function sayHello(){
        alert("child.html");
    }    function say(){
        parent.sayHello();
        parent.window.document.getElementById("button_p").value = "the call is complete";
    }</script></head><body><p>调用父页面iframeCommunication1.html中的sayHello()函数:</p><input type="button" id="button_c" name="hello" value="call" onclick="say()"></body></html>

跨域通訊

對於IE8+及現代瀏覽器,跨域通訊主要使用了html5給出的postMessage API來實現域間通訊。 postMessage的功能是允許程式設計師跨網域在兩個視窗/frames間發送資料資訊。基本上,它就像是跨域的AJAX,但不是瀏覽器跟伺服器之間交互,而是在兩個客戶端之間通訊。
對於舊版瀏覽器,messenger.js使用了navigator物件在父視窗和iframe之間是共享的特性,在navigator物件上註冊訊息回呼函數實作訊息傳遞及共享。
下面給一個很簡單的例子:

父頁

<!DOCTYPE html><html><head><title>iframe子页面与父页面通信(跨域)</title><meta charset="utf-8"><script src="js/messenger.js"></script></head><body><h1>iframe子页面与父页面跨域通信</h1>向子页面child2.html发送信息:<input type="button" id="button_p" value="call" onclick="sendMessage(&#39;child2&#39;)"><br><br>获取信息:<pre id="output">


子頁

<!DOCTYPE html><html><head><title>iframe子页面与父页面通信(跨域)</title><meta charset="utf-8"><script src="js/messenger.js"></script></head><body><h1>child2</h1>向父页面iframeCommunication2.html发送信息:<br><input type="button" id="button_p" value="call" onclick="sendMessage(&#39;parent&#39;)"><br><br>获取信息:<pre id="output">


參考

[1] js之iframe子頁面與父頁通訊
[2] iframe跨網域通訊的通用解決方案-第二彈!(終極解決方案)| Tencent AlloyTeam
[3] Messengerjs專案首頁i

#

以上是iframe子、父頁面域內及跨域通訊實例的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn