Electron 从基础到实战笔记 - Electron App对象及其事件

简介: Electron 从基础到实战笔记 - Electron App对象及其事件

Electron 从基础到实战笔记主进程.app对象(1) Electron App对象及其事件


1. app 对象概述

app 对象用于主进程中,它通过发出一些列事件来控制 应用程序的事件生命周期

import { app } from 'electron'; 
// ES 模块
// 或者使用 CommonJS模块,这个取决于你在 package.json 中的配置
const { app } = require('electron');

2. 由 app 对象发出的事件

2.1 app 事件表

事件名称 描述 场景 说明 返回值 特定平台可用 平台差异性
will-finish-launching 当应用程序完成基础的启动的时候被触发。 绝大部分情况下,你必须在ready事件句柄中处理所有事务。 通常会在这里为 open-file 和 open-url 设置监听器,并启动崩溃报告和自动更新。
  1. 在 Windows 和 Linux 中, will-finish-launching 事件与 ready 事件是相同的;
  2. 在 macOS 中,这个事件相当于 NSApplication 中的 applicationWillFinishLaunching 提示。
ready 当 Electron 完成初始化时,发出一次。 你也可以通过调用 app.isReady() 来检查该事件是否已被触发,以及通过 app.whenReady() 得到一个当Electron已初始化后fulfill 的 Promise。 在 macOS 上,如果通过通知中心启动应用程序,launchInfo 保存 NSUserNotification 的 userInfo 或 UNNotificationResponse 的信息。
window-all-closed 当所有的窗口都被关闭时触发。
  1. 如果你没有监听此事件并且所有窗口都关闭了,默认的行为是控制退出程序。但如果你监听了此事件,你可以控制是否退出程序。
  2. 如果用户按下了 Cmd + Q,或者开发者调用了 app.quit(),Electron 会首先关闭所有的窗口然后触发 will-quit 事件,在这种情况下 window-all-closed 事件不会被触发。
before-quit 在程序关闭窗口前发信号。
  1. 调用 event.preventDefault() 将阻止终止应用程序的默认行为。
  2. 如果由 autoUpdater.quitAndInstal() 退出应用程序 ,那么在所有窗口触发 close 之后 才会触发 before-quit 并关闭所有窗口。
event Event 在 Windows 系统中,如果应用程序因系统关机/重启或用户注销而关闭,那么这个事件不会被触发。
will-quit 当所有窗口被关闭后触发,同时应用程序将退出。
  1. 调用 event.preventDefault() 将阻止终止应用程序的默认行为。
  2. 关于 window-all-closed 和 will-quit 事件之间的差异, 请参见 window-all-closed 事件的说明。
event Event 在 Windows 系统中,如果应用程序因系统关机/重启或用户注销而关闭,那么这个事件不会被触发。
quit 在应用程序退出时发出。
  1. event Event
  2. exitCode Integer
在 Windows 系统中,如果应用程序因系统关机/重启或用户注销而关闭,那么这个事件不会被触发。
open-file 当用户想要在应用中打开一个文件时发出。 open-file 事件通常在应用已经打开,并且系统要再次使用该应用打开文件时发出。 open-file也会在一个文件被拖到 dock 并且还没有运行的时候发出。 请确认在应用启动的时候(甚至在 ready 事件发出前) 就对 open-file 事件进行监听。
  • 如果你想处理这个事件,你应该调用 event.preventDefault() 。
  • 在 Windows 系统中,你需要解析 process.argv (在主进程中) 来获取文件路径
macOS
open-url 当用户想要在应用中打开一个 URL 时发出。 你的应用程序的 Info. plist 文件必须在 CFBundleURLTypes 这个key中定义 url scheme, 并将 NSPrincipalClass 设置为 AtomApplication。
  1. 如果你想处理这个事件,你应该调用 event.preventDefault() 。
  2. 和 open-file 事件一样,请确保在你的应用程序启动前就注册好一个 open-url 事件的监听器,以在程序被用作一个链接的打开方式而启动时监听到这个事件。
  3. 如果你在触发 ready 事件后注册这个事件的监听器,你将无法捕获你的程序本来要打开的URL。
