许多网站,尤其是涉及富文本编辑的所有网站(此网站也有罪),都窃取了通常用于控制Firefox的键盘快捷键,而改为执行其他操作。当我按Cmd-number,Cmd-L,Cmd-T或Cmd-K之类的命令时,这真是太令人生气了,但它并没有实现我想要的功能。我可以停止吗?
实际上,如果我可以禁止窃取所有Cmd- *快捷方式,那可能是最好的。我从未见过它们用于任何有用的东西。可能吗?
许多网站,尤其是涉及富文本编辑的所有网站(此网站也有罪),都窃取了通常用于控制Firefox的键盘快捷键,而改为执行其他操作。当我按Cmd-number,Cmd-L,Cmd-T或Cmd-K之类的命令时,这真是太令人生气了,但它并没有实现我想要的功能。我可以停止吗?
实际上,如果我可以禁止窃取所有Cmd- *快捷方式,那可能是最好的。我从未见过它们用于任何有用的东西。可能吗?
Answers:
感谢Greasemonkey的新@run-at
财产,现在可以做到这一点!
我从这个脚本和这个脚本中得到了启发,将它们组合成一个Userscript,成功截获了键盘快捷键Ctrl+ T和Ctrl+ S。我在Firefox 17 ESR和Firefox 25中进行了测试。
// ==UserScript==
// @name Disable Ctrl+s and Ctrl+t interceptions
// @description Stop websites from highjacking keyboard shortcuts
//
// @run-at document-start
// @include *
// @grant none
// ==/UserScript==
// Keycode for 's' and 't'. Add more to disable other ctrl+X interceptions
keycodes = [83, 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);
e.ctrlKey
的 e.cmdKey
并e.cmdKey && e.shiftKey
收回大部分的浏览器的快捷键。
9
到keycodes数组来修复CTRL + TAB 。谢谢!
提交此错误11年后,Mozilla终于能够处理此受欢迎的功能请求,并且现在看来还可以(在Firefox 66.0.3 / Ubuntu中测试)。
(感谢@PerJohansson指出,自FF 59以来,它们使查找设置变得更加困难。)
您可以按照以下步骤禁用网站快捷方式:
(i)
位置栏中的图标>
“连接”状态项右侧的小箭头()。More Information
在底部看到。单击该Page Info
按钮,您将最终进入对话框。Permissions
标签并调整Override Keyboard Shortcuts
设置。这是每个步骤的最近(2019年5月)屏幕快照:
如果您对此修复程序的历史感兴趣,请查看以下相关Mozilla票证:https : //bugzilla.mozilla.org/show_bug.cgi?id=380637和 https://bugzilla.mozilla.org/show_bug.cgi ?id = 1445942
about:config
选项可以更改默认值?我要强制所有站点无法挂接到我的键盘上
广泛的研究表明,从当前版本的Firefox(3.6.x)开始,这是不可能的-所有键绑定冲突都按照优先级解决:系统>网站> Firefox-相当愚蠢的命令。我尝试过的所有插件似乎都无法修复它。
它可能在将来的版本中变得可行,但现在的答案是-不可能。
由于问题似乎是JavaScript键盘事件窃取了按键,因此无法构建一个JavaScript脚本(通过Greasemonkey使用)来解除所有键盘事件的绑定,从而将每个快捷方式的正确用法返回给浏览器吗?
我不确定这是否可行,但是具有JavaScript / Greasemonkey经验的人也许可以提供帮助(可能值得一提)。
问题在于,任何页面都可以运行设置了事件处理程序以捕获按键事件的Javascript,并且Firefox的javascript控件不够精细,无法在不破坏其他javascript功能的情况下将其停止。
防止这种情况的唯一方法是禁用Javascript(“工具”->“选项”,““内容””选项卡,取消选中“ 启用JavaScript”)。或者,您可以使用NoScript之类的扩展名在每个站点上禁用Javascript。
Firefox使您可以防止某些 Javascript使用,例如移动/调整窗口大小,更改或禁用上下文菜单等;但是没有什么可以阻止网站拦截键盘事件的。
也许有一个扩展可以提供这种控制级别-我不知道。
有Javascript Options,但是该扩展名不再被更新。
第三方插件可能正在从主浏览器窗口获取焦点。在这种情况下,键盘输入(中断除外)将被插件拦截。如果您不喜欢这样,可以随时删除有问题的插件[我认为这可能是Flash]。
在各种浏览器上进行了大量测试之后,当按下(未按下)键时,截取键会更容易,因为某些“应用程序集成键”很难通过“ keypress”事件截取。
我想出了与跨浏览器兼容的脚本(我没有测试Microsoft的IE)。请注意,浏览器为某些键返回不同的代码。就我而言,我想阻止Ctrl + P。
chrome上的键“ P”被视为e.keyCode == 80
,歌剧上为e.charCode == 16
,而Firefox上为e.charCode == 112
$(document).on('keydown', function(e) {
if(e.ctrlKey && (e.key == "p" || e.charCode == 16 || e.charCode == 112 || e.keyCode == 80) ){
alert("Please use the Print PDF button below for a better rendering on the document");
e.cancelBubble = true;
e.preventDefault();
e.stopImmediatePropagation();
}
});
我用的是jQuery。
如果要禁用该网页所接管的任何 ctrl键,只需从az过滤所有字母的代码(以先前接受且有效的答案为基础)
// ==UserScript==
// @name Disable Ctrl+key interceptions
// @description Stop websites from highjacking keyboard shortcuts
//
// @run-at document-start
// @include *
// @grant none
// ==/UserScript==
(window.opera ? document.body : document).addEventListener('keydown', function(e) {
//alert(e.keyCode ); //uncomment to find more keyCodes
if( e.ctrlKey && e.keyCode>=65 && e.keyCode<=90 ) {
e.cancelBubble = true;
e.stopImmediatePropagation();
}
return false;
}, !window.opera);
CTRL-;
进入快捷方式并突出显示屏幕上所有可用快捷方式的命令。每个快捷方式都是一个组合,因此新的情况是CTRL-; N
,编辑为CTRL-; E
。非常容易习惯和零冲突。我希望更多的网站会使用这样的内容,因为这对用户来说更容易,并且不会覆盖浏览器的快捷方式。不幸的是,SuperUser不能执行此操作,因为它与FogBugz来自同一个人。