ある日、リーダーはメイン ページに 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 など)
1. MySQL 5.7 のアンインストール1.1查看yum是否安裝過mysql CD yum li...
1. ソフトウェアをダウンロードする1. MySQL の公式サイトにアクセスし、Oracle アカウ...
成果を達成する実装コードhtml <div クラス = 'ラッパー'> ...
序文最近、MySQL で RR レベルでデッドロック問題に遭遇しました。興味深いと思ったので、調べて...
目次1. クライアントとサーバー間の通信方法2. クエリキャッシュ3. クエリ最適化処理4. クエリ...
MySQL データベースの実行効率はプログラムの実行速度に大きな影響を与えます。データベースの効率的...
序文部門テーブルなどのデータベース内のツリー構造データの場合、部門のすべての従属部門または部門のすべ...
vue3 が誕生してからかなり時間が経ち、筆者も最近になって vue3 を学び始めました。 vue2...
序文前回の面接では、実行計画について質問されたとき、多くの人がそれが何なのか知りませんでした。実行計...
はじめに: すべてのブラウザには、「ユーザー エージェント スタイル シート」と呼ばれる、すべてのペ...
なぜこのような効果を実現するのでしょうか。実は、この効果もタイトルプロンプトから派生したものですが、...
mysql のインストール情報を表示します。 #ps -ef | grep mysql usr/bi...
前回の記事では、MySQL 5.7.19 無償インストール版 (64 ビット) の設定方法についての...
数秒後に広告が表示されて消えることがよくあります。この機能を実装するには、JQuery フレームワー...
この記事では、9グリッドクリックの色変更効果を実現するためのJavaScriptの具体的なコードを参...