在我的 Flutter 应用程序中,我使用
LogicalKeyboardKey.slash
键作为除法运算的快捷键。
部署到网络时,在 Chrome 中这不是问题并且工作正常。该问题特别针对 Firefox。
当用户在 Firefox 中按下
/
时,除法运算仍然会触发,Firefox also 会打开其“快速查找”辅助功能。发生这种情况后,光标和焦点将转移到“快速查找”文本输入框。
这会造成用户体验问题,后续按键会将文本添加到“快速查找”输入框,而不是在“快速查找”打开之前在我的 Flutter 应用程序中保持焦点的内容。
如何在 Flutter/Dart 中以编程方式阻止
LogicalKeyboardKey.slash
键打开 Firefox 的“快速查找”功能?
这个按键触发这个操作是业务需求,所以我不能使用另一个按键作为替代。
该应用程序也是面向公众的,因此要求所有用户在使用 Firefox 时手动禁用“快速查找”是不现实的,除非它是应用程序本身的标签。 (除非完全必要,否则应该避免这种情况。)
问题
几天来,如果按下键盘数字键盘上的
/
键,Firefox 就会无法打开搜索框。此外,如果在编辑 HTML 中的 contenteditable
元素时按下此键,一旦搜索框打开,进一步的编辑就会陷入混乱,需要重新加载页面才能修复。
如何修复
在
keydown
事件到达目标之前捕获它们,并防止 FireFox 的默认操作稍后发生:
function keydown(event) {
if( event.code == "NumpadDivide") {
event.preventDefault();
}
}
window.addEventListener("keydown", keydown, {capture: true} );
这应该在 Flutter/Dart 下也能工作,因为 Firefox 添加了对数字键盘除法键的默认响应,而其他浏览器没有实现,因此阻止此特定的默认操作在其他浏览器中应该没有效果。
谢谢你的提问。