我一直在寻找我的问题的答案 - 到目前为止没有运气。
这是我的代码:
var oNewWindow = window.open(sLink,'_blank');
oNewWindow.addEventListener('load',function() { alert('Page loaded'); }, false);
当弹出窗口/选项卡打开时,调用处理程序,但如果我在弹出窗口内浏览,则永远不会调用处理程序。为什么?有没有办法让它发挥作用?
基本思想是用户打开一个弹出窗口然后开始在弹出窗口中浏览,而父窗口中的代码继续工作并监视弹出窗口中发生的事情。弹出页面是同一域中的页面。
第一次加载弹出窗口后,我附加了一个onunload
处理程序,它将在父窗口中调用处理程序,然后启动计时器。然后父窗口的脚本将与弹出窗口的内容一起使用。然而,问题是滞后,如果计时器用完并且弹出窗口中的旧页面仍然存在,我得到不正确的数据,我的整个脚本停止。之后我无法附加另一个onunload
处理程序。
为整个窗口设置onload
处理程序,而不是窗口中的文档,那么为什么不调用处理程序?
此外,我的脚本在GreaseMonkey的帮助下运行。我不需要这是跨浏览器,因为我只使用Firefox。
答案 0 :(得分:2)
用户离开原始页面后,打开的窗口不再有打开窗口应用的load
事件,这就是警报不会再次触发的原因。
您可以使用的一种方法是在iframe
(www.mypage.com/myframe?url=someurl.com)
中包含一个包含所需网址的页面,以便子窗口中的页面不会更改,但{{1改变。在这里,您可以在iframe
内了解window.opener
发生了什么。
答案 1 :(得分:2)
原因是当浏览器导航到新页面时,会为该页面初始化新的window
对象。这可能会令人困惑,但最好将window
对象视为与操作系统上运行的进程所拥有的窗口无关。
总而言之,导航后父窗口和打开窗口之间的任何关系都会丢失。
答案 2 :(得分:0)
另一种方法是在子窗口中插入一个脚本块,然后执行“load”事件的附加。
这样,它就完全独立于父窗口。