欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

跨文档发送JSON消息实现图书选择

程序员文章站 2024-01-12 20:06:58
...
一 应用
该实例允许用户打开一个页面来选择图书,当用户选择了合适的图书之后,再把用户选择的图书传回主页面。该应用是用JSON消息发送的。
 
二 代码
1、viewBook.html
<!DOCTYPE html>
<html>
<head>
	<meta name="author" content="Yeeku.H.Lee(CrazyIt.org)" />
	<meta http-equiv="Content-Type" content="text/html; charset=GBK" />
	<title> 选择图书 </title>
	<script type="text/javascript">
		var chooseBook = function()
		{
			// 打开一个新窗口
			var targetWin = window.open('http://localhost/test1/1/target/chooseBook.html'
				,'_blank','width=510,height=300');
			// 等该窗口装载完成时,向该窗口发送消息
			targetWin.onload = function ()
			{ 
				var data = [
					{
						name : '疯狂Java讲义',
						price : 109,
						author : 'yeeku'
					},
					{
						name : '疯狂Android讲义',
						price : 89,
						author : 'yeeku'
					},
					{
						name : '轻量级Java EE企业应用实战',
						price : 99,
						author : 'yeeku'
					}
				];
				// 向http://localhost:8888/target发送消息
				targetWin.postMessage(data
					, "http://localhost/test1/1/target");    //①
			}
		}
	// 通过onmessage监听器监听其他窗口发送回来的消息
	window.onmessage = function(ev) 
	{
		// 忽略来自其他域名的跨文档消息(只接受http://localhost:8888的消息)
		if (ev.origin != "http://localhost") 
		{
			return;
		}
		var show = document.getElementById("result");
		// 显示消息
		show.innerHTML = ("您选择的图书为:<br/>"
			+ "书名:" + ev.data.name + "<br/>"
			+ "价格:" + ev.data.price + "<br/>"
			+ "作者:" + ev.data.author + "<br/>");
	};
	</script>
</head>
<body>
<a href="#" onclick="chooseBook();">选择图书</a>
<div id="result"></div>
</body>
</html>
 
2、chooseBook.html
<!DOCTYPE html>
<html>
<head>
	<meta name="author" content="Yeeku.H.Lee(CrazyIt.org)" />
	<meta http-equiv="Content-Type" content="text/html; charset=GBK" />
	<title> 选择图书 </title>
	<style type="text/css">
		body>table {
			width:480px;
			border-collapse: collapse;
		}
		td,th {
			border: 1px solid black;
		}
	</style>
	<script type="text/javascript">
		var srcWin , srcOrigin;
		var chooseItem = function(td)
		{
			var currentRow = td.parentNode.parentNode;
			srcWin.postMessage(
				{
					name: currentRow.cells[0].innerHTML ,
					author: currentRow.cells[1].innerHTML ,
					price: currentRow.cells[2].innerHTML
				} , srcOrigin);
			window.close();
		};
		window.onmessage = function(ev) 
		{
			
			// 忽略来自其他域名的跨文档消息(只接受http://localhost的消息)
			if (ev.origin != "http://localhost") 
			{
				return;
			}
			srcWin = ev.source;
			srcOrigin = ev.origin;
			// 接收到其他文档发送过来的消息
			var books = ev.data;
			var bookTb = document.getElementById("bookTb");
			for(var i = 0 ; i < books.length ; i++)
			{
				var row = bookTb.insertRow(i);
				row.insertCell(0).innerHTML = books[i].name;
				row.insertCell(1).innerHTML = books[i].price;
				row.insertCell(2).innerHTML = books[i].author;
				row.insertCell(3).innerHTML = "<input name='choose' type='radio'"
					+ " onclick='chooseItem(this);'/>";
			}
		};
	</script>
</head>
<body>
<table>
	<tr>
		<th>图书名</th>
		<th>价格</th>
		<th>作者</th>
		<th>选择</th>
	</tr>
	<tbody id="bookTb"></tbody>
</table>
</body>
</html>
 
三 运行结果

跨文档发送JSON消息实现图书选择