ある日、リーダーはメイン ページに 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 など)
teeコマンドは主にstandout(標準出力ストリーム、通常はコマンド実行ウィンドウ)に出力し、同...
ゴミ箱は Linux ユーザー、Windows ユーザー、Mac ユーザーにとって非常に一般的なので...
序文ゲートウェイプロジェクトを開発する場合、署名 sign_key 情報はリクエスト時にリクエスト ...
この記事ではvueを使用し、マウスクリックイベントといくつかの小さなページの最適化を追加します。 基...
このコレクションには、あなたのデザインアイデアにインスピレーションを与える、輝いて光沢のある、優れた...
前回の記事では、Docker を使用して Laravel アプリケーションをデプロイする方法について...
1. maxPostSize を設定する理由は何ですか? tomcat コンテナには送信データのサイ...
目次1. ルートの遅延読み込みとは何ですか? 2. ルートの遅延読み込みの使用1. ルートの遅延読み...
目次1. ソフトウェアとシステムイメージ2. 仮想マシンを作成する3. CentOS8をインストール...
具体的なコードは次のとおりです。 <div id="ボックス"> &...
ミックスインメソッド: ブラウザはコンパイルできません: 以前のバージョンのsassでは上記の記述方...
背景: SAP ECC サーバーをインストールし、XP をプレインストールしたいと考えています。XP...
広告を閉じるまでのカウントダウンを実装するために JavaScript を使用するまだフロントエンド...
WeChatアプレットフォームの検証、参考までに具体的な内容は次のとおりです。プラグインWxVali...
これは主に、場所パラメータのif判断の設定ジャンプです。迂回により、サーバーの負荷と圧力を軽減できま...