如何使用GreaseMonkey让浏览器返回"/"关键

How can I use GreaseMonkey to give the browser back the "/" key?

本文关键字:quot 关键 返回 何使用 GreaseMonkey 浏览器      更新时间:2023-09-26

很多网页似乎都使用/键进行搜索。我想禁用它,因为100%的时间我想使用/在FireFox中搜索页面。是否有一种方法可以覆盖这种行为与GreaseMonkey或dotjs?

最好的公共示例是https://www.github.com/,也是https://wiki.jenkins-ci.org/display/JENKINS/Issue+Tracking

  • 如果您在window上设置addEventListener() Doc并使用"事件捕获",您将捕获99%的页面试图做的事情。(不包括Flash等插件)

  • 您无法确定页面是否触发了keydownkeyupkeypress或某些组合,因此拦截keydown(使用的典型事件)和keyup。但是,如果页面从keypress触发,那么阻塞事件可能需要这种技术。这是因为keypress事件在<body>上冒泡触发Firefox的页内搜索,但是没有办法从javascript(出于安全考虑)(重新)触发该搜索。

    幸运的是,您的两个样本站点不需要任何激烈的措施。

  • 事件常量,如DOM_VK_SLASH是伟大的,但他们仍然几乎只有firefox。从这个问题的标签(dotjs),它是不清楚,如果你的意思是这工作在Chrome,太。

把所有这些放在一起,这个完整的脚本工作:

// ==UserScript==
// @name        _Nuke the forward slash on select pages
// @include     https://github.com/*
// @include     https://wiki.jenkins-ci.org/*
// @grant       GM_addStyle
// ==/UserScript==
/*- The @grant directive is needed to work around a design change
    introduced in GM 1.0.   It restores the sandbox.
*/
//-- "true" tells the listener to use capture mode.
window.addEventListener ('keydown',  blockSlashKey, true);
window.addEventListener ('keyup',    blockSlashKey, true);
/*-- Don't block keypress on window or body, this blocks the default
    page-search, too.
window.addEventListener ('keypress', blockSlashKey, true);
*/
function blockSlashKey (zEvent) {
    var FORWARD_SLASH   = 191;  // For keydown and keyup
    var ASCII_SLASH     = 47;   // For keypress
    if (    zEvent.which === FORWARD_SLASH
        || (zEvent.which === ASCII_SLASH  &&  zEvent.type == "keypress")
    ) {
        zEvent.stopPropagation();
    }
}

注意:这个脚本似乎在你列出的两个网站上工作得很好,在Chrome和Firefox中。而且,它不会阻止在输入或文本区域中键入/。但是,它可能会导致一些站点不触发/键上的其他事件。

如果发生这种情况,则使用zEvent.target.nodeName == "BODY"之类的检查来限制blockSlashKey()的操作

这个Greasemonkey脚本可以在Firefox上运行

// ==UserScript==
// @name        Disable slash key on page
// @namespace   test
// @include     https://github.com/*
// @include     https://wiki.jenkins-ci.org/*
// @grant       none
// @version     1
// ==/UserScript==
document.addEventListener('keydown', function(event) {
    if (event.keyCode === event.DOM_VK_SLASH) {
        event.stopPropagation();
    }
}, true);