javascript - 为什么 Windows 只打开一次 `onload` 事件?

标签 javascript firefox greasemonkey 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.opener iframe 中发生了什么。

关于javascript - 为什么 Windows 只打开一次 `onload` 事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5967707/

相关文章:

html - 如何实现悬停滚动内容的定宽div?

javascript - 如何在函数调用之间设置超时?

java - Greasemonkey 脚本使用小程序标签更改 img 标签

javascript - XPath 在 Firefox/GreaseMonkey 中阻塞实体

javascript - 如何修复 500(内部服务器错误)Vue js - Laravel(已编辑)

javascript - 如何在vue中用鼠标选择项目时滚动

javascript - 获取 D3 中复杂数据结构的范围

javascript - Firebase Cloud功能使用paypal sdk后无法写入文档

firefox - 如何在 Firefox/Firebug 中美化 JavaScript 和 CSS?

javascript - Firefox 视频标签 getVideoPlaybackQuality() 不是函数