【问题标题】:Send ipcRenderer variable to vue3 page将 ipcRenderer 变量发送到 vue3 页面
【发布时间】:2022-01-09 18:35:24
【问题描述】:

我有一个带有电子的 vue3 应用程序,需要将一个变量从 ipcRenderer 发送到我的 Vue3 页面。我不知道该怎么做,尤其是考虑到 vue 剥离了很多 js。我想要做的是保存一个到目前为止工作正常的文件夹的路径,然后在 vue3 应用程序中显示它,无论是跨度还是其他。我成功获得了需要显示给 ipcRenderer 的值,但无法使用我的 vue 应用程序访问它。

Vue3 页面

          <q-btn
            id="showpath"
            dark
            flat
            size="xl"
            label="show Path"
            type="submit"
            @click="showpath"
          />
        </div>

export default {
  name: "Settings",
  props: {},
  methods: {
    loader() {
      window.postMessage({
        type: "select-dirs",
      });
    },
    showpath() {
      const testa = window.postMessage({ type: "pathtf"})
      console.log("Vue page says :"+ testa)
    },
  },
};
</script>

我在这里得到的只是“未定义”

预加载器脚本

const { ipcRenderer } = require('electron');
const settings = require('./settings');

process.once('loaded', () => {
    window.addEventListener('message', evt => {
            if (evt.data.type === 'select-dirs') {
                ipcRenderer.send('select-dirs')

            }

        }),
        window.addEventListener('message', evt => {
            if (evt.data.type === 'pathtf') {
                const pathtf = settings.gettfpath("pathtf")
                console.log(pathtf)
            }

        })
})

预加载文件中的 console.log 工作并显示该值,但我无法将该值获取到我的 vue3 页面。

任何提示?谢谢

【问题讨论】:

    标签: javascript electron ipc vuejs3 ipcrenderer


    【解决方案1】:

    我建议您使用电子的 contextBridge 将某些方法(发送/接收)暴露给渲染器进程。

    我不知道你的 gettfPath 方法是做什么的,但如果你可以在 preloadjs 文件中使用该变量,你应该能够像这样将它公开为一个变量:

    const {contextBridge} = require("electron");
    
    contextBridge.exposeInMainWorld("electronApi", {
      pathtf: settings.gettfPath()
    });
    

    这样,您的路径将作为 window.electronApi.pathtf

    暴露给您的渲染器进程

    这里有两个资源可能对您有帮助:

    1. How to use preload.js properly in Electron
    2. https://medium.com/swlh/how-to-safely-set-up-an-electron-app-with-vue-and-webpack-556fb491b83(这可能不是您正在寻找的,但它有一个很好的解释/示例,说明如何使用带有视图和电子的 ipc)

    【讨论】:

    • 感谢您的回复。有效!我在渲染器中得到了正确的值。只是不知道现在如何在 vue 中显示它。作为道具?我对这一切都很陌生。但是非常感谢!
    • Nvm 我想通了!我创建了一个数据对象并将其传递给 v-model,它运行良好。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    • 2014-09-01
    • 1970-01-01
    • 2018-08-22
    • 1970-01-01
    • 2011-12-05
    相关资源
    最近更新 更多