Electron 主进程和渲染进程都可使用的模块
2022/2/12 7:16:28
本文主要是介绍Electron 主进程和渲染进程都可使用的模块,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
shell模块
index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title></title> <style> * { margin: 0; padding: 0; } </style> </head> <body> <h2>shell 与 iframe</h2> <a id="openUrl" href="https://kaiwu.lagou.com/">打开URL</a> <br><br> <button id="openFolder">打开目录</button> <script src="index.js"></script> </body> </html>
index.js
const { shell } = require('electron') const path = require('path') window.addEventListener('DOMContentLoaded', () => { const oBtn1 = document.getElementById('openUrl') const oBtn2 = document.getElementById('openFolder') oBtn1.addEventListener('click', (e) => { e.preventDefault() const urlPath = oBtn1.getAttribute('href') shell.openExternal(urlPath) // 使用默认浏览器打开链接 }) oBtn2.addEventListener('click', () => { shell.showItemInFolder(path.resolve(__filename)) }) })
iframe
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title></title> <style> * { margin: 0; padding: 0; } iframe { top: 0; left: 0; width: 100%; height: 100%; position: fixed; } </style> </head> <body> <h2>shell 与 iframe</h2> <iframe src="https://kaiwu.lagou.com/" frameborder="0" id="webview"></iframe> <script src="index.js"></script> </body> </html>
自定义菜单使用shell
main.js
const { app, BrowserWindow, Menu, shell } = require('electron') console.log(process.platform) // 定义全局变量存放主窗口 id let mainWinId = null // 创建窗口 function createWindow () { console.log('ready') // 创建主进程 const mainWin = new BrowserWindow({ title: '自定义菜单', show: false, // true:显示窗体,false: 不显示窗体 width: 800, height: 400, webPreferences: { nodeIntegration: true, // 允许浏览器环境使用Node API enableRemoteModule: true, // 允许页面使用 remote } }) let tmp = [ { label: '菜单', submenu: [ { label: '关于', click() { shell.openExternal('https://kaiwu.lagou.com/') } }, { label: '打开', click() { BrowserWindow.getFocusedWindow().webContents.send('openUrl') } }, ] } ] let menu = Menu.buildFromTemplate(tmp) Menu.setApplicationMenu(menu) // 在当前窗口中加载指定界面让它显示具体的内容 mainWin.loadFile('index.html') mainWinId = mainWin.id mainWin.on('ready-to-show', () => { mainWin.show() // 在窗体完全加载完成后,显示窗体,避免白页现象 }) mainWin.on('close', () => { console.log('close') //mainWin = null }) } // 当 app 启动之后,执行窗口创建等操作 app.on('ready', createWindow) app.on('window-all-closed', () => { console.log('window-all-closed') app.quit() })
消息通知
index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title></title> </head> <body> <h2>基于 H5 实现消息通知</h2> <button id="btn">触发消息</button> <script src="index.js"></script> </body> </html>
index.js
window.addEventListener('DOMContentLoaded', () => { const oBtn = document.getElementById('btn') oBtn.addEventListener('click', () => { const option = { title: '通知消息123', body: '消息内容abc', icon: './msg.png', } const myNotification = new window.Notification(option.title ,option) myNotification.onclick = function() { console.log('点击了消息页卡') } }) })
1
快捷键注册
main.js
const { app, BrowserWindow, globalShortcut } = require('electron') console.log(process.platform) // 定义全局变量存放主窗口 id let mainWinId = null // 创建窗口 function createWindow () { console.log('ready') // 创建主进程 const mainWin = new BrowserWindow({ title: '自定义菜单', show: false, // true:显示窗体,false: 不显示窗体 width: 800, height: 400, webPreferences: { nodeIntegration: true, // 允许浏览器环境使用Node API enableRemoteModule: true, // 允许页面使用 remote } }) // 在当前窗口中加载指定界面让它显示具体的内容 mainWin.loadFile('index.html') mainWinId = mainWin.id mainWin.on('ready-to-show', () => { mainWin.show() // 在窗体完全加载完成后,显示窗体,避免白页现象 }) mainWin.on('close', () => { console.log('close') //mainWin = null }) } // 当 app 启动之后,执行窗口创建等操作 app.on('ready', createWindow) // 注册快捷键 app.on('ready', () => { const ret = globalShortcut.register('ctrl + q', () => { console.log('快捷键注册') }) if (!ret) { console.log('注册失败') } console.log(globalShortcut.isRegistered('ctrl + q')) console.log(ret) }) app.on('will-quit', () => { // 取消注册的快捷键 globalShortcut.unregister('ctrl + q') // 取消所有注册的快捷键 globalShortcut.registerAll() }) app.on('window-all-closed', () => { console.log('window-all-closed') app.quit() })
剪切板模块
index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title></title> </head> <body> <h2>剪切版</h2> <input type="text" placeholder="输入需要复制的内容"> <button>复制</button> <br><br> <input type="text" placeholder="将内容粘贴至此处"> <button>粘贴</button> <br><br> <button id='clipImg'>将图片拷贝至剪切版再粘贴至界面</button> <br><br> <script src="index.js"></script> </body> </html>
index.js
const { clipboard, nativeImage } = require('electron') window.addEventListener('DOMContentLoaded', () => { const aBtn = document.getElementsByTagName('button') const aInput = document.getElementsByTagName('input') const oBtn = document.getElementById('clipImg') let ret = null aBtn[0].addEventListener('click', () => { // 复制内容到剪切板 ret = clipboard.writeText(aInput[0].value) }) aBtn[1].addEventListener('click', () => { // 粘贴剪切板内的内容 aInput[1].value = clipboard.readText(ret) }) oBtn.addEventListener('click', () => { // 将图片放置于剪切板当中的时候要求图片类型属于 nativeImage 实例 const oImage = nativeImage.createFromPath('./msg.png') clipboard.writeImage(oImage) // 将剪切板中的图片做为 DOM 元素显示在界面上 const oImg = clipboard.readImage() const oImgDom = new Image() oImgDom.src = oImg.toDataURL() document.body.append(oImgDom) }) })
1
这篇关于Electron 主进程和渲染进程都可使用的模块的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享