跳到主要内容

在线/离线事件检测

概述

可以使用标准 HTML5 API 的一部分 navigator.onLine 属性在渲染器进程中实现在线和离线事件检测。

navigator.onLine 属性返回

  • 如果保证所有网络请求都将失败(例如,与网络断开连接时),则返回 false
  • 在所有其他情况下返回 true

由于许多情况都返回 true,因此您应谨慎对待出现误报的情况,因为我们不能总是假设 true 值表示 Electron 可以访问 Internet。例如,在计算机运行虚拟化软件且该软件的虚拟以太网适配器处于“始终连接”状态的情况下。因此,如果要确定 Electron 的 Internet 访问状态,则应开发其他方法进行此检查。

示例

从一个 HTML 文件 index.html 开始,此示例将演示如何使用 navigator.onLine API 构建连接状态指示器。

index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Hello World!</title>
<meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline';" />
</head>
<body>
<h1>Connection status: <strong id='status'></strong></h1>
<script src="renderer.js"></script>
</body>
</html>

为了改变 DOM,创建一个 renderer.js 文件,该文件将事件侦听器添加到 'online''offline' window 事件。事件处理程序会根据 navigator.onLine 的结果设置 <strong id='status'> 元素的内容。

renderer.js
const updateOnlineStatus = () => {
document.getElementById('status').innerHTML = navigator.onLine ? 'online' : 'offline'
}

window.addEventListener('online', updateOnlineStatus)
window.addEventListener('offline', updateOnlineStatus)

updateOnlineStatus()

最后,创建一个用于主进程的 main.js 文件,用于创建窗口。

main.js
const { app, BrowserWindow } = require('electron')

const createWindow = () => {
const onlineStatusWindow = new BrowserWindow({
width: 400,
height: 100
})

onlineStatusWindow.loadFile('index.html')
}

app.whenReady().then(() => {
createWindow()

app.on('activate', () => {
if (BrowserWindow.getAllWindows().length === 0) {
createWindow()
}
})
})

app.on('window-all-closed', () => {
if (process.platform !== 'darwin') {
app.quit()
}
})

启动 Electron 应用程序后,您应该会看到通知

Connection status

注意:如果需要将连接状态传递给主进程,请使用 IPC 渲染器 API。