ある日、リーダーはメイン ページに 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 など)
Gird レイアウトは Flex レイアウトといくつかの類似点があり、どちらもコンテナーの内部項目を...
コードをコピーコードは次のとおりです。 <フレームセット cols="*,1280,...
目次1. インストール環境2. インストール手順ステップ1: インストールパッケージをダウンロードす...
私はコーディングが大好きです。コーディングすると幸せになります!みなさんこんにちは、Counterで...
目次umask umaskの使用法原理1. umask値2. ファイルディレクトリの最大権限3. 従...
偶然、プロジェクト内でVue.$setが無効であることがわかりましたデータ フィルタリングを追加する...
目次序文1. イントラネットDNS AレコードとMXレコードを構成する2. メールサーバの初期化設定...
システム環境はserver2012です1. MySQLの解凍バージョンをダウンロードし、インストール...
viteを使用してvue3プロジェクトを構築するターミナルで次のコマンドを実行すると、Vite を使...
この記事では、参考までに、簡単な計算機機能を実現するためのVueの具体的なコードを紹介します。具体的...
Nginx: PV、UV、独立IPウェブサイトを作成する人なら誰でも、ウェブサイトのPV、UV、その...
HTML の空白ルールHTML では、コンテンツ内の複数のスペースは通常 1 つとみなされ、連続する...
1. this.$router.push() 1. ビュー <テンプレート> <d...
今日は、MySQL IN サブクエリの最適化に関するケーススタディを見ました。最初は少し懐疑的でした...