列出在PhantomJS中加载的页面的所有DOM事件
List all DOM events of a page loaded in PhantomJS
我想记录所有绑定在JS和html中的事件。我当前的解决方案,它不记录任何内容,我做错了什么,或者是否有更好的方法来捕获事件并保存其回调?
'use strict';
var page = require('webpage').create();
page.onConsoleMessage = function(msg) {
console.log('CONSOLE: ' + msg);
};
page.open('url', function (status) {
var _count = function() {
return page.evaluate(function() {
var htmlAddEventListener = HTMLElement.prototype.addEventListener;
HTMLElement.prototype.addEventListener = function(name, cb) {
console.log('1', name);
this.boundEvents || (this.boundEvents = {});
(this.boundEvents[name] || (this.boundEvents[name] = [])).push(cb);
return htmlAddEventListener.apply(this, arguments);
}
var elementAddEventListener = Element.prototype.addEventListener;
Element.prototype.addEventListener = function(name, cb) {
console.log('1', name);
this.boundEvents || (this.boundEvents = {});
(this.boundEvents[name] || (this.boundEvents[name] = [])).push(cb);
return elementAddEventListener.apply(this, arguments);
}
var documentAddEventListener = Document.prototype.addEventListener;
Document.prototype.addEventListener = function(name, cb) {
console.log('2', name);
this.boundEvents || (this.boundEvents = {});
(this.boundEvents[name] || (this.boundEvents[name] = [])).push(cb);
return documentAddEventListener.apply(this, arguments);
}
var windowAddEventListener = window.addEventListener;
window.addEventListener = function(name, cb) {
console.log('3', name);
this.boundEvents || (this.boundEvents = {});
(this.boundEvents[name] || (this.boundEvents[name] = [])).push(cb);
return windowAddEventListener.apply(this, arguments);
}
var elementDispatchEvent = Element.prototype.dispatchEvent;
Element.prototype.dispatchEvent = function(name, cb) {
console.log('1a', name);
return elementDispatchEvent.apply(this, arguments);
}
});
}
_count();
});
加载
页面后,您将更改内置对象原型中的各种addEventListener
函数。page.open
回调大部分时间是在所有即时页面 JavaScript 运行后调用的。如果您正在加载的页面不使用动态请求,则不会显示任何内容。
您应该从在执行页面 JavaScript 之前运行的事件处理程序调用_count
。例如page.onInitialized
、page.onLoadStarted
、page.onNavigationRequested
和page.onUrlChanged
。确保您不会多次调用它。
相关文章:
- DOM事件通过JSON转换为java
- 直接在DOM事件处理程序中调用作用域函数的最短方法是什么
- 如何克隆或重新调度 DOM 事件
- DOM事件链接不起作用
- 如何删除DOM事件处理程序的重复JavaScript代码
- Asp.net Ajax事件句柄如何与DOM事件协同工作
- 为什么要在DOM事件触发之前声明命名函数
- Web组件,添加Shadow DOM事件
- 谷歌地图的DOM事件没有响应
- 为什么 DOM 事件处理程序中的嵌套函数会修复“this”绑定
- 是为响应 DOM 事件而创建的多个事件对象
- 删除 DOM 事件观察器
- 列出在PhantomJS中加载的页面的所有DOM事件
- 基于类的 DOM 事件委派
- 查看元素的所有 dom 事件
- InnerView 不响应其模板中的 DOM 事件
- DOM 事件不会在 DOM 元素中冒泡
- Javascript/DOM 事件名称约定
- jsViews:将函数/助手绑定到 DOM 事件
- 为什么我不能将 DOM 事件附加到我的谷歌地图