许多网页似乎都使用/关键字进行搜索。我想禁用它,因为 100% 的时间我都想使用/在 FireFox 的页面中进行搜索。有没有办法可以用 GreaseMonkey 或 dotjs 覆盖这种行为?
最好的公开示例是https://www.github.com/,也是https://wiki.jenkins-ci.org/display/JENKINS/Issue+Tracking
许多网页似乎都使用/关键字进行搜索。我想禁用它,因为 100% 的时间我都想使用/在 FireFox 的页面中进行搜索。有没有办法可以用 GreaseMonkey 或 dotjs 覆盖这种行为?
最好的公开示例是https://www.github.com/,也是https://wiki.jenkins-ci.org/display/JENKINS/Issue+Tracking
如果您打开DocaddEventListener()
并window
使用“事件捕获”,您将捕获 99% 的页面尝试执行的操作。(不包括 Flash 等插件)
您无法确定页面是由 、 、 还是某种组合触发的keydown
,keyup
因此keypress
拦截keydown
(使用的典型事件)和keyup
. 但是,如果页面触发keypress
,则阻止事件可能需要这种技术。这是因为keypress
事件 on<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);