簡體   English   中英

如何使用GreaseMonkey為瀏覽器提供“/”鍵?

[英]How can I use GreaseMonkey to give the browser back the “/” key?

很多網頁似乎都使用/鍵進行搜索。 我想禁用它,因為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 ,那么阻止該事件可能需要這種技術 這是因為<body>上的keypress事件會觸發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。 並且,它不會停止輸入/輸入或textareas。 但是,它很可能會導致某些網站無法觸發/ key上的其他事件。

如果發生這種情況,那么使用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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM