使用 Electron 处理窗体崩溃和挂起
使用 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 支持, 谢谢.
相关推荐
zhujuyu 2019-12-04
游走的豚鼠君 2020-11-10
sanallen 2020-07-04
electronvolt 2020-07-04
sanallen 2020-06-14
moyigg 2020-06-09
疯狂老司机 2020-06-07
zhujuyu 2020-06-06
moyigg 2020-06-01
zhujuyu 2020-05-30
viewerlin 2020-05-29
zhujuyu 2020-05-28
yanchuncheng 2020-05-12
Trustport 2020-05-06
chenyijun 2020-05-05
electronvolt 2020-05-04
游走的豚鼠君 2020-05-01
electronvolt 2020-04-21