electron常用方法


一、主进程与渲染进程间的通信

使用IPC通信
主进程 ipcMain 使用 ipcMain.on (同步) 或者ipcMain.handle
渲染进程 ipcRenderer
通过contextBridge暴露定义好的ipcRenderer.invoke方法给渲染进程页面使用
主进程通过ipcMain.handle(‘name’,()=>{}) 捕获到渲染进程ipcRenderer.invoke提交的数据。

ipcMain.handle('on-open-event', (e, url) => {
  const winState = new WinState({
    defaultHeight: 800,
    defaultWidth: 1200,
    electronStoreOptions: {
      name: 'window-state-open'
    }
  })

  win = new BrowserWindow({
    ...winState.winOptions,
    show: false,
    webPreferences: {
      preload: path.resolve(__dirname, '../preload/open.js')
    }
  })

  win.on('ready-to-show', () => {
    win.show()
  })

  win.loadURL(url)

  win.webContents.openDevTools()

  winState.manage(win)

  win.webContents.executeJavaScript(js).catch(() => {})

  win.webContents.on('context-menu', (e, args) => {
    saveas(args.srcURL)
  })
})
 const open = (url) => {
    ipcRenderer.invoke('on-open-event', url)
  }

二、常见方法属性

before-quit 窗口关闭前
browser-window-blur 窗口失去焦点
app.quit 关闭窗口
app.getPath 获取系统目录路径
BrowserWindow 新建窗口
ready-to-show 优雅加载
background 背景颜色
frame: false 无边框

三、electron-win-state

窗口宽度/高度/位置缓存 插件
1.引入依赖

npm i electron-win-state -S //本地使用

2.窗口使用WinState

//获取WinState对象
const WinState = require('electron-win-state').default
const createWindow = () =>{
//实例化WinState对象
    const winState = new WinState({
        dafaultWidth: 1000,
        defaultHeight: 800,
        electronStoreOptions: {
        name: 'window-state-main'
        }
    })
    const win = new BrowserWindow({
    // 使用winState 对象
       ...winState.winOptions,
       
       webPreferences:{
        // 定义预加载js
        preload: path.resolve(__dirname, './preload/index.js')
       },
       show:false
    })
    win.loadURL('http://localhost:5173')
    win.webContents.openDevTools()
    //监听窗口
    winState.manage(win)
    win.on('ready-to-show',()=>{
        win.show()
    })
}

四、webContent

控制浏览器的方法在这个函数中

webContent.on('did-finish-load',()=>{})//加载完毕
webContent.on('dom-ready',()=>{})//元素dom加载完毕
webContent.on('new-window',()=>{})//是否打开新窗口
webContent.on('content-menu',(e, params)=>{})//右键上下文信息
webContent.executeJavaScript()//注入一点javaScript

五、dialog

对话框(操作系统级对话框)

dialog.showMessageBox({
    message: msg,
    type: 'error'
  })

六、global.shortcut

快捷键、系统快捷键

//main.js
var electron = require('electron');
var globalShortcut = electron.globalShortcut;

app.on('ready',function(){
//添加快捷键
    globalShortcut.register('ctrl+shift+1',function(){
        mainWindow.webContents.send('global-shortcut',0);
   });
   //移除快捷键
   globalShortcut.unregister('ctrl+shift+1',function(){
        mainWindow.webContents.send('global-shortcut',0);
   });
})

七、Menu

系统菜单

const { app, Menu, ipcMain } = require('electron')
const template = [
  {
    label: 'actions',
    submenu: [
      {
        label: '添加',
        click: () => {
          event.sender.send('on-renderer-event', 'add')
        },
        accelerator: 'CommandOrControl+Alt+O'
      }
    ],
  }
]
const menu = Menu.buildFromTemplate(template)
Menu.setApplicationMenu(menu)

八、contextMenu.popup

注册到右键菜单

const contextMenu = Menu.buildFromTemplate([
      {
        label: '菜单名',
        click: () => {},
        accelerator: 'CommandOrControl+S'
      }
    ])
    contextMenu.popup()

九、Tray

托盘

const { Tray } = require('electron')

function createTray(app, win) {
  const tray = new Tray('icon.png')
  tray.setToolTip('readit')
  tray.on('click', (e) => {
    if (e.shiftKey) {
      app.quit()
    }
  })
}

module.exports = createTray

十、Clipboard

//渲染进程中使用
var { clipboard,nativeImage}=require("electron");
var getBtn = document.querySelector("#getBtn");
var setBtn= document.querySelector("#setBtn");

// 点击复制
getBtn.onclick=function(){
    clipboard.writeText(code.innerHTML);
    alert("复制成功!");
};
setBtn.onclick = function(){ 
    // 获取复制的内容
    input.value = clipboard.readText();
};
var copyImage = document.querySelector("#imageBtn");
// 点击复制图片
copyImage.onclick = function(){
    var image = nativeImage.createFromPath("图片地址");
    clipboard.writeImage(image);
    // base64图片编码
    var imageSrc = clipboard.readImage().toDataURL();
    // 插入复制的图片
    var copyImage = new Image();
    copyImage.src = imageSrc;
    copyImage.style.width = "";
    copyImage.style.height = "";
    document.body.appendChild(newImage);
 
}

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值