iframe サブページと親ページ間の通信は以前からよく研究されていたのですが、これまで使ったことがなかったので勉強していませんでしたが、今日突然疑問が湧いたので試してみました。クロスドメイン通信には Tencent チームが使用されました。指定されたメッセンジャー.js のソース コードも非常にシンプルであり、一見の価値があります。ここでは簡単な例を示します。
<!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 の機能は、プログラマがドメインを越えて 2 つのウィンドウ/フレーム間でデータ情報を送信できるようにすることです。基本的にはクロスドメイン AJAX に似ていますが、ブラウザとサーバーの間で対話するのではなく、2 つのクライアント間で通信します。
古いブラウザの場合、messenger.jsは親ウィンドウとiframe間でナビゲータオブジェクトを共有する機能を利用し、ナビゲータオブジェクトにメッセージコールバック関数を登録して情報の転送と共有を実現します。
非常に簡単な例を以下に示します:
<!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('child2')"><br><br>获取信息:<pre id="output">