gpt4 book ai didi

javascript - 用于拦截按键的 Greasemonkey 脚本

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:35:27 34 4
gpt4 key购买 nike

理论上,以下用户脚本(将在 Firefox 中与 Greasemonkey 一起使用)应该捕获所有网站上的所有 Ctrl+t 事件,警告“Gotcha!”,然后阻止该网站看到Ctrl+t 事件。

但是,它仅适用于某些网站(Google、Stack Exchange),而不适用于其他网站。 Userscript 不起作用的一个示例是 Codecademy(当代码编辑器具有焦点时),其中 Ctr+t 始终切换光标旁边的两个字符。

我禁用了 Flash,所以我认为这是一个可以用 JavaScript 解决的问题。我可以在我的脚本中更改什么,以真正防止事件冒泡到网站脚本?

// ==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];

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!"); //comment this out for real world usage
}
return false;
});

免责声明:我最初问了一个 broader question关于 super 用户的主题。在尝试寻找答案时,我偶然发现了这个与脚本相关的特定问题。我并不是有意重复发布 - 我只是认为这部分问题可能更适合 Stack Overflow 而不是 super 用户。

最佳答案

我通过从找到的另一个用户脚本中复制两行来修复它 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);

关于javascript - 用于拦截按键的 Greasemonkey 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19785368/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com