Reputation: 3400
I am trying to write a chrome extension that disables event listeners for all elements (mouseover, click, ...) I am not trying to rewrite noscript, this is just a setup step that i need.
I have tried $("body *).unbind()
and .unbind("mouseover click")
and .off()
and .off("mouseover click")
none worked.
What am i doing wrong?
PS: it would also be fine to just disable all javascript code (coming from the page itself) from running on the page and only allow my extension injected code
Upvotes: 2
Views: 5091
Reputation: 10627
This is not a complete example, as I won't do all of your work for you, but might lead you in the right direction:
function preventAll(){
var dom = document.getElementsByTagName('*');
var km = ['click', 'dblclick', 'mousedown', 'mousemove', 'mouseover', 'mouseout', 'mouseup', 'mouseenter', 'mouseleave', 'keydown', 'keypress', 'keyup'];
for(var i=0,l=dom.length; i<l; i++){
for(var n=0,c=km.length; n<c; n++){
dom[i]['on'+km[n]] = function(e){
e = e || event;
e.preventDefault();
return false;
}
}
}
var fr = frames;
for(var i=0,l=fr.length; i<l; i++){
// cancell frames events here
}
}
Upvotes: 3
Reputation: 198294
If you have events made by jQuery as you say, it keeps around the data that you can parse out. You can see how the excellent Visual Events does it, as a more general solution (i.e. outside Chrome extensions).
Upvotes: 1
Reputation: 1636
It's not possible to intercept or list all previously-chained events in Javascript. However, it does look like Chrome plugins specifically (as opposed to the DOM in general) have an API for manipulating how Javascript works.
Upvotes: 1