vue.js - 如何为 Electron 应用程序创建 "always on top Component"

标签 vue.js electron

我想创建一个始终位于操作系统顶部并控制 Electron 应用程序中的功能的按钮。我想出了如何使用 alwaysOnTop 对整个应用程序执行此操作选项,但这显然不是我正在寻找的解决方案。我是否必须开始第二个 Electron 过程才能实现类似的目标?当然,我希望它连接到原始应用程序。我是针对 windows 和 osx 的,我正在使用带有 typescript 的 vue,如果这会有所不同的话。
我设法启动了第二个进程,但它也在新窗口中呈现相同的应用程序,如下所示:
enter image description here
我通过在 background.ts 中启动一个新窗口来实现这一点。 ,但我不知道如何为这个新窗口使用不同的入口点,即使我指向不同的 index.html ,我称之为 fab.html .例如。:

fab = new BrowserWindow({
width: 100,
height: 100,
alwaysOnTop: true,
})

if (process.env.WEBPACK_DEV_SERVER_URL) {
  // Load the url of the dev server if in development mode
  fab.loadURL(process.env.WEBPACK_DEV_SERVER_URL as string)
  if (!process.env.IS_TEST) fab.webContents.openDevTools()
 } else {
  createProtocol('app')
  // Load the index.html when not in development
  fab.loadURL('app://./fab.html')
}
我当时遇到的问题是,main.ts启动 Vue App 并没有注入(inject) Vue Stuff,所以我不能使用我的 vuex 和我正在使用的所有其他东西。我尝试只导入 Electron 并使用 Electron 中的 ipc 东西与我的实际应用程序进行通信,但由于某种原因我无法导入 ipcmain 并且根据文档,我需要 ipcmain 将消息发送到渲染过程。
这是它的样子:
<html lang="en">
    <style>
      ...
    </style>

    <body>
        <div id="fabApp" class="hotkeys-inactive fab" onclick="sendToMain();"></div>
    </body>

    <script>
        const { ipcRenderer } = require('electron')

        const fab = document.getElementById("fabApp");

        console.log(fab);
        ipcRenderer.on('fab-clicks', (event, arg) => {
            if (arg === "on") {
                fab.classList.remove("hotkeys-inactive")
                fab.classList.add("hotkeys-active")
                console.log("turn ON")
            } else {
                fab.classList.add("hotkeys-inactive")
                fab.classList.remove("hotkeys-active")
                console.log("turn OFF")
            }
        })

        function sendToMain() {
            ipcRenderer.send('fab-clicks', 'clicked');
            console.log(`sent`)
        }
    </script>

</html>
Appart 它不工作,我也只想使用 vue,而不是在这里做所有这些原生 js 的东西:/看起来很hacky。

最佳答案

打开具有不同端点的子窗口(您已经这样做了)
然后使用消息获取/更新 vuex 存储
在父窗口中,使用 postMessage
https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage
您可以将它与例如绑定(bind)到来自 vuex 的值的组件的 watch 方法结合使用
在 child 身上听

window.addEventListener("message", msg => {
   ...
}, false)

关于vue.js - 如何为 Electron 应用程序创建 "always on top Component",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64909207/

相关文章:

node.js - <slot> Angular 5 中的功能

javascript - Electron/USB不兼容的版本

javascript - 使用 `NODE_MODULE_VERSION 70.` 而不是 NODE_MODULE_VERSION 48 重建 nbind

javascript - 方法在单元测试中不可用

javascript - 依次解决 Promise 会导致错误

javascript - Vue router-link 和自定义事件

typescript 将属性添加到 Vue 库定义

javascript - 等待代码执行输入

reactjs - Electron 中的路由 + 创建 React App

node.js - Node 串口不适用于 Electron