【发布时间】:2012-06-28 14:37:50
【问题描述】:
为了记录 Selenium 脚本,我需要能够拦截页面上的所有事件,例如 keyup 或 click。目前,我通过将事件侦听器附加到页面上的所有元素来做到这一点,但如果已经存在阻止事件冒泡的侦听器,它永远不会到达我。
我在How to find event listeners on a DOM node when debugging or from the JavaScript code? 中尝试了https://stackoverflow.com/a/6434924/15255 中的“替换addEventListener”方法,但这似乎不起作用。
这一切都在一个 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 的调用以包装添加的侦听器,让我窃听。
【问题讨论】:
-
您能否包含您拥有的不起作用或不太正确的代码?
标签: javascript events firefox firefox-addon