枚举并删除第三方键盘事件绑定

Enumerate and remove third party keyboard event bindings

本文关键字:事件 绑定 键盘 第三方 删除 枚举      更新时间:2023-09-26

使用Chrome、Tampermonkey和jQuery-我想在第三方网站上发现并删除关键事件绑定。

我已经尝试绑定(通过他们)并防止传播使用:

,_cancel:function(e){
  //console.log('keyProcessed');
  e.cancelBubble = true; // IE4+
  try {
    e.keyCode = 0;
  } catch (e) {
  } // IE5
  if (window.event) {e.returnValue = false; } // IE6
  if (e.preventDefault) {e.preventDefault(); } // moz/opera/konqueror
  if (e.stopPropagation) {e.stopPropagation(); } // all
  return false;
}

但钥匙仍然亮着。

我尝试过用jQuery:枚举元素

$('*').each(function(){
  if(this.onkeydown){
    console.log(this.tagName,this.onkeydown);
  }
});

其对于keydown keyupkeypress 没有给出结果

我也试过

$('*').unbind();

如何枚举和终止绑定

编辑、更新

在点击button之前,input元素的默认操作是输入文本;单击button后,调用evt.preventDefault(),阻止在元素处输入文本。

尝试

var events = ["keydown", "keyup", "keypress"];
$.each($("*"), function (index, elem) {
    if ($._data(elem, "events") != undefined) {
        // check `elem` for `keydown`, `keyup`, `keypress` `events`  
        if (new RegExp(events.join("|")).test(
            Object.keys($._data(elem, "events")))) {
            $.each(events, function (key, val) {
                // do stuff at `value` having `events`
                // call `evt.preventDefault` at `elem` 
                // having `keydown`, `keyup`, `keypress` `events` `events`
                $(elem).on(val, function(evt) {
                  evt.preventDefault()
                })
            })
        }
    };
});

$(function () {
    
    $("input:eq(0)").on("keyup", function (e) {
        console.log(e);
    });
    $("input:eq(1)").on("keydown", function (e) {
        console.log(e);
    });
      $("input:eq(2)").on("keypress", function (e) {
        console.log(e);
    });
    $("button").on("click", function() {
    var events = ["keydown", "keyup", "keypress"];
    $.each($("*"), function (index, elem) {
        if ($._data(elem, "events") != undefined) {
            if (new RegExp(events.join("|")).test(
            Object.keys($._data(elem, "events")))) {
                $.each(events, function (key, val) {
                    $(elem).on(val, function(evt) {
                      evt.preventDefault()
                    })
                })
            }
        };
    });
    })
})
input:nth-of-type(1) {
    width : 50px;
    height : 50px;
    background : blue;
}
input:nth-of-type(2) {
    display : block;
    width : 50px;
    height : 50px;
    background : yellow;
}
input:nth-of-type(3) {
    display : block;
    width : 50px;
    height : 50px;
    background : orange;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<button>click to remove keydown, keyup, keypress events below</button><br />
<input type="text" />
<input type="text" />
<input type="text" />