macOS
activate 当应用被激活时发出。 各种操作都可以触发此事件, 例如首次启动应用程序、尝试在应用程序已运行时或单击应用程序的坞站或任务栏图标时重新激活它。 macOS
did-become-active 当应用被激活时发出。 与 activate 事件的不同是应用,程序激活时都会触发 did-become-active ,而不仅仅在 Dock 图标被点击或应用程序被重新启动的时候。 macOS
continue-activity 当来自不同设备的活动想要在 Handoff 期间恢复时触发。
  1. 如果你想处理这个事件,你应该调用 event.preventDefault() 。

  2. 只有具有支持相应的活动类型并且相同的开发团队 ID 作为启动程序时,用户行为才会进行。
  3. 所支持活动类型已在应用的 Info.plist 中的 NSUserActivityTypes 里明确定义。
  1. event Event
  2. typestring-标识活动的字符串。 映射到 NSUserActivity. activityType。
  3. userInfo unknown - 包含另一个设备上activity存储的应用特定状态。
  4. details Object
    • webpageURL string (可选) - 如果可用,可识别另一设备上活动访问的网页的 URL 的字符串。
macOS
will-continue-activity 当来自不同设备的活动想要在 Handoff 期间之前恢复时触发。 如果你想处理这个事件,你应该调用 event.preventDefault() 。
  1. event Event
  2. typestring-标识活动的字符串。 映射到 NSUserActivity. activityType。
macOS
continue-activity-error 当来自不同设备的活动在 Handoff 期间恢复失败时触发。
  1. event Event
  2. typestring-标识活动的字符串。 映射到 NSUserActivity. activityType。
  3. error string - 详细的错误信息
macOS
activity-was-continued 当来自不同设备的活动通过 Handoff 成功恢复后触发。
  1. event Event
  2. typestring-标识活动的字符串。 映射到 NSUserActivity. activityType。
  3. userInfo unknown - 包含activity存储的应用特定状态。
macOS
update-activity-state 当 Handoff 通过另一个设备恢复时触发。 如果需要更新要传输的状态,你应该立即调用 event.preventDefault(), 构造新的 userInfo 字典,并及时调用 app.updateCurrentActiviy()。 否则,操作会失败,并且触发 continue-activity-error
  1. event Event
  2. typestring-标识活动的字符串。 映射到 NSUserActivity. activityType。
  3. userInfo unknown - 包含activity存储的应用特定状态。
macOS
new-window-for-tab 当用户点击原生的macOS新标签按钮时触发。 只有在当前 BrowserWindow 有 tabbingIdentifier 时,新建tab按钮才可见。 event Event macOS
browser-window-blur 当一个 browserWindow 失去焦点时触发。
  1. event Event
  2. window BrowserWindow
browser-window-focus 当一个 browserWindow 获得焦点时触发。
  1. event Event
  2. window BrowserWindow
browser-window-created 当一个新的 browserWindow 被创建时触发。
  1. event Event
  2. window BrowserWindow
web-contents-created 当一个新的 webContents 被创建时触发。
  1. event Event
  2. webContents WebContents
