阅读量:0
一.electron版本由13.6.9更新至22.3.27
之前因为remote的原因,electron版本停留在13.6.9,14.x后需要单独处理remote,此次需要Chrome 95以上部分功能,所以需要升级版本到16.x以上,因为本机nodejs版本为16.9.1,不想将nodejs升级到17以上,所以将版本升级到22.x
二.升级变更
1.版本变更
13.6.9改为22.3.27,安装"@electron/remote": "^2.1.2",还可以将electron-builder版本升级至"electron-builder": "^23.6.0",
2.electron/remote相关
首先需要主程序index.js中在创建窗体new BrowserWindow()后,添加如下
require('@electron/remote/main').initialize() require('@electron/remote/main').enable(mainWindow.webContents)
变更前获取窗体信息:
const {BrowserWindow,remote,ipcRenderer} = require('electron') this.win=remote.getCurrentWindow()
变更后
const {screen,getCurrentWindow } = require('@electron/remote') let win=getCurrentWindow()
变更前获取屏幕尺寸
const { remote } = require('electron') const screen = remote.screen; this.width= screen.getPrimaryDisplay().workAreaSize.width; this.height= screen.getPrimaryDisplay().workAreaSize.height;
变更后
const {screen,getCurrentWindow } = require('@electron/remote') this.width= screen.getPrimaryDisplay().workAreaSize.width this.height= screen.getPrimaryDisplay().workAreaSize.height
变更前获取app信息
const { app } = require("electron").remote //使用 let homeDir = path.dirname(app.getPath('exe'))
变更后
const { app } = require('@electron/remote') let homeDir = path.dirname(app.getPath('exe'))
3.打开子窗体
升级前打开子窗体
const electron = require('electron') createBrowserWindow(options){ const BrowserWindow = electron.remote.BrowserWindow; let remoteWin=null let params={ webPreferences: { webSecurity: false, nodeIntegration: true, webviewTag: true, contextIsolation: false, enableRemoteModule:true }, useContentSize: true, movable:true,//是否可移动 transparent: true, resizable: true, frame:true,//是否显示边缘框 skipTaskbar: false,//展示任务栏 titleBarStyle: "hidden", fullscreen:false,//是否全屏显示 backgroundColor: '#fff', center:true, alwaysOnTop:true,//永远在别的应用上层 } params.fullscreen=options.fullscreen if(options.width){ params.fullscreen=false params.width=options.width } if(options.height){ params.fullscreen=false params.height=options.height } if(options.x){ params.x=options.x } if(options.y){ params.width=options.y } if(options.backgroundColor){ params.backgroundColor=options.backgroundColor } params.name=new Date().getTime() remoteWin=new BrowserWindow(params) return remoteWin }, openUrl(view,url){ if(process.env.NODE_ENV === 'production'){ view.loadFile('dist/electron/index.html',{hash:url}) }else{ let toUrl=window.location.protocol+"//"+window.location.host+"/#/"+url view.webContents.openDevTools(); view.loadURL(toUrl) } }, //使用 this.fileView=browserWindowUtil.createBrowserWindow() browserWindowUtil.openUrl(this.fileView,'fileManage/fileApply?type=dir')
升级后
需要使用ipcMain,ipcRenderer通信在主程序中创建子窗体
主程序
import {app, BrowserWindow, ipcMain} from 'electron' ipcMain.on('childWin',(e,message)=>{ let view=browserWindowUtil.createBrowserWindow(message) browserWindowUtil.openUrl(view,message.url) }) //工具方法 import {BrowserWindow, ipcRenderer} from 'electron' createBrowserWindow(options){ let remoteWin=null let params={ webPreferences: { webSecurity: false, nodeIntegration: true, webviewTag: true, contextIsolation: false, enableRemoteModule:true }, useContentSize: true, movable:true,//是否可移动 transparent: true, resizable: true, frame:true,//是否显示边缘框 skipTaskbar: false,//展示任务栏 titleBarStyle: "hidden", fullscreen:false,//是否全屏显示 backgroundColor: '#fff', center:true, alwaysOnTop:true,//永远在别的应用上层 } params.fullscreen=options.fullscreen if(options.width){ params.fullscreen=false params.width=options.width } if(options.height){ params.fullscreen=false params.height=options.height } if(options.x){ params.x=options.x } if(options.y){ params.width=options.y } if(options.backgroundColor){ params.backgroundColor=options.backgroundColor } params.name=new Date().getTime() remoteWin=new BrowserWindow(params) require('@electron/remote/main').enable(remoteWin.webContents) return remoteWin }, openUrl(view,url){ if(process.env.NODE_ENV === 'production'){ view.loadFile('dist/electron/index.html',{hash:url}) }else{ //此处升级后不能识别上述window.location等 let toUrl='http://localhost:9080'+"/#/"+url view.webContents.openDevTools(); view.loadURL(toUrl) } },
渲染页面
import {BrowserWindow, ipcRenderer} from 'electron' sendMsg(channel,value){ ipcRenderer.send(channel,value); }