今回は、クロスドメインおよびクロスウィンドウメッセージングを実装するための postMessage について説明します。クロスドメインおよびクロスウィンドウメッセージングを実装するために postMessage が実装できる 注意事項 について説明します。
Web 開発を行う場合、クライアントとサーバー間の値の転送に加えて、よく遭遇する問題がいくつかあります 1. ページと開いた新しいウィンドウ間のデータ転送 2.ページ間のメッセージ3. ページとネストされた iframe 間のメッセージ4. 上記 3 つの問題のクロスドメイン データ転送postMessage()
これらの問題にはいくつかの解決策がありますが、html5 で導入されたメッセージAPI はこれらの問題をより便利、効果的、安全に解決できます。 postMessage() メソッドを使用すると、さまざまなソースからのスクリプトが制限された方法で非同期通信できるようになり、クロステキスト ファイル、マルチウィンドウ、およびクロスドメイン メッセージングを実現できます。 postMessage(data,origin) メソッドは 2 つのパラメータを受け入れます1.data: 渡されるデータ。ただし、すべてのブラウザでパラメータが使用できるわけではありません。一部のブラウザでは文字列パラメータのみを処理できるため、パラメータを渡すときに JSON.stringify() メソッドを使用してオブジェクト パラメータをシリアル化する必要があります。これにより、IE の以前のバージョンでも同様の効果を得ることができます。
2.origin: ターゲットウィンドウのソースを示す文字列パラメータ、プロトコル + ホスト + ポート番号 [+URL]、URL は無視されるため、記述する必要はありません。このパラメータはセキュリティのためのものです。 postMessage() メソッド メッセージは指定されたウィンドウにのみ渡されます。 もちろん、必要に応じて、パラメータを「*」に設定することもできます。これを任意のウィンドウに渡すことができます。現在のウィンドウを原点とする場合は、「/」に設定します。
http://test.com/index.html<p style="width:200px; float:left; margin-right:200px;border:solid 1px #333;"> <p id="color">Frame Color</p> </p> <p> <iframe id="child" src="http://lsLib.com/lsLib.html"></iframe> </p>
window.onload=function(){ window.frames[0].postMessage('getcolor','http://lslib.com'); }
window.addEventListener('message',function(e){ if(e.source!=window.parent) return; var color=container.style.backgroundColor; window.parent.postMessage(color,'*'); },false);
1.data: 名前が示すように、それはメッセージです
2.source: メッセージを送信するウィンドウオブジェクト
3.origin: メッセージ送信ウィンドウのソース (プロトコル + ホスト + ポート番号)
このようにして、クロスドメイン メッセージを受信でき、メッセージを送り返すこともできます。方法は同様です。簡単なデモ
この例では、右側の iframe の p の色の変化に応じて、左側の p も変化します<!DOCTYPE html> <html> <head> <title>Post Message</title> </head> <body> <p style="width:200px; float:left; margin-right:200px;border:solid 1px #333;"> <p id="color">Frame Color</p> </p> <p> <iframe id="child" src="http://lsLib.com/lsLib.html"></iframe> </p> <script type="text/javascript"> window.onload=function(){ window.frames[0].postMessage('getcolor','http://lslib.com'); } window.addEventListener('message',function(e){ var color=e.data; document.getElementById('color').style.backgroundColor=color; },false); </script> </body> </html> http://test.com/index.html
<!doctype html> <html> <head> <style type="text/css"> html,body{ height:100%; margin:0px; } </style> </head> <body style="height:100%;"> <p id="container" onclick="changeColor();" style="widht:100%; height:100%; background-color:rgb(204, 102, 0);"> click to change color </p> <script type="text/javascript"> var container=document.getElementById('container'); window.addEventListener('message',function(e){ if(e.source!=window.parent) return; var color=container.style.backgroundColor; window.parent.postMessage(color,'*'); },false); function changeColor () { var color=container.style.backgroundColor; if(color=='rgb(204, 102, 0)'){ color='rgb(204, 204, 0)'; }else{ color='rgb(204,102,0)'; } container.style.backgroundColor=color; window.parent.postMessage(color,'*'); } </script> </body> </html> http://lslib.com/lslib.html
window.onload=function(){ window.frames[0].postMessage('getcolor','http://lslib.com'); }
window.addEventListener('message',function(e){ if(e.source!=window.parent) return; var color=container.style.backgroundColor; window.parent.postMessage(color,'*'); },false);
window.addEventListener('message',function(e){ var color=e.data; document.getElementById('color').style.backgroundColor=color; },false);
function changeColor () { var color=container.style.backgroundColor; if(color=='rgb(204, 102, 0)'){ color='rgb(204, 204, 0)'; }else{ color='rgb(204,102,0)'; } container.style.backgroundColor=color; window.parent.postMessage(color,'*'); }
window.addEventListener('message',function(e){ var color=e.data; document.getElementById('color').style.backgroundColor=color; },false);
spring mvc+localResizeIMG は H5 画像圧縮とアップロードを実現します
以上がpostMessage はクロスドメインおよびクロスウィンドウメッセージングを実装します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。