在b\s系统中,用户经常需要打开子窗口选中某些项目,并将这些项目插入到父窗口的下拉选框中。本来以为在IE中实现这样子窗口操作父窗口的功能十分简单,但是按常规的做法却是行不通的。在google上搜索了一阵也没有好的解决方案。最后看到国外的一个网页上有以下内容:
最后得到了启发,从而实现了这个功能,下面所有可能用到的实现方法的代码。但是在这些代码中有些方法是不可行的。最后有一个表格说明了哪些方法不可行,理由是什么?
HTMLPage.htm
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>1st</title>
<script language="javascript">...
function AddOpt(text,val)
...{
var slct = document.getElementById("Select1");
var op = new Option(text,val);
slct.add(op);
}
</script>
</head>
<body>
<form id="form1" name="form1">
<select id="Select1" multiple="multiple">
<option selected="selected" value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
</select>
<br />
<input id="showModalDialogWithoutArg" type="button" value="showModalDialogWithoutArg" onclick="window.showModalDialog('HTMLPage2.htm');"/>
<br />
<input id="showModalDialogWithArg" type="button" value="showModalDialogWithArg" onclick="window.showModalDialog('HTMLPage2.htm', window);"/>
<br />
<input id="showModelessDialogWithoutArg" type="button" value="showModelessDialogWithoutArg" onclick="window.showModelessDialog('HTMLPage2.htm');"/>
<br />
<input id="showModelessDialogWithArg" type="button" value="showModalDialogWithArg" onclick="window.showModelessDialog('HTMLPage2.htm', window);"/>
<br />
<input id="open" type="button" value="open" onclick="window.open('HTMLPage2.htm');"/>
</form>
</body>
</html>
HTMLPage2.htm
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>2nd</title>
<script language="javascript">...
function InsertToParent()
...{
var slct = window.parent.document.getElementById("Select1");
doc = slct.ownerDocument;
var opt = doc.createElement('OPTION');
opt.value = "2nd 窗口";
opt.text = "2nd 窗口";
slct.options.add(opt);
}
function InsertToOpener()
...{
var slct = window.opener.document.getElementById("Select1");
doc = slct.ownerDocument;
var opt = doc.createElement('OPTION');
opt.value = "2nd 窗口";
opt.text = "2nd 窗口";
slct.options.add(opt);
}
function InsertToTop()
...{
var slct = window.top.document.getElementById("Select1");
doc = slct.ownerDocument;
var opt = doc.createElement('OPTION');
opt.value = "2nd 窗口";
opt.text = "2nd 窗口";
slct.options.add(opt);
}
function InsertByParentFun()
...{
var wnd = window.parent;
wnd.AddOpt("2nd 窗口","2nd 窗口");
}
function InsertByOpenerFun()
...{
var wnd = window.opener;
wnd.AddOpt("2nd 窗口","2nd 窗口");
}
function InsertByTopFun()
...{
var wnd = window.top;
wnd.AddOpt("2nd 窗口","2nd 窗口");
}
function InsertByArgFun()
...{
var wnd = window.dialogArguments;
wnd.AddOpt("2nd 窗口","2nd 窗口");
}
function InsertWithArg()
...{
var wnd = window.dialogArguments;
var doc = wnd.document;
var slct = doc.getElementById("Select1");
doc = slct.ownerDocument;
var opt = doc.createElement('OPTION');
opt.value = "2nd 窗口";
opt.text = "2nd 窗口";
slct.options.add(opt);
}
</script>
</head>
<body>
<input id="InsertToParent" type="button" value="InsertToParent" onclick="InsertToParent()" />
<br />
<input id="InsertToOpener" type="button" value="InsertToOpener" onclick="InsertToOpener()" />
<br />
<input id="InsertToTop" type="button" value="InsertToTop" onclick="InsertToTop()" />
<br />
<input id="InsertByParentFun" type="button" value="InsertByParentFun" onclick="InsertByParentFun()" />
<br />
<input id="InsertByOpenerFun" type="button" value="InsertByOpenerFun" onclick="InsertByOpenerFun()" />
<br />
<input id="InsertByTopFun" type="button" value="InsertByTopFun" onclick="InsertByTopFun()" />
<br />
<input id="InsertByArgFun" type="button" value="InsertByArgFun" onclick="InsertByArgFun()" />
<br />
<input id="InsertWithArg" type="button" value="InsertWithArg" onclick="InsertWithArg()" />
</body>
</html>
方法表格
showModalDialogWithoutArg | InsertToParent | 不能实现 | 子窗口parent属性为子窗口自身 |
InsertToOpener | 不能实现 | 子窗口opener属性为空 |
InsertToTop | 不能实现 | 子窗口top属性为子窗口自身 |
InsertByParentFun | 不能实现 | 子窗口parent属性为子窗口自身 |
InsertByOpenerFun | 不能实现 | 子窗口opener属性为空 |
InsertByTopFun | 不能实现 | 子窗口top属性为子窗口自身 |
InsertByArgFun | 不能实现 | 没有传送参数给子窗口 |
InsertWithArg | 不能实现 | 没有传送参数给子窗口 |
showModalDialogWithArg | InsertToParent | 不能实现 | 子窗口parent属性为子窗口自身 |
InsertToOpener | 不能实现 | 子窗口opener属性为空 |
InsertToTop | 不能实现 | 子窗口top属性为子窗口自身 |
InsertByParentFun | 不能实现 | 子窗口parent属性为子窗口自身 |
InsertByOpenerFun | 不能实现 | 子窗口opener属性为空 |
InsertByTopFun | 不能实现 | 子窗口top属性为子窗口自身 |
InsertByArgFun | 可以实现 | |
InsertWithArg | 可以实现 | |
showModelessDialogWithoutArg | InsertToParent | 不能实现 | 子窗口parent属性为子窗口自身 |
InsertToOpener | 不能实现 | 子窗口opener属性为空 |
InsertToTop | 不能实现 | 子窗口top属性为子窗口自身 |
InsertByParentFun | 不能实现 | 子窗口parent属性为子窗口自身 |
InsertByOpenerFun | 不能实现 | 子窗口opener属性为空 |
InsertByTopFun | 不能实现 | 子窗口top属性为子窗口自身 |
InsertByArgFun | 不能实现 | 没有传送参数给子窗口 |
InsertWithArg | 不能实现 | 没有传送参数给子窗口 |
showModelessDialogWithArg | InsertToParent | 不能实现 | 子窗口parent属性为子窗口自身 |
InsertToOpener | 不能实现 | 子窗口opener属性为空 |
InsertToTop | 不能实现 | 子窗口top属性为子窗口自身 |
InsertByParentFun | 不能实现 | 子窗口parent属性为子窗口自身 |
InsertByOpenerFun | 不能实现 | 子窗口opener属性为空 |
InsertByTopFun | 不能实现 | 子窗口top属性为子窗口自身 |
InsertByArgFun | 可以实现 | |
InsertWithArg | 可以实现 | |
open | InsertToParent | 不能实现 | 子窗口parent属性为子窗口自身 |
InsertToOpener | 可以实现 | |
InsertToTop | 不能实现 | 子窗口top属性为子窗口自身 |
InsertByParentFun | 不能实现 | 子窗口parent属性为子窗口自身 |
InsertByOpenerFun | 可以实现 | |
InsertByTopFun | 不能实现 | 子窗口top属性为子窗口自身 |
InsertByArgFun | 不能实现 | open方法不能在窗口间传递参数 |
InsertWithArg | 不能实现 | open方法不能在窗口间传递参数 |
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1089313
posted on 2006-09-07 12:39
SIMONE 阅读(614)
评论(0) 编辑 收藏