这让我发疯了!
情景:
主页面打开一个弹出窗口,稍后调用其中的一个函数:
newWin = window.open(someurl,'newWin',options);
......以后有些代码......
newWin.remoteFunction(options);
没关系。
现在,弹出窗口仍然打开,主页面更改为第2页。 newWin 不再存在,我需要重新创建弹出窗口对象引用,以便再次调用远程function(newWin.remoteFunction)
我尝试过类似的事情:
newWin = open('','newWin', options);
if (!newWin || newWin.closed || !newWin.remoteFunction) {
newWin = window.open(someurl,'newWin',options);
}
它可以工作,我可以再次调用newWin.remoteFunction但由于某种原因,Safari会在每次调用open()方法时将Focus()赋予弹出窗口,从而打破导航(我绝对需要弹出窗口在后台工作)。
我只能解决此问题的解决方法是在弹出窗口中创建一个间隔:
if(window.opener && !window.opener.newWin) window.opener.newWin = self;
然后在开启者页面中设置另一个带有一些try / catch的间隔,但它不够优雅且非常低效。
所以,我想知道,在开启窗口中获取不同页面之间的弹出对象引用真的很难吗?
答案 0 :(得分:0)
尚未测试,只是为了这个想法:
主窗口中的:
window.onbeforeunload = newWin.sendYourself();
在PopUp窗口中:
function sendYourself() {
sendingMyself= setInterval('sendMyself',50);
}
function sendMyself() {
if(window.opener && !window.opener.newWin) window.opener.newWin = self;
}
function okGotIt() {
clearInterval(sendingMyself);
}
在主窗口中,新页面:
window.onload = newWin.okGotIt; //just to make sure we have it...
然而,它仍然太复杂而且效率不高。
有更好的方法吗?