美文网首页
初探Electron----ipcRenderer问题

初探Electron----ipcRenderer问题

作者: 叫我马小帅 | 来源:发表于2024-06-20 08:38 被阅读0次

笔者最近收到做桌面端的需求,为了一套代码满足mac和Windows,遂选择了flutter,在调研flutter桌面端的时候,发现flutter对于Windows的内嵌webview不太友好,需要在包里集成WebView2,同时webview上如果在添加组件的话,也有滑动上的问题,项目中会有大量的webview上的需求,遂放弃了flutter,选用electron。
electron 集成还是超级简单的,我选用的是在vue2项目下添加electron支持,剩下的就是前端开发了,但是在打开新的子窗口时,遇到了electron 最近的一个更新,在vue界面中,不能直接通过 const { ipcRenderer } = window.require('electron'); 获取ipcRenderer,需要添加一个preload.js,来进行中转,百度了一下,发现相关资料较少,官网说的也不太直白,这里做下科普吧,主要是给新手electron 开发看的,嘿嘿

image.png

这是一个项目目录.先手动添加preload.js,里面内容为

const { contextBridge, ipcRenderer } = require('electron');

const validChannels = ['show-read-win',];
contextBridge.exposeInMainWorld(
    'ipc', {
    send: (channel, data) => {
        if (validChannels.includes(channel)) {
            ipcRenderer.send(channel, data);
        }
    },
    on: (channel, func) => {
        if (validChannels.includes(channel)) {
            // Strip event as it includes `sender` and is a security risk
            ipcRenderer.on(channel, (event, ...args) => func(...args));
        }
    },
},
);

修改vue.config.js为

const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({
  transpileDependencies: true,
  pluginOptions: {
    electronBuilder: {
      preload: 'src/preload.js'  //make sure you have this line added
    }
  }
})

然后再background.js中引入

const path = require('path');

 const win = new BrowserWindow({
    minWidth: 1024,
    minHeight: 768,
    width: 1024,
    height: 768,
    center: true,
    transparent: false,
    frame: true, // 隐藏窗口边框
    backgroundColor: '#00000000', // 透明背景色
    skipTaskbar: false,
    webPreferences: {
      preload: path.join(__dirname, 'preload.js'),
      nodeIntegration: process.env.ELECTRON_NODE_INTEGRATION,
      contextIsolation: !process.env.ELECTRON_NODE_INTEGRATION
    }
  })

这里面有个问题是path,报错我忘了截图.需要下载

 npm install path-browserify    #这个库

然后添加webpack.config.js文件,里面内容

const path = require('path');

module.exports = {
    resolve: {
        fallback: {
            "fs": false,
            "path": require.resolve("path-browserify")
        }
    },
};

这样就可以直接使用啦,在主窗口

      window.ipc.send("show-read-win"); //就可以直接发送通知

在background.js进行接收


ipcMain.on('show-read-win', () => {
  if (childWindow === null) {
    createChildWindow();
  } else {
    childWindow.show();
  }
});

这样就全部完成啦,有什么问题可以留言探讨~

Electron Mac 打包报 Error: Exit code: ENOENT. spawn /usr/bin/python 如何解决
which python
找到自己的2.7python目录

/Library/Frameworks/Python.framework/Versions/2.7/bin/python

然后找到目录下的/node_modules/dmg-builder/out/dmg.js

"/usr/bin/python" 修改成 /Library/Frameworks/Python.framework/Versions/2.7/bin/python 就可以了

参考资料
https://medium.com/swlh/how-to-safely-set-up-an-electron-app-with-vue-and-webpack-556fb491b83

生命不息,代码不止!码农一枚,请多点赞

相关文章

  • CTS问题分析1

    CTS/GTS问题分析1 问题初探 测试命令: run gts -m GtsGmscoreHostTestCase...

  • CTS问题分析5

    CTS/GTS问题分析5 问题初探 测试命令: run cts -m CtsDevicePolicyManager...

  • CTS问题分析4

    CTS/GTS问题分析4 问题初探 测试命令:run cts -m CtsOsTestCases -t andr...

  • CTS问题分析2

    CTS/GTS问题分析2 问题初探 测试命令: run gts-suite -s ID -o -m GtsGmsc...

  • 苹果 ARKit 初探

    苹果 ARKit 初探 苹果 ARKit 初探

  • CTS问题分析10

    CTS/GTS 问题分析10 一个CTS框架自身引起的问题 问题初探 测试命令: run retry --retr...

  • CTS问题分析12

    CTS/GTS问题分析12 本文重点如何查看一个patch是否进了google system image 问题初探...

  • CTS问题分析14

    CTS/GTS问题分析14 由于测试手法不规范造成的cts-on-gsi无法retry的问题 问题初探 测试命令:...

  • 初探Serverless

    初探 Serverless 一、 什么是Serverless 要解答什么是 Serverless 这一疑问题,归根...

  • 2018-11-29

    SpringBoot初探。按照网上的教程写了一个“Hello World” 遇到几个小小的问题。 端口被占问题,可...

网友评论

      本文标题:初探Electron----ipcRenderer问题

      本文链接:https://www.haomeiwen.com/subject/zayccjtx.html