app
控制应用程序的声明周期
/*main.js*/
const {app,BrowserWindow} = require('electron');
//保持对window 对象的全局引用
let win;
function createWindow(){
//创建浏览器窗口
// win = new BrowserWindow({width:800,height:600,frame:false,transparent:true});//no-frame
win = new BrowserWindow({width:800,height:600,transparent:true});
//加载应用的index.html
win.loadFile('index.html');
win.setMenu(null);
//打开开发者工具
win.webContents.openDevTools();
//当window被关闭,这个事件会被触发
win.on('closed',()=>{
win = null;
})
}
app.on('ready',createWindow);
app.on('window-all-closed',()=>{
if(process.platform !== 'darwin'){
app.quit();
}
});
app.on('active',()=>{
if(win === null){
createWindow();
}
});
app 相关常用事件
主要需弄清每种事件的触发时机即作用。
ready : Electron 完成初始化时触发。通常会使用ready事件代替will-finish-lauching事件。
window-all-closed :当所有窗口都被关闭时触发。若没监听此事件且所有窗口都关闭,默认行为是控制程序退出;但是若监听了此事件,则可控制程序是否退出。若用户按下Cmd+Q 或者 开发者调用了 app.quit(),Electron 会先关闭所有窗口,然后触发will-quit事件,但是window-all-closed事件不会触发。
before-quit :在应用程序开始关闭窗口之前触发。调用 event.preventDefault() 会阻止默认行为(终结应用程序)。注意:若程序退出是应为调用了autoUpdater.quitAndInstall(),则所有窗口都会发出 close 事件,然后before-quit事件并关闭所有窗口。注:在 win 系统中若是系统原因导致程序退出则不会触发此事件。
will-quit : 当所有窗口都已关闭且应用程序退出时触发。调用event.preventDefault()将终止默认行为。注:win 系统原因导致的程序退出不会触发该事件。
quit :在应用程序退出时发出。注:win 系统原因导致退出该事件不会触发。
browser-window-blur : 在browserWindow失去焦点时发出。
browser-window-focus :在browserWindow获得焦点时发出。
browser-window-created :在browserWindow创建时发出。
web-contents-created :在创建新的webContents时发出。
certificate-error :当对url的certificate证书验证失败的时候发出。如果需要信任这个证书,你需要阻止默认行为event.preventDefault()并且调用callback(true)。
select-client-certificate : 当一个客户证书被请求的时候发出。url指的是请求客户端认证的网页地址,调用callback时需要传入一个证书列表中的证书。 需要通过调用event.preventDefault()来防止应用自动使用第一个证书进行验证。
Login :当webContents要进行基本身份验证时触发。默认行为是取消所有的验证行为,如果需要重写这个行为,你需要用event.preventDefault()来阻止默认行为,并且使用callback(username, password)来验证。
gpu-process-crashed : 当gpu进程崩溃或被杀死时触发。
accessibility-support-changed : 当 Chrome 的辅助功能状态改变时触发。 当启用或禁用辅助技术时将触发此事件,例如屏幕阅读器 。 查看更多详情chromium.org/developers/design-documents/accessibility
app 相关常用方法
app.quit() : 尝试关闭所有窗口,将首先发出 before-quit 事件。若所有窗口都已成功关闭,则将发出 will-quit 事件,并默认情况下终止程序。此方法会确保先执行所有的 beforeUNload 和 unload 事件。可以在退出窗口之前的 beforeunload 事件处理程序中返回 false 取消退出。
app.exit() : 立即退出程序并返回 exitCode。所有窗口都将立即会被关闭(不会弹出询问提示),而且before-quit 和 will-quit 事件也不会被触发。
app.relaunch():从当前实例退出,重启实例。注意:此方法在执行时并不会退出当前的应用程序,需要在此方法后调用app.quit()或者app.exit()来让应用重启。
app.isReady() : 若app 已经完成初始化,则返回true。
app.focus() : 使应用的第一个可见窗口获取焦点。
app.getAppPath() :返回当前应用程序所在的目录。
app.getPath(name) : 返回与nam相关的特殊文件夹或者文件路径。当失败时抛出Error。
app.setPath(name,path) : 重写name 路径为path。name参数只能使用app.getPath定义过的 name。
app.getFileIcon() : 读取文件的关联图标。
app.getVersion() : 返回加载应用程序的版本号。
app.getName() : 返回应用程序名称。
app.setName() : 设置应用程序名。
app.getLocale() :返回当前程序的语言环境。
app.addRecentDocument(path) : 将path添加到最近打开的文件列表。
app.clearRecentDocuments() : 清空最近打开文件列表。
app.setAsDefaultProtocolClient(protocol [,ptath,args]) : 此方法将当前可执行文件设置为协议(也称为URI方案) 的默认处理程序。 它允许您将应用程序更深入地集成到操作系统中。 一旦注册成功, 所有your-protocol://格式的链接都会使用你的程序打开。 整个链接 (包括协议) 将作为参数传递给您的应用程序。
app.makeSingleInstance(callback):此方法使应用程序成为单个实例应用程序, 而不是允许应用程序的多个实例运行, 这将确保只有一个应用程序的实例正在运行, 其余的实例全部会被终止并退出。当执行第二个实例时, 第一个实例将使用callback (argv, workingDirectory)调用callback.