ドキュメント間メッセージ転送

3656 ワード

HTML 5は、Webドキュメント間で相互に情報を受信し送信する機能を提供する.この機能を使用すると、Webページが存在するウィンドウオブジェクトのインスタンスを取得するだけでなく、同源(ドメイン+ポート番号)のWebページ間で相互に通信するだけでなく、ドメイン間通信を実現することもできます.まず,他のウィンドウからのメッセージを受信するには,ウィンドウオブジェクトのメッセージイベントを監視する必要がある.WindowsオブジェクトのpostMessageメソッドを使用して他のウィンドウにメッセージを送信します.具体的なケースのホームページには、iframeが含まれています.iframeのsrcは、ホームページの下にないページを指します.この2つのページの間でメッセージが送信されます.
ホームページ:
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>         </title>
	</head>
	<body>
		<iframe src="http://193.168.19.168/ztree/demo/cn/msg.html" width="400" height="400" onload="sendMsg();"></iframe>
		<div id="div1">
			
		</div>
		<script type="text/javascript" charset="utf-8">
			//  onmessage  ,    !
			addEventListener('message',function(e){
				e=e||event;
				
				//e.origin:  +  +  (80     )
				//e.data:    
				
				var obj=JSON.parse(e.data);
				
				if(!obj.error){
					alert('    !');
					document.getElementById('div1').innerHTML=' e.origin='+e.origin+',      e.data='+e.data;
				}
			},false);
			
			
			function sendMsg(){
				//      iframe   window  
				//    document.getElementByTagName('iframe')[0]
				var winIframe=window.frames[0];

				setTimeout(function(){
					//iframe      ,  postMessage iframe     
					//      :    
					//      :         url,   iframe src   url     http://193.168.19.168/
					winIframe.postMessage('{"  ":10,"  ":20,"  ":30,"  ":40,"  ":50,"  ":60,"  ":67}',"http://193.168.19.168/ztree/demo/cn/msg.html");
				},2000);
			}
		</script>
	</body>
</html>

iframeが指すページ:
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>iframe  </title>
		<script type="text/javascript" charset="utf-8">
			//  onmessage  ,    
			addEventListener('message', function(e) {
				e = e || event;

				//     
				if (e.origin == 'http://127.0.0.1:8020') {
					alert('       ');

					//   e.origin     e.data
					var obj = JSON.parse(e.data), aHtml = [];

					for (var key in obj) {
						var age = obj[key], str = '';

						switch(true) {
							case age<=10:
								str = key + '     ' + age + ' 。';
								break;
							case age<=20:
								str = key + '     ' + age + ' 。';
								break;
							case age<=30:
								str = key + '     ' + age + ' 。';
								break;
							case age<=40:
								str = key + '    ' + age + ' 。';
								break;
							case age<=50:
								str = key + '    ' + age + ' 。';
								break;
							case age<=60:
								str = key + '    ,  ' + age + ' 。';
								break;
							default:
								str = key + '     ' + age + ' 。';
								break;
						}
						
						aHtml.push(str);
					}

					document.body.innerHTML = ' e.origin=' + e.origin + ',     e.data=<br />' + aHtml.join('<br />');
				} else {
					alert('        ');
				}

				setTimeout(function() {

					//e.source     window  ,           
					e.source.postMessage('{"error":false,"msg":""}', e.origin);
				}, 2000);
			}, false);

		</script>
	</head>
	<body>
		<div id="div1">

		</div>
	</body>
</html>