如何在 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 上禁用 SPA

只有在 Flutter 应用程序上使用 Web 时,如何才能禁用某些功能?

如何在 Flutter 上禁用 SSL 固定?

C#中webbrowser怎么禁用默认调用的IE浏览器缩放功能

如何移除运行 Flutter 的设备?