如何使用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等插件) -
您无法确定页面是否触发了
keydown
、keyup
、keypress
或某些组合,因此拦截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);
- 铬:“;未捕获的语法错误:意外的标记:"
- 可以设置“;文件名"发生错误时显示的内联脚本标记的
- JS表单提交"无法使用Chrome数据保护程序加载此页面.尝试重新加载页面.调试信息:POST CISmtuK
- 检测电话窃听,即:<a href="电话:xxx">在UIWebview上
- 使用“+="操作人员
- //而不是在src=“”上使用http://"属性
- "未捕获的语法错误:意外的标记}"
- 可以<脚本类型=“;text/javascript”>window.location=“/"</
- "实例范围”;TypeScript类的getter/setter
- Javascript复选框函数:;缺少:在属性id之后"
- "“;变量未引用正确的对象
- "日期“;AJAX请求返回的类型值未定义
- 得到"TypeError:无法读取属性'filename'未定义的“;调用“npm start
- Soundcloud api"未捕获的类型错误:无法读取属性'uri'“未定义”;
- 关键帧之间的css3动画延迟
- "工具提示"jQuery插件坏了
- "锻造;React中的表达式
- 图像可以从源<img src=""/>.TEXT可以在没有javascript的情况下从外部
- 如何提取“;href"最近列表项中的属性值
- CKEditor如何允许href="javascript:void(0)"在小部件中