为什么窗口只打开一次“onload”事件



我一直在寻找问题的答案——到目前为止还没有运气。

这是我的代码:

var oNewWindow = window.open(sLink,'_blank');
oNewWindow.addEventListener('load',function() { alert('Page loaded'); }, false);

当弹出窗口/选项卡打开时,将调用处理程序,但是如果我在弹出窗口内浏览,则永远不会调用处理程序。为什么?有没有办法让它工作?

基本思想是用户打开一个弹出窗口,然后开始在弹出窗口中浏览,而父窗口中的代码继续工作并监视弹出窗口中发生的情况。弹出页面是同一域中的页面。

第一次加载弹出窗口后,我向其附加了一个onunload处理程序,它将在父窗口中调用处理程序,然后计时器将启动。然后,父窗口的脚本将与弹出窗口的内容一起使用。但是,问题伴随着滞后,如果计时器用完并且弹出窗口中的旧页面仍然存在,我会得到不正确的数据并且我的整个脚本停止。在那之后,我无法附加另一个onunload处理程序。

onload处理程序是为整个窗口设置的,而不是窗口中的文档,那么为什么不调用处理程序呢?

此外,我的脚本是在GreaseMonkey的帮助下运行的。我不需要它是跨浏览器的,因为我只使用 Firefox。

一旦用户导航离开该原始页面,打开的窗口将不再具有打开窗口应用的 load 事件,这就是该警报不再触发的原因。

您可以使用的一种方法是让一个页面将所需的 URL 包装在iframe (www.mypage.com/myframe?url=someurl.com)中,以便子窗口中的页面不会更改,但iframe的内容会更改。从这里你可以告诉window.openeriframe内部发生了什么。

原因是当浏览器导航到新页面时,会为该页面初始化一个新的window对象。 这可能会令人困惑,但最好将window对象视为与操作系统上运行的进程拥有的窗口无关。

总而言之,导航后,父窗口和打开的窗口之间的任何关系都将丢失。

另一种选择是在子窗口中插入脚本块,然后执行"load"事件的附加。

这样,它就完全独立于父窗口。

最新更新