当前位置: 代码迷 >> Java Web开发 >> 關於Javascipt 统制父子視窗的問題
  详细解决方案

關於Javascipt 统制父子視窗的問題

热度:3731   发布时间:2013-02-25 21:17:07.0
關於Javascipt 控制父子視窗的問題
請問~
在父視窗有一個動態表格如下

 ID OPERATION
 A modifyA
 B modifyB
 C modifyC
 .
 .
 .

modifyA,modifyB, modifyC, ...皆可連到一子視窗來編輯資料

我想要做到如果我案不同的modifyID, 就會產生不同的子視窗(如我按了modifyA, 之後又按了modifyB, 就會各自開一個子視窗)

但是如果我按同一個modifyID, 就會focus到已經有的子視窗(如我按了一次modifyA, 在該子視窗尚未關閉時,又再付視窗又按了一次modifyA, 此時就會focus到之前按modifyA產生出來的子視窗)

又,我每次關掉一個子視窗,父視窗都惠reload一次。

我之前用了

if (!xxx || xxx.closed) {
 xxx=window.open("aa.jsp","xxx")
} else {
 xxx.focus()
}

這樣開了第一個子視窗之後(modifyA),除非關掉,不然無法開另一個(modifyB)

我還試了

var xxx=[]
if (!xxx[id] || xxx[id].closed) {
 xxx[id] = window.open("aa.jsp", id)
} else {
 xxx[id].focus()
}

這樣在每次關掉其中一個子視窗之後,父視窗重新整理之後xxx[]就被清掉了~所以不行
然後有查到可以用cookie的方式存放, 但xxx[]裡面的每一個都是一個object, cookie似乎只能存string, 所以不知道怎麼用,
又我父視窗類似的鍵結太多了 (如modifyID, viewID, historyID...), cookie也不知道要怎麼存放

請問有更好的方式嗎?或是我之前的方式要怎麼改才能合用,還是cookie其實是可以用的...

請各位大大幫忙~謝謝


------解决方案--------------------------------------------------------
你好。。。我刚刚写了个简单的例子,不知道对你会不会有帮助。。。我把代码贴出来吧:


三个html页面:

父窗口:parent
代码如下:
<html>
<title>父窗口</title>
<head>
<script>
var xxx = [];
var reloadSuccess = false;
function f_open(id){
if (!xxx[id] || xxx[id].closed) {
xxx[id] = window.open(id + "");
} else {
xxx[id].focus()
}
}

function f_onload(){
reloadSuccess = true;
alert(123);
}
</script>
</head>
<body onload="f_onload();">
<input value="a" type="button" onclick="f_open('a');">
<input value="b" type="button" onclick="f_open('b');">
</body>
</html>

子窗口a:a
代码如下:
<html>
<title>a</title>
<head>
<script>
var isClose = true;
window.onbeforeunload = function(){
window.opener.reloadSuccess = false;
var cpxxx = window.opener.xxx;
window.opener.location.reload();
while(isClose){
if(window.opener.reloadSuccess){
isClose = false;
}
}
window.opener.xxx = cpxxx;
window.opener.xxx['a'] = false;
}
</script>
</head>
<body>
THIS IS A.
</body>
</html>

子窗口b:b
代码如下:
<html>
<title>b</title>
<head>
<script>
var isClose = true;
window.onbeforeunload = function(){
window.opener.reloadSuccess = false;
var cpxxx = window.opener.xxx;
window.opener.location.reload();
while(isClose){
if(window.opener.reloadSuccess){
isClose = false;
}
}
window.opener.xxx = cpxxx;
window.opener.xxx['b'] = false;
}
</script>
</head>
<body>
THIS IS B.
</body>
</html>


你在本地建三个文件,把代码贴上去试一试吧,希望能够帮助你。。。