Electron渲染进程引入dialog问题

场景:

最近开始学习electron,学到dialog后,一直卡着,无法实现API文档中的弹窗方法。经过半天百度和翻阅材料,终于找到解决方法。


问题描述

官网的dialog例子是这样的:

const { dialog } = require('electron')
console.log(dialog.showOpenDialog({ properties: ['openFile', 'multiSelections'] }))

如果你按照以上例子复制到渲染进程,100%会失败。该例子只能在主进程中使用。还是怪我自己,没有好好看文档。dialog文档第一句就写明了进程:主进程。而且渲染进程api文档没有记录写法,导致新手容易迷失>.<


原因分析:

其实关于该问题,我感觉最核心问题是官网文档没有较为友好的引导。
而且网上的解决方案普遍偏旧,我使用electron的版本是v18.2.3


解决方案:

好了,言归正传,怎样才能在渲染进程中使用dialog呢?

老文档方法,引用改为

const { dialog } = require('electron').remote
console.log(dialog.showOpenDialog({ properties: ['openFile', 'multiSelections'] }))

以上方法也是不行的。经过翻阅Electron文档,里面有一栏目References->重点更改,这里明确表明了在Electron 14中已经废弃了remote了,需要使用

//渲染进程
const { dialog } = require('@electron/remote')
//主进程引入
require('@electron/remote/main').initialize()

如果使用@electron/remote需要使用npm按照

npm install --save @electron/remote

经过以上方法,应该可以解决大部分人的问题了。很不幸,我就是大部分人之外。。。于是我接着翻阅各种资料,再在主程序配置了以下两个地方即可

main.js

function createWindow() {
    const mainWindow = new BrowserWindow({
        width: 600,
        height: 400,
        webPreferences: {
            preload: path.join(__dirname, 'preload.js'),
            nodeIntegration: true,
            contextIsolation: false,
            enableRemoteModule: true,//增加该配置,默认是false,新版本不能使用remote

        }
    })
    mainWindow.loadFile('index.html')

    //增加该配置
    require('@electron/remote/main').enable(mainWindow.webContents)

}

经过以上配置~应该可以顺利跑通dialog例子

本文来自投稿,不代表科技代码立场,如若转载,请注明出处https://www.cwhello.com/36455.html

如有侵犯您的合法权益请发邮件951076433@qq.com联系删除

(2)
上一篇 2022年5月19日 20:37
下一篇 2022年5月19日 20:55

相关推荐

联系我们

QQ:951076433

在线咨询:点击这里给我发消息邮件:951076433@qq.com工作时间:周一至周五,9:30-18:30,节假日休息