我一直在寻找我的问题的答案 - 到目前为止没有运气。
这是我的代码:
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.opener
iframe
中发生了什么。
关于javascript - 为什么 Windows 只打开一次 `onload` 事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5967707/