使用javascript禁用键盘快捷键在Safari中不起作用?
Posted
技术标签:
【中文标题】使用javascript禁用键盘快捷键在Safari中不起作用?【英文标题】:Disabling keyboard shortcuts using javascript not working in Safari? 【发布时间】:2016-09-19 04:24:59 【问题描述】:我尝试使用 javascript 禁用 cmd+r
和 cmd+l
快捷方式,它在除 safari 之外的所有浏览器中都可以正常工作。
请查看jsfiddle。
var isMacOS = navigator.userAgent.toLowerCase().indexOf("mac") != -1;
$("input, textarea").on('keydown',function(ev)
checkKeyBoardEvents(ev, true);
).on('keyup',function(ev)
checkKeyBoardEvents(ev);
).on('keypress',function(ev)
checkKeyBoardEvents(ev);
);
function checkKeyBoardEvents(ev, printChar)
var keyCode = ev.keyCode;
var charCode = String.fromCharCode(keyCode);
if((isMacOS && ev.metaKey) || ev.ctrlKey)
$("#keyLogs").append("<p>You pressed "+ (ev.ctrlKey ? "ctrl":"cmd")+"+"+charCode);
if(((isMacOS && ev.metaKey) || (!isMacOS && ev.ctrlKey)) && (keyCode === 76 || keyCode === 82))
if(printChar)
var currentValue = $(ev.target).val();
$(ev.target).val(currentValue + (currentValue.length ? ". " : "") +"You pressed cmd+"+charCode+". " );
ev.preventDefault();
ev.stopPropagation();
【问题讨论】:
【参考方案1】:高级系统事件,例如CMD+F - 表示在页面上搜索,在文档或窗口上冒泡。 但!您不能在 safari 中覆盖 CTRL+R、CTRL+W 或 CMD 事件。
防止用户刷新页面的更好方法是 window.onbeforeunload = 函数(事件)
您需要使用capturing
阶段的事件来处理并防止其默认行为。
例如
function preventFn(event)
if (event.keyCode === YOU_KEY_CODE && event.metaKey)
event.preventDefault();
event.stopPropagation();
document.addEventListener('keydown', preventFn, true); // true means use capture phase of event
例如你可以使用外部库来组织你的快捷方式,你的代码会更好更干净。
hotkeys - 流行
stack-shortcuts - 小
【讨论】:
以上是关于使用javascript禁用键盘快捷键在Safari中不起作用?的主要内容,如果未能解决你的问题,请参考以下文章
当文本字段或文本区域使用纯 JavaScript 获得焦点时禁用键盘快捷键
Vanilla JavaScript:禁用整个网站中的所有关键组合
可以使用 Delphi 在 W7 中禁用任务切换键盘快捷键吗?