资讯专栏INFORMATION COLUMN

Electron 实例检测

ninefive / 2603人阅读

摘要:是第二个实例的命令行参数的数组是这个实例当前工作目录。回掉函数第二个实例的命令行参数数组第二个实例的工作目录返回上面是官方文档给出的解释,这个就是为了生成单个实例而存在的。

这个功能学名叫什么我也不太清楚,暂且就叫她实例检测吧。有时候我们想点击了快捷方式之后只打开一个应用程序,但是显示总是残酷的,electron默认的是完成打包之后每次点击快捷方式都会生成一个进程实例(除了mac),这个时候稳住不要慌,别人实现了我们肯定也能实现而且还很简单。

首先 我们需要了解Electron的基本知识, 点击看基础 。这里就不赘述了,然后我们就需要知道我们用Elenton中提供的API了。

接下来我们的主角 app.makeSingleInstance(callback) 就粉墨登场了

此方法使应用程序成为单个实例应用程序, 而不是允许应用程序的多个实例运行, 这将确保只有一个应用程序的实例正在运行, 其余的实例全部会被终止并退出。          当执行第二个实例时, 第一个实例将使用 callback (argv,workingDirectory) 调用 callback。 argv 是第二个实例的命令行参数的数组, workingDirectory 是这个实例当前工作目录。 通常, 应用程序会激活窗口并且取消最小化来响应。
  /*
    callback(): Function 回掉函数
  */
  app.makeSingleInstance(callback)
    argv String[] // 第二个实例的命令行参数数组
    workingDirectory String // 第二个实例的工作目录
   // 返回 Boolean.

上面是官方文档给出的解释,这个API就是为了生成单个实例而存在的。实际上更主要的用处是用来处理在命令行打开应用是的限制,其实在mac上通过图标打开尝试启动第二个实例的时候,系统会自动强制执行单个实例。并且发出 open-file 和 open-url 事件。但是当用户在命令行中启动应用程序时, 系统的单实例机制将被绕过, 所以我们要用这个方法来保证单实例。

本质来讲就是在创建electron实例窗口之前,去检查是否已经存在一个实例,如果有那么就在启动时激活主实例。废话少说上代码

const {app} = require("electron") // 引入主线程
  let mianInstance = null
  /**
  * 实例检测
  */
  const moreInstance = app.makeSingleInstance((commandline, workingDirectory) => {
    if(mainWindow) { // 如果存在执行以下
      // 判断主实例窗口是否最小化 如果是的话 恢复到之前的状态
      if (mainWindow.isMaximized()) mainWindow.restore()
      mainWindow.focus() // 主实例窗口focus
    }
  })
  // 判断是否存在主实例
  if (moreInstance) {
    // 离开当前的进程
    app.quit()
  }
  // 主进程准备完毕
  app.on("ready", () => {
    // 创建窗口的方法
  })
总结

其实这个方面还是很容易的,我们也可以发散一下思维,如果仅仅是检测有没有实例 是不是通过Node环境变量也可以实现呢? 这个是写文章的时候想到的,有空就试一试咯
(没有校验,有错误请直接指出来

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/96440.html

相关文章

  • electron打包可选择安装位置,可自动更新

    摘要:事件当发现一个可用更新的时候触发,更新包下载会自动开始。在上只有是有效的。方法列表对象有以下的方法设置检查更新的,并且初始化自动更新。这个一旦设置就无法更改。向服务端查询现在是否有可用的更新。在下载完成后,重启当前的应用并且安装更新。 Electron打包调参软件(windows版) ----------------------------------可选安装位置,可自动更新,手动更新...

    canger 评论0 收藏0
  • 利用 electron-builder 实现 electron app 的署名/打包/发布以及自动更

    摘要:笔者系贡献者之一是什么官方解释如下简单来说,就是一个可以将打包成安装器,以及可以为提供自动更新功能的全家桶。也是一个开源的也是利用了的来进行新版本的发布通知。而且因为是通过静态文件服务器实现的,所以大大减少了计算消耗。 笔者系 electron-builder 贡献者之一(#12) electron-builder 是什么 官方解释如下: A complete solution to ...

    banana_pi 评论0 收藏0
  • 基于Electron快速开发MacOS Menubar app

    摘要:基于开发主要涉及的技术其实就是的。此外也有人将这个做了简单的封装。这里要用到的是的事件文档在系统中,检测到事件,也就是未聚焦于窗口时,调用把窗口隐藏掉。用于中的,有个经验是将大小设置为。 基于electron开发MacOS Menubar app主要涉及的技术其实就是Electron的 Tray API。 此外也有人将这个API做了简单的封装:menubar(github) 。 其基本...

    Aldous 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<