使用 Electron 處理窗體崩潰和掛起

使用 Electron 處理窗體崩潰和掛起

此係列文章的應用示例已發佈於 GitHub: electron-api-demos-Zh_CN. 能夠 Clone 或下載後運行查看. 歡迎 Star .html

BrowserWindow 模塊將在渲染器進程崩潰或掛起時發出事件. 您能夠監聽這些事件, 並給用戶從新加載, 等待或關閉該窗口的機會.git

在瀏覽器中打開 完整的 API 文檔 .github

進程崩潰後重載窗體

支持: Win, macOS, Linux | 進程: Mainweb

在這個示例中咱們建立一個新窗口 (經過 remote 模塊) 並提供了一個使用 process.crash() 方法強制崩潰的連接.windows

當前窗體正在監聽崩潰事件, 當此事件發生時, 它提供用戶兩個選項: 從新加載或關閉.api

渲染器進程瀏覽器

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 | 進程: Mainelectron

在這個示例中咱們建立一個新窗口 (經過 remote 模塊) 並提供了一個使用 process.hang() 方法強制掛起進程的連接.ui

當前窗體正在監聽進程是否真正無響應 (這可能須要長達30秒). 當此事件發生時, 它提供用戶兩個選項: 從新加載或關閉.spa

渲染器進程

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 支持, 謝謝.

相關文章
相關標籤/搜索