?? 在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 閱讀(617)
評論(0) 編輯 收藏