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


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

    上一节:《暂无 | 下一节:《暂无

    jcLee95 的个人博客
    CSDN 主页https://blog.csdn.net/qq_28550263?spm=1001.2101.3001.5343
    本文地址https://blog.csdn.net/qq_28550263/article/details/127879402

    目 录

    1. app 对象概述

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

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

    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 EventmacOS
    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。
      6. 相关阅读:
        矩阵的c++实现(2)
        【游戏引擎Easy2D】 学C++还不会文字旋转?如此炫酷的技巧来这学
        C++——vector
        Java -- 每日一问:谈谈你的GC调优思路?
        iOS播放MP3视频流AudioContext解码报错null问题处理
        云原生微服务 Spring Cloud Hystrix 降级、熔断实战应用
        C和C++的区别(4) C++支持函数重载
        Activiti学习(一)
        使用GO代码实现 百度联盟媒体平台的DSA签名
        精选112个炫酷大数据可视化大屏模板(含源码),拿走即用
      7. 原文地址:https://blog.csdn.net/qq_28550263/article/details/127879402