javascript - 从插件拦截 Firefox 中的 keyup 事件

标签 javascript events firefox firefox-addon

为了记录 Selenium 脚本,我需要能够拦截页面上的所有事件,例如按键或单击。目前,我通过将事件监听器附加到页面上的所有元素来实现此目的,但如果已经存在阻止事件冒泡的监听器,则它永远不会到达我的手中。

我尝试了 https://stackoverflow.com/a/6434924/15255 中的“替换 addEventListener”方法在 How to find event listeners on a DOM node when debugging or from the JavaScript code? ,但这似乎不起作用。

这一切都在 Firefox 插件中,因此我可以执行特权操作,但似乎没有太多用于枚举或修改现有监听器的功能。有人对如何做到这一点有建议吗?

编辑:目前的代码:

jQuery(frame.document).
        bind("dblclick", {}, this.listeners.writeJsonClicks, true).
        bind("keyup", {}, this.listeners.writeJsonChange, true).
        bind("change", {}, this.listeners.writeJsonChange, true);

澄清一下:我无法控制frame.document 中文档的内容。它是用户在其上录制脚本的任何页面。问题是,当文档加载时,它自己的捕获已经安装,所以我的不会收到该事件。

当页面 DOM 完全加载但附加监听器的 JS 尚未执行时,我一直试图在加载过程中捕获页面。使用NsIObserverService监听 document-element-inserted 看起来很有希望,但是只要有任何 DOM,该事件就会发生:文档及其头部已加载,但正文未加载。

从根本上来说,我需要一种方法来重新排序现有的监听器,以便将我的监听器插入到之前的监听器之前,一种能够在加载 DOM 树但 JS 尚未运行时运行代码的方法,或者拦截对 addEventListener 的调用以包装添加的监听器的方法,让我可以窃听。

最佳答案

您应该注册一个捕获监听器 - 无法停止捕获事件。

document.addEventListener("keyup", function(event)
{
  console.log("keyup event received on " + event.target);
}, true);

关于javascript - 从插件拦截 Firefox 中的 keyup 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11247043/

相关文章:

javascript - 如何用 jQuery UI 对话框替换 window.alert ('' ) - 合并两个脚本

dom - Safari 扩展 beforeload 事件文档

c# - 哪个事件捕获窗口的位置变化?

events - knockout : prevent event bubbling for elements with no handler

javascript - 引用错误 : event is not defined in Firefox

python selenium 多个测试用例

html - 绝对定位div内的SVG不显示

javascript - 从 promise.all() 返回数据

javascript - 如何在 Linnworks 嵌入式应用程序中获取刷新的 token ?

javascript - 在 IE 中使用 Dojo 1.9.1 不起作用