【问题标题】:How do I disable Default Browser Shortcuts in Flutter Web?如何在 Flutter Web 中禁用默认浏览器快捷方式?
【发布时间】:2021-07-06 10:01:04
【问题描述】:

问题

如果我在 Flutter Web 应用程序中实现 CTRL + +CTRL + - 的快捷方式, 浏览器仍会默认缩放。当我覆盖快捷方式时,我想阻止浏览器这样做。

用例

当我有我的自定义快捷方式行为(例如使用Shortcuts)时,我不希望浏览器仍然响应它,但没有办法阻止 Flutter 本身的默认操作。

另一个例子是 CTRL + D,它在 Firefox 中创建一个书签。我想在我的 Flutter Web 应用中使用快捷方式进行复制。


如何防止默认设置?

【问题讨论】:

    标签: javascript html flutter 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://stackoverflow.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 = 是正确的 - 这是故意的。这是放大时触发的键,因为+ 在同一个物理键上,只是带有修饰符。
    • 这不适用于国际键盘,例如奎沃茨。对于德语键盘,“+”修改为“*”
    猜你喜欢
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-22
    • 2014-03-21
    • 1970-01-01
    相关资源
    最近更新 更多