|
@@ -21,98 +21,69 @@ status of Electron, you should develop additional means for this check.
|
|
|
|
|
|
## Example
|
|
|
|
|
|
-### Event detection in the Renderer process
|
|
|
-
|
|
|
-Starting with a working application from the
|
|
|
-[Quick Start Guide](quick-start.md), update the `main.js` file
|
|
|
-with the following lines:
|
|
|
-
|
|
|
-```javascript
|
|
|
-const { app, BrowserWindow } = require('electron')
|
|
|
-
|
|
|
-let onlineStatusWindow
|
|
|
-
|
|
|
-app.whenReady().then(() => {
|
|
|
- onlineStatusWindow = new BrowserWindow({ width: 0, height: 0, show: false })
|
|
|
- onlineStatusWindow.loadURL(`file://${__dirname}/index.html`)
|
|
|
-})
|
|
|
-```
|
|
|
-
|
|
|
-in the `index.html` file, add the following line before the
|
|
|
-closing `</body>` tag:
|
|
|
-
|
|
|
-```html
|
|
|
-<script src="renderer.js"></script>
|
|
|
+Starting with an HTML file `index.html`, this example will demonstrate how the `navigator.onLine` API can be used to build a connection status indicator.
|
|
|
+
|
|
|
+```html title="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>
|
|
|
```
|
|
|
|
|
|
-and add the `renderer.js` file:
|
|
|
+In order to mutate the DOM, create a `renderer.js` file that adds event listeners to the `'online'` and `'offline'` `window` events. The event handler sets the content of the `<strong id='status'>` element depending on the result of `navigator.onLine`.
|
|
|
|
|
|
-```javascript fiddle='docs/fiddles/features/online-detection/renderer'
|
|
|
-const alertOnlineStatus = () => { window.alert(navigator.onLine ? 'online' : 'offline') }
|
|
|
+```js title='renderer.js'
|
|
|
+function updateOnlineStatus () {
|
|
|
+ document.getElementById('status').innerHTML = navigator.onLine ? 'online' : 'offline'
|
|
|
+}
|
|
|
|
|
|
-window.addEventListener('online', alertOnlineStatus)
|
|
|
-window.addEventListener('offline', alertOnlineStatus)
|
|
|
+window.addEventListener('online', updateOnlineStatus)
|
|
|
+window.addEventListener('offline', updateOnlineStatus)
|
|
|
|
|
|
-alertOnlineStatus()
|
|
|
+updateOnlineStatus()
|
|
|
```
|
|
|
|
|
|
-After launching the Electron application, you should see the notification:
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-### Event detection in the Main process
|
|
|
+Finally, create a `main.js` file for main process that creates the window.
|
|
|
|
|
|
-There may be situations when you want to respond to online/offline events in
|
|
|
-the Main process as well. The Main process, however, does not have a
|
|
|
-`navigator` object and cannot detect these events directly. In this case, you
|
|
|
-need to forward the events to the Main process using Electron's inter-process
|
|
|
-communication (IPC) utilities.
|
|
|
+```js title='main.js'
|
|
|
+const { app, BrowserWindow } = require('electron')
|
|
|
|
|
|
-Starting with a working application from the
|
|
|
-[Quick Start Guide](quick-start.md), update the `main.js` file
|
|
|
-with the following lines:
|
|
|
+function createWindow () {
|
|
|
+ const onlineStatusWindow = new BrowserWindow({
|
|
|
+ width: 400,
|
|
|
+ height: 100
|
|
|
+ })
|
|
|
|
|
|
-```javascript
|
|
|
-const { app, BrowserWindow, ipcMain } = require('electron')
|
|
|
-let onlineStatusWindow
|
|
|
+ onlineStatusWindow.loadFile('index.html')
|
|
|
+}
|
|
|
|
|
|
app.whenReady().then(() => {
|
|
|
- onlineStatusWindow = new BrowserWindow({ width: 0, height: 0, show: false, webPreferences: { nodeIntegration: true } })
|
|
|
- onlineStatusWindow.loadURL(`file://${__dirname}/index.html`)
|
|
|
-})
|
|
|
+ createWindow()
|
|
|
|
|
|
-ipcMain.on('online-status-changed', (event, status) => {
|
|
|
- console.log(status)
|
|
|
+ app.on('activate', () => {
|
|
|
+ if (BrowserWindow.getAllWindows().length === 0) {
|
|
|
+ createWindow()
|
|
|
+ }
|
|
|
+ })
|
|
|
})
|
|
|
-```
|
|
|
-
|
|
|
-in the `index.html` file, add the following line before the
|
|
|
-closing `</body>` tag:
|
|
|
-
|
|
|
-```html
|
|
|
-<script src="renderer.js"></script>
|
|
|
-```
|
|
|
-
|
|
|
-and add the `renderer.js` file:
|
|
|
-
|
|
|
-```javascript fiddle='docs/fiddles/features/online-detection/main'
|
|
|
-const { ipcRenderer } = require('electron')
|
|
|
-const updateOnlineStatus = () => { ipcRenderer.send('online-status-changed', navigator.onLine ? 'online' : 'offline') }
|
|
|
|
|
|
-window.addEventListener('online', updateOnlineStatus)
|
|
|
-window.addEventListener('offline', updateOnlineStatus)
|
|
|
-
|
|
|
-updateOnlineStatus()
|
|
|
+app.on('window-all-closed', () => {
|
|
|
+ if (process.platform !== 'darwin') {
|
|
|
+ app.quit()
|
|
|
+ }
|
|
|
+})
|
|
|
```
|
|
|
|
|
|
-After launching the Electron application, you should see the notification in the
|
|
|
-Console:
|
|
|
-
|
|
|
-```sh
|
|
|
-npm start
|
|
|
+After launching the Electron application, you should see the notification:
|
|
|
|
|
|
-> [email protected] start /electron
|
|
|
-> electron .
|
|
|
+
|
|
|
|
|
|
-online
|
|
|
-```
|
|
|
+> Note: If you need to communicate the connection status to the main process, use the [IPC renderer](../api/ipc-renderer.md) API.
|