资讯专栏INFORMATION COLUMN

使用 Electron 处理窗体崩溃和挂起

Kyxy / 2725人阅读

摘要:使用处理窗体崩溃和挂起此系列文章的应用示例已发布于可以或下载后运行查看欢迎模块将在渲染器进程崩溃或挂起时发出事件您可以监听这些事件并给用户重新加载等待或关闭该窗口的机会在浏览器中打开完整的文档进程崩溃后重载窗体支持进程在这个示例中我们

使用 Electron 处理窗体崩溃和挂起

此系列文章的应用示例已发布于 GitHub: electron-api-demos-Zh_CN. 可以 Clone 或下载后运行查看. 欢迎 Star .

BrowserWindow 模块将在渲染器进程崩溃或挂起时发出事件. 您可以监听这些事件, 并给用户重新加载, 等待或关闭该窗口的机会.

在浏览器中打开 完整的 API 文档 .

进程崩溃后重载窗体

支持: Win, macOS, Linux | 进程: Main

在这个示例中我们创建一个新窗口 (通过 remote 模块) 并提供了一个使用 process.crash() 方法强制崩溃的链接.

当前窗体正在监听崩溃事件, 当此事件发生时, 它提供用户两个选项: 重新加载或关闭.

渲染器进程

const BrowserWindow = require("electron").remote.BrowserWindow
const dialog = require("electron").remote.dialog

const path = require("path")

const processCrashBtn = document.getElementById("process-crash")

processCrashBtn.addEventListener("click", function (event) {
  const crashWinPath = path.join("file://", __dirname, "../../sections/windows/process-crash.html")
  let win = new BrowserWindow({ width: 400, height: 320 })

  win.webContents.on("crashed", function () {
    const options = {
      type: "info",
      title: "渲染器进程崩溃",
      message: "这个进程已经崩溃.",
      buttons: ["重载", "关闭"]
    }
    dialog.showMessageBox(options, function (index) {
      if (index === 0) win.reload()
      else win.close()
    })
  })

  win.on("close", function () { win = null })
  win.loadURL(crashWinPath)
  win.show()
})
进程挂起后重载窗体

支持: Win, macOS, Linux | 进程: Main

在这个示例中我们创建一个新窗口 (通过 remote 模块) 并提供了一个使用 process.hang() 方法强制挂起进程的链接.

当前窗体正在监听进程是否真正无响应 (这可能需要长达30秒). 当此事件发生时, 它提供用户两个选项: 重新加载或关闭.

渲染器进程

const BrowserWindow = require("electron").remote.BrowserWindow
const dialog = require("electron").remote.dialog

const path = require("path")

const processHangBtn = document.getElementById("process-hang")

processHangBtn.addEventListener("click", function (event) {
  const hangWinPath = path.join("file://", __dirname, "../../sections/windows/process-hang.html")
  let win = new BrowserWindow({ width: 400, height: 320 })

  win.on("unresponsive", function () {
    const options = {
      type: "info",
      title: "渲染器进程挂起",
      message: "这个进程已经被挂起.",
      buttons: ["重载", "关闭"]
    }
    dialog.showMessageBox(options, function (index) {
      if (index === 0) win.reload()
      else win.close()
    })
  })

  win.on("close", function () { win = null })
  win.loadURL(hangWinPath)
  win.show()
})
高级技巧

等待进程再次响应.

在进程挂起的的情况下, 第三个选择是等待并查看问题是否解决, 允许进程再次响应. 为此, 请使用 BrowserWindow 的 "responsive" 事件, 如下所示:

win.on("responsive", function () {
  // 当窗口再次响应时做些什么
})

如果这边文章对您有帮助, 感谢 下方点赞 或 Star GitHub: electron-api-demos-Zh_CN 支持, 谢谢.

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

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

相关文章

  • electron程序保护措施(崩溃监控,开机自启,托盘关闭)

    摘要:当设置了参数时,将作为命令行参数传递。托盘关闭向和微信一样,有的时候我们并不想让用户通过点关闭按钮的时候就关闭程序,而是把程序最小化到托盘,在托盘上做真正的退出操作。首先要监听窗口的关闭事件,阻止用户关闭操作的默认行为。 showImg(https://segmentfault.com/img/remote/1460000016933565?w=960&h=640); 在某种情况下,我...

    2i18ns 评论0 收藏0
  • 使用webpack + electron + reactJs开发windows桌面应用

    摘要:在开发项目时,可以先用网页的形式开发项目,等到网页项目部分差不多完成后,再注入中,开发网页项目部分和窗体部分的交互在中使用后,将不会打包有关的代码 electron是一两年前挺火的一个框架本质上是一个浏览器,但是集成了很多windows系统的功能,让前端开发也可以直接操作windows的窗体,做成一个实打实的桌面软件 团队主要的技术栈是react,所以考虑用react开发,方便维护。 ...

    khlbat 评论0 收藏0
  • 使用 Electron 创建和管理窗体

    摘要:使用创建和管理窗体此系列文章的应用示例已发布于可以或下载后运行查看欢迎中的模块允许您创建新的浏览器窗口或管理现有的浏览器窗口每个浏览器窗口都是一个单独的进程称为渲染器进程这个进程像控制应用程序生命周期的主进程一样,可以完全访问查看完整 使用 Electron 创建和管理窗体 此系列文章的应用示例已发布于 GitHub: electron-api-demos-Zh_CN. 可以 Clon...

    Brenner 评论0 收藏0
  • electron+vue制作桌面应用--自定义标题栏

    摘要:会默认显示边框和标题栏,如下图我们来看一下如何自定义一个更加有意思的标题栏,例如网易云音乐这种首先我们要把默认的标题栏删掉,找到主进程中创建窗体部分,时添加参数即可这样会把标题栏和边框一并隐藏然后我们开始制作自己的标题栏创建组件这里 electron会默认显示边框和标题栏,如下图 showImg(https://segmentfault.com/img/bVXwA5?w=412&h=6...

    roundstones 评论0 收藏0
  • electron+vue制作桌面应用--自定义标题栏

    摘要:会默认显示边框和标题栏,如下图我们来看一下如何自定义一个更加有意思的标题栏,例如网易云音乐这种首先我们要把默认的标题栏删掉,找到主进程中创建窗体部分,时添加参数即可这样会把标题栏和边框一并隐藏然后我们开始制作自己的标题栏创建组件这里 electron会默认显示边框和标题栏,如下图 showImg(https://segmentfault.com/img/bVXwA5?w=412&h=6...

    用户83 评论0 收藏0

发表评论

0条评论

Kyxy

|高级讲师

TA的文章

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