admin管理员组

文章数量:1406951

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 (ing from the page itself) from running on the page and only allow my extension injected code

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 (ing from the page itself) from running on the page and only allow my extension injected code

Share asked Nov 20, 2013 at 0:50 WindowsMakerWindowsMaker 3,4107 gold badges31 silver badges47 bronze badges 6
  • You can't disable JavaScript event listeners with jQuery event handling...they're 2 totally different things. – Ian Commented Nov 20, 2013 at 0:51
  • I believe that the listeners on the page are created using jquery also. But I would like to remove all event listeners – WindowsMaker Commented Nov 20, 2013 at 0:53
  • Well it seems to work as you expect...are you sure the events aren't bound after your code? And that your code is actually running? jsfiddle/zArE4 – Ian Commented Nov 20, 2013 at 0:56
  • The standard .removeEventListener takes the function listener type (click) and the original function listening to the event. If you don't have both of these available you cannot remove the event set up in pure javascript – megawac Commented Nov 20, 2013 at 0:56
  • @Ian : since i am writing an extension i can choose when my code is executed (when i click on the extension icon) so my code should run AFTER. and I am pretty sure it is running :) – WindowsMaker Commented Nov 20, 2013 at 0:59
 |  Show 1 more ment

3 Answers 3

Reset to default 3

This is not a plete 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
  }
}

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.

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).

本文标签: google chromedisable all javascript events on pageStack Overflow