我正在使用C#进行浏览器自动化,我想修改或者可能只是删除我正在查看的网页中某些html元素的事件处理程序。例如,假设有一个按钮可能(或可能没有)附加onClick事件。我该怎么做: - 查看是否有任何附加到onClick的事件处理程序? - 删除它们?
答案 0 :(得分:3)
用自己的克隆替换元素应该有效地丢弃它的所有事件监听器(好吧,技术上的监听器仍然在一个元素上,但由于一个元素被它自己的克隆替换,它看起来好像听众被删除了):
el.parentNode.replaceChild(el.cloneNode(true), el);
不幸的是,这在IE中不起作用,因为IE错误地在克隆上传输元素的事件侦听器。要解决此问题,您可以重新分配元素innerHTML
的{{1}} :
parentNode
请注意,这不仅会删除元素的事件侦听器,还会删除所有元素兄弟的侦听器。
或者,您可以通过重新分配元素的el.parentNode.innerHTML = el.parentNode.innerHTML;
解决IE问题:
outerHTML
答案 1 :(得分:1)
这取决于事件处理程序如何附加到元素。
如果使用addEventListener或其中一个专有的addWhatever侦听器方法附加它们,则无法列出它们。
如果通过修改事件属性来附加它们,即。 node.onclick = whatever,那么你可以读取属性的值来获取函数,它的工作方式与任何其他JS函数相同。
还有第三种方式:
如果您自动执行的代码使用这些代码,则可以覆盖默认的addEventHandler / addListener行为。通过执行此操作,您可以将默认行为替换为将每个处理程序推送到数组中的行为,然后您可以自行循环。
以下代码可能有效:
var oldAddEventListener = HTMLElement.prototype.addEventListener;
HTMLElement.prototype.addEventListener = function(event, handler, bubbling) {
/* do whatever you want with event parameters */
oldAddEventListener.call(this, event, handler, bubbling);
}
答案 2 :(得分:0)
据我所知,目前无法使用javascript将所有事件处理程序附加到元素上。
有关详细信息,请参阅此链接: