本文介绍如何利用JavaScript的showModalDialog方法打开模态窗口,并通过returnValue属性获取用户输入值。重点解析在IE与Chrome浏览器中window.close()行为的差异,以及通过判断window.opener实现兼容性的具体代码实现。
JS实现跨窗口数据交互:showModalDialog与returnValue用法解析
需求:在一个界面中打开另一个界面,通过JS获取在另一个界面中用户输入的值。示例:Index.html
代码如下:
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=gbk">
<title>主页</title>
<script type="text/javascript">
function EntryPoint() {
var style = 'dialogHeight:600px;dialogWidth:800px;status:no;help:0;scrool:yes';
var a = window.showModalDialog('other.html', '', style);
if (a == undefined) {
a = window.returnValue;
}
// debugger;
if (a != null && a.length > 0) {
document.getElementById("name").value = a[0];
document.getElementById("age").value = a[1];
}
}
</script>
</head>
<body>
<input type="button" value="调用" onclick="EntryPoint()"/><br/>
<input type="text" name="name" id="name" /><br/>
<input type="text" name="age" id="age" />
</body>
</html>
另一个界面:
other.html
代码如下:
<html>
<head>
<title>操作界面</title>
<meta http-equiv="content-type" content="text/html; charset=gbk">
<script type="text/javascript">
function postValue() {
var name = document.getElementById("name").value;
var age = document.getElementById("age").value;
var a = new Array();
a[0] = name;
a[1] = age;
//debugger;
if (window.opener != undefined) {
//for chrome
window.opener.returnValue = a;
}
else {
window.returnValue = a;
}
window.close();
}
</script>
</head>
<body>
<input type="button" value="确定" onclick="postValue();"/><br/>
名字:<input type="text" name="name" id="name" /><br/>
年龄:<input type="text" name="age" id="age" />
</body>
</html>
在该DEMO中遇到一个问题,那就是chrome中window.close()方法不起作用。最后通过,window.opener来解决chrome和IE的冲突。