如何在第三方站点上检测javascript事件
是否有任何方法(实现的或理论上的)可以检测在第三方站点上分配的javascript事件和操作 如果我将javascript注入到一个外部站点,并且希望避免覆盖onsubmit、onclick、onfocus和其他类似事件,那么有没有办法检测和扩展这些回调而不是覆盖它们 我的想法是:如何在第三方站点上检测javascript事件,javascript,javascript-events,headless-browser,Javascript,Javascript Events,Headless Browser,是否有任何方法(实现的或理论上的)可以检测在第三方站点上分配的javascript事件和操作 如果我将javascript注入到一个外部站点,并且希望避免覆盖onsubmit、onclick、onfocus和其他类似事件,那么有没有办法检测和扩展这些回调而不是覆盖它们 我的想法是: 先在无头浏览器或javascript引擎中运行站点,以捕获所有已执行的javascript 动态解析javascript,希望第三方javascript符合我的解析器的期望 如果您只想添加新的事件处理程序而不覆盖现
- 先在无头浏览器或javascript引擎中运行站点,以捕获所有已执行的javascript
- 动态解析javascript,希望第三方javascript符合我的解析器的期望
addEventListener()
或attachEvent()
(对于旧版本的IE),而不是设置。。。添加新的事件处理程序而不影响以前的事件处理程序
下面是一个简单的跨浏览器功能,用于添加事件:
// add event cross browser
function addEvent(elem, event, fn) {
if (elem.addEventListener) {
elem.addEventListener(event, fn, false);
} else {
elem.attachEvent("on" + event, function() {
// set the this pointer same as addEventListener when fn is called
return(fn.call(elem, window.event));
});
}
}
我所知道的常规javascript没有跨浏览器的方式来查询现有DOM对象,以查看哪些对象通过addEventListener
或attachEvent
安装了常规javascript事件处理程序。如果事件处理程序与jQuery一起安装,则可以通过
将来还会有一些规范工作要做,以添加一个列出所有事件处理程序的属性,但我不确定它是否已经实现。你可以阅读更多关于这方面的内容
对于安装了onclick
、onsubmit
、onfocus
等的事件处理程序,您可以检查所有现有的DOM元素,查看哪些元素已为这些事件分配了处理程序,然后如果需要,可以将它们挂接
// add other events here you are interested in
var events = ["onclick", "onsubmit", "onfocus", "onblur"];
var elems = document.getElementsByTagName("*"), item;
for (var i = 0; i < elems.length; i++) {
item = elems[i];
for (var j = 0; j < events.length; j++) {
if (item[events[j]]) {
console.log("event handler for " + events[j]);
}
}
}
//在此处添加您感兴趣的其他事件
var事件=[“onclick”、“onsubmit”、“onfocus”、“onblur”];
var elems=document.getElementsByTagName(“*”),项;
对于(变量i=0;i
如果您只想添加新的事件处理程序而不覆盖现有的事件处理程序,可以使用addEventListener()
或attachEvent()
(对于旧版本的IE),而不是设置。onclick
,。onsubmit
等。。。添加新的事件处理程序而不影响以前的事件处理程序
下面是一个简单的跨浏览器功能,用于添加事件:
// add event cross browser
function addEvent(elem, event, fn) {
if (elem.addEventListener) {
elem.addEventListener(event, fn, false);
} else {
elem.attachEvent("on" + event, function() {
// set the this pointer same as addEventListener when fn is called
return(fn.call(elem, window.event));
});
}
}
我所知道的常规javascript没有跨浏览器的方式来查询现有DOM对象,以查看哪些对象通过addEventListener
或attachEvent
安装了常规javascript事件处理程序。如果事件处理程序与jQuery一起安装,则可以通过
将来还会有一些规范工作要做,以添加一个列出所有事件处理程序的属性,但我不确定它是否已经实现。你可以阅读更多关于这方面的内容
对于安装了onclick
、onsubmit
、onfocus
等的事件处理程序,您可以检查所有现有的DOM元素,查看哪些元素已为这些事件分配了处理程序,然后如果需要,可以将它们挂接
// add other events here you are interested in
var events = ["onclick", "onsubmit", "onfocus", "onblur"];
var elems = document.getElementsByTagName("*"), item;
for (var i = 0; i < elems.length; i++) {
item = elems[i];
for (var j = 0; j < events.length; j++) {
if (item[events[j]]) {
console.log("event handler for " + events[j]);
}
}
}
//在此处添加您感兴趣的其他事件
var事件=[“onclick”、“onsubmit”、“onfocus”、“onblur”];
var elems=document.getElementsByTagName(“*”),项;
对于(变量i=0;i
通过更改addEventListener
和AttacheEvent
的原型,您实际上可以得到您想要的:
// intercept events cross browser
var method;
if (HTMLElement.prototype.addEventListener) {
method = 'addEventListener';
} else {
method = 'attachEvent';
}
HTMLElement.prototype.realAddEventListener = HTMLElement.prototype[method];
HTMLElement.prototype[method] = function(a,b,c) {
console.log('here are all the events being added:', arguments);
this.realAddEventListener(a,b,c);
};
当然,在任何其他页面脚本之前将其添加到页面中是很重要的,但它可以在jQuery之类的库之后或之前添加,但在prototype上可能与prototype.js有冲突,不确定
您还需要检查onclicks
和整个事件集,您可以在javascript控制台中运行console.dir(document.createElement('a'))
。您可以通过更改addEventListener
和attachEvent
的原型来获得所需的内容:
// intercept events cross browser
var method;
if (HTMLElement.prototype.addEventListener) {
method = 'addEventListener';
} else {
method = 'attachEvent';
}
HTMLElement.prototype.realAddEventListener = HTMLElement.prototype[method];
HTMLElement.prototype[method] = function(a,b,c) {
console.log('here are all the events being added:', arguments);
this.realAddEventListener(a,b,c);
};
当然,在任何其他页面脚本之前将其添加到页面中是很重要的,但它可以在jQuery之类的库之后或之前添加,但在prototype上可能与prototype.js有冲突,不确定
您还需要检查onclicks
和整个事件集,您可以通过在javascript控制台中运行console.dir(document.createElement('a'))
找到这些事件。这是问题的后半部分。前半部分是在我开始将我的事件附加到第三方dom之前,了解哪些dom元素分配了事件。@DanielNill-我在回答中添加了更多信息。我必须说,你的问题并不清楚你想要这个其他部分,如果你告诉我们更多关于你真正想要完成的事情,你可能会得到更多有价值的信息来帮助我们。谢谢,你的后续行动是惊人的,正是我要找的。很抱歉,原来的问题不清楚。这是问题的后半部分。前半部分是在我开始将我的事件附加到第三方dom之前,了解哪些dom元素分配了事件。@DanielNill-我在回答中添加了更多信息。我必须说,你的问题并不清楚你想要这个其他部分,如果你告诉我们更多关于你真正想要完成的事情,你可能会得到更多有价值的信息来帮助我们。谢谢,你的后续行动是惊人的,正是我要找的。很抱歉,原来的问题不清楚。