使用 greasemonkey 从 google 组取回 '/' 键
Take back the '/' key from google groups using greasemonkey
某些网站会拦截标准浏览器 UI 热键,这让我很恼火。
我使用 Firefox,当我按下正斜杠键 ('/') 时,我想搜索
当前选项卡中的文本。我不希望光标集中在
google 页面顶部的搜索框。这是一个典型的违规页面:
https://groups.google.com/forum/#!msg/vim_use/r3TdW9G9ms4/s-Jr3BpcnvUJ
我已经尝试了一些在其他网站上有效的 greasemonkey 技术,比如
如图所示,为 keyup、keydown 和 keypress 安装我自己的 addEventListener()
here, or replacing prototype.addEventListener() as seen 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);
}
}
这捕获了一些,但我们仍然安装了数百个事件侦听器。
在 "load" 或 "DOMContentLoaded" 上解雇我的 GM 并没有帮助...
我实际上不确定它是一个需要切换的 DIV 元素(我没有去过
能够在我点击 '/' 时哄骗 Firebug 崩溃),但令我惊讶的是
上面的代码无法消除所有将关键事件侦听器添加到 DIV.
的尝试
google 找到了躲避 Greasemonkey 力量的方法了吗?
// ==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)}
某些网站会拦截标准浏览器 UI 热键,这让我很恼火。
我使用 Firefox,当我按下正斜杠键 ('/') 时,我想搜索 当前选项卡中的文本。我不希望光标集中在 google 页面顶部的搜索框。这是一个典型的违规页面:
https://groups.google.com/forum/#!msg/vim_use/r3TdW9G9ms4/s-Jr3BpcnvUJ
我已经尝试了一些在其他网站上有效的 greasemonkey 技术,比如 如图所示,为 keyup、keydown 和 keypress 安装我自己的 addEventListener() here, or replacing prototype.addEventListener() as seen 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);
}
}
这捕获了一些,但我们仍然安装了数百个事件侦听器。 在 "load" 或 "DOMContentLoaded" 上解雇我的 GM 并没有帮助...
我实际上不确定它是一个需要切换的 DIV 元素(我没有去过 能够在我点击 '/' 时哄骗 Firebug 崩溃),但令我惊讶的是 上面的代码无法消除所有将关键事件侦听器添加到 DIV.
的尝试google 找到了躲避 Greasemonkey 力量的方法了吗?
// ==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)}