【问题标题】:Electron React Native for Web Keyboard Shortcuts用于 Web 键盘快捷键的 Electron React Native
【发布时间】:2020-06-08 16:20:17
【问题描述】:

我正在尝试为 react-native-web 应用程序的电子(网络)构建添加键盘快捷键。

我确实有一些快捷方式已经在index.electron.js 中定义为加速器,但我希望这些新的快捷方式不在菜单中,它们需要反应动作/减速器才能执行。

我尝试将 window.onkeydown = (e) => { 添加到 App.web.js::componentDidMount 中,但这仅适用于在浏览器中运行应用程序时。当我构建应用程序并在电子(运行.web 版本的文件)中运行它时,我遇到了关于window 未定义的崩溃。

我不知道如何将键盘快捷键/事件侦听器(触发特定于反应的代码)添加到使用 React-Native for web 构建的 Electron 应用程序中。

提前谢谢你

【问题讨论】:

    标签: reactjs react-native electron keyboard-shortcuts react-native-web


    【解决方案1】:

    我不经常使用 react-native,所以我不确定仅使用框架是否可以做到这一点。 假设您使用的是npm,您只需下载一个可以支持此功能的软件包。 react-hotkeys 听起来它可以做你需要的快捷方式。

    【讨论】:

      【解决方案2】:

      您应该使用 Electron API globalShortcutIPC 将事件发送到网页。

      主进程代码

        const { globalShortcut } = require('electron')
      
        // this will be triggered when the accelerator is pressed
        // even if the app is in the background
        const ret = globalShortcut.register("Your_Accelerator", () => {
          yourWindow.webContents.send("shortcut", "shortcut has been pressed")
        });
      
        if (!ret) {
          console.log("registration failed");
        } else {
          console.log("registration succeeded");
        }
      

      渲染器进程代码

        const { ipcRenderer } = require("electron");
        ipcRenderer.on("shortcut", (event, message) => {
          console.log(message) // Prints "shortcut has been pressed"
        })
      

      【讨论】:

      • 澄清一下,主要流程代码在哪里?在index.electron.js?我会将ipcRenderer 十导入到我的反应组件中吗?
      • 我不知道你的项目结构是什么样的,我也不熟悉“React native for web”。但是,我有几点说明,您说“窗口”未定义,我认为您正试图在导致此问题的主进程内运行渲染器代码。请查看 Electron 应用程序结构并了解我们所说的“主”进程和“渲染器”进程之间的区别。这将是一个很好的起点:electronjs.org/docs/tutorial/…
      • 顺便说一句,window.onkeydown 应该像在 Chrome 中一样在 Electron 中工作(如果你在 Renderer 进程中正确运行它)。我只是认为globalShortcut 更好,因为它允许您启用快捷方式,即使您的应用程序没有焦点。但当然,这取决于您的用例。
      • 我只是想从随机组件的 componentDidMount 内部运行窗口。谢谢你的链接,我明天早上会读一读:)
      • 您应该能够通过一些工作轻松地做到这一点。请记住,Electron 只是在 Chromium 中运行您的 Web 应用程序,因此它的行为方式应该与在浏览器中的行为方式相同(如果您有正确的项目设置)。祝你好运!
      猜你喜欢
      • 2020-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多