ある日、リーダーはメイン ページに iframe を埋め込み、親ページと子ページ間で双方向にメッセージを送信するという要件を提案しました。そこで私は解決策を提案しました: postMessage 知識理論の準備: postMessage メソッドを使用すると、異なるソースからのスクリプトが制限された方法で非同期に通信できるようになり、クロステキスト ドキュメント、マルチウィンドウ、およびクロスドメイン メッセージ配信を実現できます。 文法: otherWindow.postMessage(メッセージ、targetOrigin、[転送]);
postMessage メソッドが呼び出されると、すべてのページ スクリプトが実行された後、MessageEvent メッセージがターゲット ウィンドウに送信されます。MessageEvent メッセージには、注意する必要がある 4 つのプロパティがあります。
操作手順は以下のとおりです。 1. 2ページを用意する
メイン.html <!DOCTYPE html> <html> <ヘッド> <メタ文字セット="utf-8"> <title>iframe+postMessage クロスドメイン通信メインページ</title> </head> <本文> <h1>メインページ</h1> <iframe id="child" src="http://b.com/iframepage.html"></iframe> <div> <h2>メインページのメッセージ受信エリア</h2> <span id="メッセージ"></span> </div> </本文> </html> iframeページ.html <!DOCTYPE html> <html> <ヘッド> <メタ文字セット="utf-8"> <title>iframe+postMessage クロスドメイン通信サブページ</title> </head> <本文> <h2>サブページ</h2> <div> <h3>メッセージエリアを受信</h3> <span id="メッセージ"></span> </div> </本文> </html> 2. 親が子供にメッセージを送る メイン.html <スクリプト> window.onload = 関数(){ document.getElementById('child') .contentWindow.postMessage("メインページメッセージ", 「http://b.com/iframepage.html」) } </スクリプト> 知らせ: メッセージはページが読み込まれた後に送信する必要があります。そうでない場合、iframe が読み込まれていないためエラーが報告されます。
サブページがメッセージを受信: iframeページ.html <スクリプト> window.addEventListener('メッセージ',function(イベント){ console.log(イベント); document.getElementById('message').innerHTML = "受信" + event.origin + "メッセージ: " + event.data; }、 間違い); </スクリプト> この時点で、ページが iframe のサブページに印刷されていることがわかります。
コンソールに MessageEvent オブジェクトが出力されます。 3. 子どもが親にメッセージを送る 子ページはメッセージを受信後、親ページに返信します。 iframeページ.html <スクリプト> window.addEventListener('メッセージ',function(イベント){ console.log(イベント); document.getElementById('message').innerHTML = "受信" + event.origin + "メッセージ: " + event.data; top.postMessage("サブページメッセージを受信しました", 'http://a.com/main.html') }、 間違い); </スクリプト> 親ページはメッセージを受信し、次のように表示します。 window.addEventListener('メッセージ', 関数(イベント){ document.getElementById('message').innerHTML = "受信" + event.origin + "メッセージ: " + event.data; }、 間違い); 4. 完全なコード メイン.html <!DOCTYPE html> <html> <ヘッド> <メタ文字セット="utf-8"> <title>iframe+postMessage クロスドメイン通信メインページ</title> </head> <本文> <h1>メインページ</h1> <iframe id="child" src="http://b.com/iframepage.html"></iframe> <div> <h2>メインページのメッセージ受信エリア</h2> <span id="メッセージ"></span> </div> </本文> <スクリプト> window.onload = 関数(){ document.getElementById('child') .contentWindow.postMessage("メインページメッセージ", 「http://b.com/iframepage.html」) } window.addEventListener('メッセージ', 関数(イベント){ document.getElementById('message').innerHTML = "受信" + event.origin + "メッセージ: " + event.data; }、 間違い); </スクリプト> </html> iframeページ.html <!DOCTYPE html> <html> <ヘッド> <メタ文字セット="utf-8"> <title>iframe+postMessage クロスドメイン通信サブページ</title> </head> <本文> <h2>サブページ</h2> <div> <h3>メッセージエリアを受信</h3> <span id="メッセージ"></span> </div> </本文> <スクリプト> window.addEventListener('メッセージ',function(イベント){ if(window.parent !== event.source){return} console.log(イベント); document.getElementById('message').innerHTML = "受信" + event.origin + "メッセージ: " + event.data; top.postMessage("サブページメッセージを受信しました", 'http://a.com/main.html') }、 間違い); </スクリプト> </html> html親子ページiframe双方向メッセージングの実装例に関するこの記事はこれで終わりです。より関連性の高いhtml親子ページiframe双方向メッセージングコンテンツについては、123WORDPRESS.COMの以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも123WORDPRESS.COMをよろしくお願いいたします。 |
<<: Web ページでの Unicode 文字の使用の概要 (&#、\u など)
JavaScriptコントロールを使用したくない場合は、次の方法を試してください。 Safariブラ...
この記事では、例を使用して、MySQL の結合クエリ、結合クエリ、サブクエリの原理と使用方法を説明し...
ポーテナーの紹介Portainer は、ステータス表示パネル、アプリケーション テンプレートの迅速な...
需要背景ビジネス テーブル tb_image のデータの一部は次のとおりです。id は一意ですが、i...
複雑なテーブル構造では、一部のセルが水平方向に複数のセルにまたがるため、行間属性 ROWSPAN を...
目次ログインビジネスプロセスログイン機能の実装要約するまず、エフェクトの実装プロセスを見てみましょう...
目次メイントピック1. UbuntuにDockerをインストールする2. DockerにROS2-F...
この記事では、一般的な MySQL ストレージ エンジンの機能と使用方法を例を使って説明します。ご参...
仮想マシンを使用する人は通常、操作と使用を容易にするために仮想マシン用の共有ディレクトリを設定します...
1. KVM仮想マシンの移行方法と注意すべき点KVM 仮想マシンを移行する方法は 2 つあります。...
参考までにWeChatアプレットで書かれた簡単な計算機です。具体的な内容は次のとおりです。 jisa...
まず、github から nacos の圧縮パッケージをダウンロードします: https://git...
ネイティブJSによって開始されたネットワークリクエストは、クエリ文字列の形でサーバーに送信されるため...
目次1. 糖衣構文とは何ですか? 2. VUE の構文糖とは何ですか? 1. 最も一般的な構文シュガ...
序文ご存知のとおり、HTML5 はインターネット コミュニティ全体に標準を提供する組織である Wor...