收回' /'来自Google群组的关键使用greasemonkey

时间:2015-04-19 16:43:46

标签: javascript events dom greasemonkey

让某些网站拦截标准浏览器用户界面热键让我感到很恼火。

我使用Firefox,当我点击正斜杠键(' /')时,我想搜索 当前标签中的文字。我不希望光标聚焦 谷歌搜索框位于页面顶部。这是一个典型的违规页面:

https://groups.google.com/forum/#!msg/vim_use/r3TdW9G9ms4/s-Jr3BpcnvUJ

我尝试过一些可以在其他网站上运行的润滑油技术,比如 为keyup,keydown和keypress安装我自己的addEventListener() here,或将prototype.addEventListener()替换为here

这是一些示例代码,我尝试使用后一种技术在所有div元素上对所有关键事件监听器进行核对:

// ==UserScript==
// @description Stop google groups from highjacking the keyboard
// @include     http://groups.google.com/*
// @include     https://groups.google.com/*
// @run-at      document-start
// @grant       unsafeWindow
// ==/UserScript==

realHTMLDivElementAddEventListener = unsafeWindow.HTMLDivElement.prototype.addEventListener;
unsafeWindow.HTMLDivElement.prototype.addEventListener = function(a,b,c) {
  if ( a == 'keydown' || a == 'keyup' || a == 'keypress' ) {
    console.log("zapped: " + a);
    console.log("zapped:  this is id: " + this.id);
    console.log("zapped:  this is cl: " + this.className);
  } else {
    realHTMLDivElementAddEventListener(a,b,c);
  }
}

这抓住了一些,但仍然安装了数百个事件监听器。 在#34;加载"或" DOMContentLoaded"没有帮助......

我实际上不确定它是否需要切换的DIV元素(我没有去过 当我击中' /)时能够哄Firebug,但是我很惊讶 上面的代码无法消除将关键事件监听器添加到DIV的所有尝试。

谷歌是否已找到一种方法来躲避Greasemonkey的力量?

1 个答案:

答案 0 :(得分:0)

// ==UserScript==
// @name         Google Groups Key Redemption
// @namespace    github.com/zanetu
// @version      0.1
// @description  Prevents Google Groups from intercepting browser hotkeys such as forward slash key. 
// @include      /^https?\:\/\/groups\.google\.com\//
// @author       zanetu
// @license      GPL version 2 or any later version; http://www.gnu.org/licenses/gpl-2.0.txt
// @grant        none
// @run-at       document-start
// ==/UserScript==

var ael = window.addEventListener
window.addEventListener = function(type) {'keypress' != type && ael.apply(this, arguments)}