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。
      目录
      相关文章
      |
      17天前
      |
      JavaScript 小程序 开发者
      uni-app开发实战:利用Vue混入(mixin)实现微信小程序全局分享功能,一键发送给朋友、分享到朋友圈、复制链接
      uni-app开发实战:利用Vue混入(mixin)实现微信小程序全局分享功能,一键发送给朋友、分享到朋友圈、复制链接
      194 0
      |
      2月前
      |
      Web App开发 Java 视频直播
      FFmpeg开发笔记(四十九)助您在毕业设计中脱颖而出的几个流行APP
      对于软件、计算机等专业的毕业生,毕业设计需实现实用软件或APP。新颖的设计应结合最新技术,如5G时代的音视频技术。示例包括: 1. **短视频分享APP**: 集成FFmpeg实现视频剪辑功能,如添加字幕、转场特效等。 2. **电商购物APP**: 具备直播带货功能,使用RTMP/SRT协议支持流畅直播体验。 3. **同城生活APP**: 引入WebRTC技术实现可信的视频通话功能。这些应用不仅实用,还能展示开发者紧跟技术潮流的能力。
      79 4
      FFmpeg开发笔记(四十九)助您在毕业设计中脱颖而出的几个流行APP
      |
      3月前
      |
      Web App开发 Android开发
      FFmpeg开发笔记(四十六)利用SRT协议构建手机APP的直播Demo
      实时数据传输在互联网中至关重要,不仅支持即时通讯如QQ、微信的文字与图片传输,还包括音视频通信。一对一通信常采用WebRTC技术,如《Android Studio开发实战》中的App集成示例;而一对多的在线直播则需部署独立的流媒体服务器,使用如SRT等协议。SRT因其优越的直播质量正逐渐成为主流。本文档概述了SRT协议的使用,包括通过OBS Studio和SRT Streamer进行SRT直播推流的方法,并展示了推流与拉流的成功实例。更多细节参见《FFmpeg开发实战》一书。
      54 1
      FFmpeg开发笔记(四十六)利用SRT协议构建手机APP的直播Demo
      |
      3月前
      |
      Web App开发 5G Linux
      FFmpeg开发笔记(四十四)毕业设计可做的几个拉满颜值的音视频APP
      一年一度的毕业季来临,计算机专业的毕业设计尤为重要,不仅关乎学业评价还积累实战经验。选择紧跟5G技术趋势的音视频APP作为课题极具吸引力。这里推荐三类应用:一是融合WebRTC技术实现视频通话的即时通信APP;二是具备在线直播功能的短视频分享平台,涉及RTMP/SRT等直播技术;三是具有自定义动画特效及卡拉OK歌词字幕功能的视频剪辑工具。这些项目不仅技术含量高,也符合市场需求,是毕业设计的理想选择。
      73 6
      FFmpeg开发笔记(四十四)毕业设计可做的几个拉满颜值的音视频APP
      |
      3月前
      |
      编解码 Java Android开发
      FFmpeg开发笔记(四十五)使用SRT Streamer开启APP直播推流
      ​SRT Streamer是一个安卓手机端的开源SRT协议直播推流框架,可用于RTMP直播和SRT直播。SRT Streamer支持的视频编码包括H264、H265等等,支持的音频编码包括AAC、OPUS等等,可谓功能强大的APP直播框架。另一款APP直播框架RTMP Streamer支持RTMP直播和RTSP直播,不支持SRT协议的直播。而本文讲述的SRT Streamer支持RTMP直播和SRT直播,不支持RTSP协议的直播。有关RTMP Streamer的说明参见之前的文章《使用RTMP Streamer开启APP直播推流》,下面介绍如何使用SRT Streamer开启手机直播。
      66 4
      FFmpeg开发笔记(四十五)使用SRT Streamer开启APP直播推流
      |
      3月前
      |
      消息中间件 Java
      【实战揭秘】如何运用Java发布-订阅模式,打造高效响应式天气预报App?
      【8月更文挑战第30天】发布-订阅模式是一种消息通信模型,发送者将消息发布到公共队列,接收者自行订阅并处理。此模式降低了对象间的耦合度,使系统更灵活、可扩展。例如,在天气预报应用中,`WeatherEventPublisher` 类作为发布者收集天气数据并通知订阅者(如 `TemperatureDisplay` 和 `HumidityDisplay`),实现组件间的解耦和动态更新。这种方式适用于事件驱动的应用,提高了系统的扩展性和可维护性。
      61 2
      |
      4月前
      |
      监控 Android开发 开发者
      Android经典面试题之实战经验分享:如何简单实现App的前后台监听判断
      本文介绍在Android中判断应用前后台状态的两种方法:`ActivityLifecycleCallbacks`和`ProcessLifecycleOwner`。前者提供精细控制,适用于需针对每个Activity处理的场景;后者简化前后台检测,适用于多数应用。两者各有优劣:`ActivityLifecycleCallbacks`更精确但复杂度高;`ProcessLifecycleOwner`更简便但可能在极端场景下略有差异。根据应用需求选择合适方法。
      38 2
      |
      3月前
      |
      搜索推荐 Java API
      Electron V8排查问题之分析 node-memwatch 提供的堆内存差异信息来定位内存泄漏对象如何解决
      Electron V8排查问题之分析 node-memwatch 提供的堆内存差异信息来定位内存泄漏对象如何解决
      88 0
      |
      17天前
      |
      JSON 小程序 JavaScript
      uni-app开发微信小程序的报错[渲染层错误]排查及解决
      uni-app开发微信小程序的报错[渲染层错误]排查及解决
      261 7
      |
      17天前
      |
      小程序 JavaScript 前端开发
      uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
      uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
      363 1