WindowsMaker
WindowsMaker

Reputation: 3400

disable all javascript events on page

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

Answers (3)

StackSlave
StackSlave

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

Amadan
Amadan

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

Jeff Sisson
Jeff Sisson

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

Related Questions