以下用户脚本(将在Firefox中使用Greasemonkey)理论上应该捕获所有网站上的所有Ctrl+t
事件,提醒“Gotcha!”,然后阻止网站看到{{1}事件。
但是,它仅适用于某些网站(Google,Stack Exchange),但不适用于其他网站。用户脚本不起作用的一个示例是Codecademy(当代码编辑器具有焦点时),其中Ctrl+t
总是切换光标旁边的两个字符。
我禁用了Flash,因此我认为这是一个可以通过JavaScript解决的问题。我可以在脚本中更改哪些内容,以便真正阻止事件进入网站脚本?
Ctr+t
免责声明:我最初在超级用户上询问了broader question这个主题。在试图找到答案时,我偶然发现了这个特定的脚本相关问题。我不是故意双重发帖 - 我只是认为问题的这一部分可能更适合Stack Overflow而不是超级用户。
答案 0 :(得分:5)
我通过从找到here的另一个用户文件复制两行来修复它。
这改变了document.addEventListener
行,更重要的是,改变了最后一行。在Firefox上,!window.opera
评估为true
。这将作为addEventListener
函数的第三个选项参数传递,该函数将useCapture
设置为true
。这导致事件在较早的“捕获阶段”中触发,而不是在“冒泡阶段”,并且防止网站的另一个eventListener“看到”该事件。
这是工作脚本:
// ==UserScript==
// @name Disable Ctrl T interceptions
// @description Stop websites from highjacking keyboard shortcuts
//
// @run-at document-start
// @include *
// @grant none
// ==/UserScript==
// Keycode for 't'. Add more to disable other ctrl+X interceptions
keycodes = [84];
(window.opera ? document.body : document).addEventListener('keydown', function(e) {
// alert(e.keyCode ); //uncomment to find more keyCodes
if (keycodes.indexOf(e.keyCode) != -1 && e.ctrlKey) {
e.cancelBubble = true;
e.stopImmediatePropagation();
// alert("Gotcha!"); //ucomment to check if it's seeing the combo
}
return false;
}, !window.opera);