如何在 Flutter Web 中禁用默认浏览器快捷方式?
Posted
技术标签:
【中文标题】如何在 Flutter Web 中禁用默认浏览器快捷方式?【英文标题】:How do I disable Default Browser Shortcuts in Flutter Web? 【发布时间】:2021-07-06 10:01:04 【问题描述】:问题
如果我在 Flutter Web 应用程序中实现 CTRL + + 和 CTRL + - 的快捷方式, 浏览器仍会默认缩放。当我覆盖快捷方式时,我想阻止浏览器这样做。
用例
当我有我的自定义快捷方式行为(例如使用Shortcuts
)时,我不希望浏览器仍然响应它,但没有办法阻止 Flutter 本身的默认操作。
另一个例子是 CTRL + D,它在 Firefox 中创建一个书签。我想在我的 Flutter Web 应用中使用快捷方式进行复制。
如何防止默认设置?
【问题讨论】:
【参考方案1】:您可以使用 JS 直接在 html 中阻止默认浏览器操作。 Flutter 尚未实现使用框架触发此操作的方法(我怀疑他们会这样做,因为它是特定于 Web 的)。
如果您愿意,也可以改用 Dart 代码,使用 dart:html
库来执行此操作。但是,最方便的是直接在 Flutter Web 应用的 index.html
中包含以下 JavaScript 代码(在 <body>
标签中):
<script>
// This prevents default browser actions on key combinations.
// See https://***.com/a/67039463/6509751.
window.addEventListener('keydown', function(e)
if (event.target == document.body)
// Prevents going back to the previous tab.
if (event.key == 'Backspace')
event.preventDefault();
if (event.metaKey || event.ctrlKey)
switch (event.key)
case '=': // Prevent zooming in.
case '-': // Prevent zooming out.
case 'd': // Prevent bookmark on Firefox e.g.
case 'g': // Prevent open find on Firefox e.g.
case 'z': // Prevent restoring tab on Safari.
event.preventDefault();
break;
);
</script>
如您所见,我添加了一些示例,例如 CTRL + D 等。灵感来自 Rive。
此外,我添加了一个 sn-p 以防止在按退格键时返回上一个选项卡。这种情况的用例是,如果您想使用退格键作为删除文本输入之外的快捷方式。
【讨论】:
应该是 '+' 而不是 '=' 用于放大,因为更改很小,所以无法进行编辑 @omnesia=
是正确的 - 这是故意的。这是放大时触发的键,因为+
在同一个物理键上,只是带有修饰符。
这不适用于国际键盘,例如奎沃茨。对于德语键盘,“+”修改为“*”以上是关于如何在 Flutter Web 中禁用默认浏览器快捷方式?的主要内容,如果未能解决你的问题,请参考以下文章
如何构造 FCM 推送通知以在 Flutter(Android 和 iOS)的默认系统 Web 浏览器应用中打开指定的 URL
只有在 Flutter 应用程序上使用 Web 时,如何才能禁用某些功能?