var electron = require('electron')
var app = electron.app //引用app
var BrowserWindow = electron.BrowserWindow //窗口引用
var mainWindow = null //声明要打开的主窗口
app.on('ready',()=>{
mainWindow = new BrowserWindow({
width:800,
height:800,
webPreferences:{nodeIntegration:true} //设置此项以使用nodejs
})
mainWindow.loadFile('index.html') //加载html页面
mainWindow.on('close',()=>{
mainWindow = null //监听窗口关闭,把mainWindow设置为null,防止占用内存
})
})
index.html --- 渲染进程
<body>
<button id="btn">小姐姐请进来button>
<div id="mybaby">div>
<script src="render/index.js">script>
body>
//--- render/index.js
var fs = require('fs')
window.onload = function(){
var btn = this.document.querySelector('#btn')
var mybaby = this.document.querySelector('#mybaby')
btn.onclick = function(){
fs.readFile('xiaojiejie,txt',(err,data)=>{
mybaby.innerHTML = data
})
}
}
const btn = this.document.querySelector('#btn')
const BrowserWindow = require('electron').remote.BrowserWindow
window.onload = function(){
btn.onclick = ()=>{
newWin = new BrowserWindow({
width:500,
height:500,
})
newWin.loadFile('yellow.html')
newWin.on('close',()=>{
newWin = null
})
}
}
//1. 通过模板创建菜单
const {Menu, BrowserWindow} = require('electron')
var template = [
{
label:'莲花坞',
submenu:[
{
label:'师姐',
accelerator:'ctrl+n', //3. 设置快捷键
//2. 给菜单中的子项绑定点击事件
click:()=>{
var win = new BrowserWindow({
width:500,
height:500,
webPreferences:{nodeIntegration:true}
})
win.loadFile('yellow.html')
win.on('closed',()=>{
win = null;
})
}
},
{label:'师娘'}
]
},
{
label:'夷陵老祖',
submenu:[
{label:'魏无羡'},
{label:'小苹果'}
]
}
]
var m = Menu.buildFromTemplate(template)
Menu.setApplicationMenu(m)
const {remote} = require('electron')
//因为在渲染进程中使用主进程的变量,所以需要remote
var rightTemplate = [
{label:'复制',accelerator:'ctrl+c'}, //设置快捷键
{label:'黏贴',accelerator:'ctrl+v'}
]
var m = remote.Menu.buildFromTemplate(rightTemplate) //建立菜单
//绑定右击事件
window.addEventListener('contextmenu',function(e){
e.preventDefault();
m.popup({window:remote.getCurrentWindow()}) //调出菜单
})
<h1>
<a id="aHref" href="http://www.baidu.com">打开百度a>
<script src="render/demo3.js">script>
h1>
var { shell } = require('electron')
var aHref = document.querySelector('#aHref')
aHref.onclick = function(e){
e.preventDefault(); //阻止默认行为 --- 不要在当前窗口打开
var href = this.getAttribute('href') //获取属性的值
shell.openExternal(href) //浏览器中打开
}
<button id="mybtn">打开子窗口button>
<script src="render/demo3.js">script>
-----main.js------
//6. BrowserView 嵌入网页 (在主线程中设置)
var BrowserView = electron.BrowserView
var view = new BrowserView()
mainWindow.setBrowserView(view) //在窗口中嵌入
view.setBounds({x:0,y:120,width:1000,height:680}) //设置位置和大小
view.webContents.loadURL('https://www.jianshu.com/u/02cd0bc8c45e')
//7. 打开子窗口 window.open子窗口 BrowserWindow打开一个窗口
//(在渲染进程的js中设置)
------demo3.js--------
//点击打开子窗口
var mybtn = document.querySelector('#mybtn')
mybtn.onclick = function(){
window.open('https://mp.csdn.net/console/article') //可以直接使用,不需要引入什么
}
<h1>
<a id="aHref" href="http://www.baidu.com">打开百度a>
h1>
<button id="mybtn">打开子窗口button>
<div id="mytext">div>
<script src="render/demo3.js">script>
--------- render/demo3.js -------------
//点击打开子窗口
var mybtn = document.querySelector('#mybtn')
mybtn.onclick = function(){
window.open('./popup_page.html') //可以直接使用,不需要引入什么
}
<body>
<h2>我是弹出子窗口h2>
<button id="popbtn">向父窗口传递信息button>
body>
<script>
var popbtn = this.document.querySelector('#popbtn')
popbtn.onclick = function(e){
alert(111)
window.opener.postMessage('我是子窗口传递过来的信息') //默认传递所有父窗口,可以指定具体父窗口
}
script>
--------- render/demo3.js -------------
window.addEventListener('message',(msg)=>{ //msg是子窗口传递过来的对象
let mytext = document.querySelector('#mytext')
console.log(msg);
mytext.innerHTML = JSON.stringify(msg.data) //msg是一个对象,需要转换成字符串
})
<body>
<button id="openBtn">打开图片button>
<button id="saveBtn">保存文件button>
<button id="messageBtn">弹出对话框button>
<img id="images" style="width: 100%;">
body>
//1 文件选择对话框
const {dialog} = require('electron').remote //因为在渲染进程中引入dialog,需要remote
var openBtn = document.querySelector('#openBtn')
openBtn.onclick = function(){
dialog.showOpenDialog({
title:'请选择你喜欢的图片', //窗口标题
defaultPath:'1.jpg', //指定默认路径
filters:[{name:'img',extensions:['jpg','png']}], //文件选择过滤器
buttonLabel:'请选择图片~' //设置打开按钮
}).then(result => {
console.log(result);
let image = document.getElementById('images')
image.setAttribute('src',result.filePaths[0]) //选择的第一个
}).catch(error => {
console.log(error);
})
}
//2 文件保存对话框
var saveBtn = document.querySelector('#saveBtn')
saveBtn.onclick = function(){
dialog.showSaveDialog({
title:'保存文件'
}).then(result => {
console.log(result)
fs.writeFileSync(result.filePath,'你好啊,singxiao') //保存文件,并在文件中写入
}).catch(err => {
console.log(err);
})
}
//3 消息对话框
var messageBtn = document.querySelector('#messageBtn')
messageBtn.onclick = function(){
dialog.showMessageBox({
type:'warning',
title:'去不去由你',
message:'胖大星我们去抓水母吧',
buttons:['一起去','不去了'] //返回下标来判断选择
}).then(res => {
console.log(res);
})
}
<body>
<h2>Singxiao 断网提醒测试h2>
body>
<script>
//1 online offline监听两个事件
window.addEventListener('online',function(){
alert('网络修复啦,我们继续!')
})
window.addEventListener('offline',function(){
alert('网络情况不佳,我要躺躺~')
})
script>
点击按钮在屏幕底部弹出消息框,包含标题和内容。
<body>
<button id="notifyBtn">通知消息button>
body>
<script>
var notifyBtn = document.querySelector('#notifyBtn')
var option = {
title:'小二,来订单了,出来接客',
body:'把你的心我的心串一串,串一株幸运草'
}
notifyBtn.onclick = function(){
new window.Notification(option.title,option)
}
script>
app.on('ready',()=>{
...
// 8. 注册全局快捷键
globalShotcut.register('ctrl+e',()=>{
//快捷键触发的事情 --- eg:载入远程url
mainWindow.loadURL('http://www.baidu.com')
})
//globalShotcut.isRegistered(快捷键) 判断快捷键是否注册成功,返回一个boolean值
let isRegister = globalShotcut.isRegistered('ctrl+e')?'Refister Success':'Refister fail'
console.log('------------>'+isRegister);
...
})
//将要退出应用前,注销快捷键,否则可能影响其他页面
app.on('will-quit',function(){
//注销全局快捷键
globalShotcut.unregister('ctrl+e') //取消指定快捷键
globalShotcut.unregisterAll() //取消所有快捷键
})
<body>
<div>
激活码:<span id="code">Singxiao1005span>
<button id="btn">复制激活码button>
div>
body>
<script>
const {clipboard} = require('electron') //渲染进程可直接使用
const code = document.querySelector('#code')
const btn = document.querySelector('#btn')
btn.onclick = function(){
//clipboard 不仅有复制文字的方法,还有其他可以在api中学习
clipboard.writeText(code.innerHTML) //复制到剪贴板
alert('复制成功')
}
script>