certificate-error 当对 url 的 certificate 证书验证失败的时候发出。 如果需要信任这个证书,你需要阻止默认行为 event.preventDefault() 并且调用 callback(true)。
  1. event Event
  2. webContents WebContents
  3. url string
  4. error string - 错误码
  5. certificate 证书
  6. callback Function
    • isTrusted boolean - 是否将证书视为受信任。
      • isMainFrame boolean
    select-client-certificate 当一个客户证书被请求的时候发出。
    1. url 指的是请求客户端认证的网页地址,调用 callback 时需要传入一个证书列表中的证书。

    2. 需要通过调用 event.preventDefault() 来防止应用自动使用第一个证书进行验证。
    1. event Event
    2. webContents WebContents
    3. url URL
    4. certificateList 证书[]
    5. callback Function
      • certificate 证书 (可选)
      login 当 webContents 要进行基本身份验证时触发。 默认行为是取消所有身份验证。
      1. 默认行为是取消所有的验证行为,如果需要重写这个行为,你需要用 event.preventDefault() 来阻止默认行为,并且使用 callback(username, password) 来验证。
      2. 当 callback 在缺少用户名和密码的时候被调用,身份验证请求将被取消,同时将返回身份验证错误到页面。
      1. event Event
      2. webContents WebContents
      3. authenticationResponseDetails Object
        • url URL
      4. authInfo Object
        • isProxy boolean
        • scheme string
        • host string
        • port Integer
        • realm string
      5. callback Function
        • username string (可选)
        • password string (可选)
      gpu-info-update 每当有 GPU 信息更新时触发。
      render-process-gone 渲染器进程意外消失时触发。 这种情况通常因为进程崩溃或被杀死。
      child-process-gone 子进程意外消失时触发。 这种情况通常因为进程崩溃或被杀死。 子进程不包括渲染器进程。
      accessibility-support-changed 当 Chrome 的辅助功能状态改变时触发。 当启用或禁用辅助技术时将触发此事件,例如屏幕阅读器 。 参考:https://www.chromium.org/developers/design-documents/accessibility
      1. event Event
      2. accessibilitySupportEnabled boolean - 当开启了 Chrome 辅助功能支持为 true,否则为 false 。
      macOS Windows
      session-created 当 Electron创建了一个新的 session后被触发 session Session
      second-instance 当第二个实例被执行并且调用 app.requestSingleInstanceLock() 时,这个事件将在你的应用程序的首个实例中触发。 argv 是第二个实例的命令行参数的数组, workingDirectory 是这个实例当前工作目录。 通常, 应用程序会激活窗口并且取消最小化来响应。
      1. 如果第二个实例是由不同于第一个实例的用户启动的。 argv 数组不包含参数。
      2. 保证在 app 的 ready 事件发出后发出此事件。
      3. 额外的命令行参数可能是被 Chromium 添加的,例如 --original-process-start-time。
      目录
      相关文章
      |
      2月前
      |
      开发框架 移动开发 前端开发
      Uni-App常用事件
      Uni-App常用事件
      35 2
      |
      1月前
      |
      开发框架 移动开发 JavaScript
      SpringCloud微服务实战——搭建企业级开发框架(四十六):【移动开发】整合uni-app搭建移动端快速开发框架-环境搭建
      正如优秀的软件设计一样,uni-app把一些移动端常用的功能做成了独立的服务或者插件,我们在使用的时候只需要选择使用即可。但是在使用这些服务或者插件时一定要区分其提供的各种服务和插件的使用场景,例如其提供的【uni-starter快速开发项目模版】几乎集成了移动端所需的所有基础功能,使用非常方便,但是其许可协议只允许对接其uniCloud的JS开发服务端,不允许对接自己的php、java等其他后台系统。
      141 2
      |
      1月前
      uni-app 67聊天类封装(四)-创建销毁聊天对象
      uni-app 67聊天类封装(四)-创建销毁聊天对象
      19 4
      |
      2月前
      uni-app只执行一次事件
      uni-app只执行一次事件
      43 3
      |
      2月前
      |
      算法 Java Android开发
      安卓逆向 -- 实战某峰窝APP(静态分析)
      安卓逆向 -- 实战某峰窝APP(静态分析)
      26 0
      |
      2月前
      |
      网络协议 算法 Android开发
      安卓逆向 -- 实战某峰窝APP(动态分析)
      安卓逆向 -- 实战某峰窝APP(动态分析)
      31 4
      |
      Web App开发 前端开发 iOS开发
      开发 Electron app 必知的 4 个 tips
      本文讲的是开发 Electron app 必知的 4 个 tips,Electron ,是包括 Avocode 在内的众多 app 采用的技术,能让你快速实现并运行一个跨平台桌面应用。有些问题不注意的话,你的 app 很快就会掉到“坑”里。无法从其它 app 中脱颖而出。
      3409 0
      |
      1月前
      |
      API 数据安全/隐私保护 iOS开发
      利用uni-app 开发的iOS app 发布到App Store全流程
      利用uni-app 开发的iOS app 发布到App Store全流程
      85 3
      |
      1月前
      |
      Android开发 开发者 UED
      个人开发 App 成功上架手机应用市场的关键步骤
      个人开发 App 成功上架手机应用市场的关键步骤
      |
      1月前
      |
      开发工具 数据安全/隐私保护 Android开发
      【教程】APP 开发后如何上架?
      【教程】APP 开发后如何上架?