Browse Source

docs: Update online detection doc and fiddle (#29309)

* rework online detection doc and fiddle

* add footnote

* Update docs/tutorial/online-offline-events.md

Co-authored-by: Erick Zhao <[email protected]>

* Update docs/tutorial/online-offline-events.md

Co-authored-by: Erick Zhao <[email protected]>

* Update docs/tutorial/online-offline-events.md

* Update docs/tutorial/online-offline-events.md

* Update docs/tutorial/online-offline-events.md

* chore: fix lint error

Co-authored-by: Ethan Arrowood <[email protected]>
Co-authored-by: Ethan Arrowood <[email protected]>
Co-authored-by: Erick Zhao <[email protected]>
Co-authored-by: Cheng Zhao <[email protected]>
trop[bot] 3 years ago
parent
commit
4d7188fd2e

+ 13 - 0
docs/fiddles/features/online-detection/index.html

@@ -0,0 +1,13 @@
+<!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>

+ 26 - 0
docs/fiddles/features/online-detection/main.js

@@ -0,0 +1,26 @@
+const { app, BrowserWindow } = require('electron')
+
+function createWindow () {
+  const onlineStatusWindow = new BrowserWindow({
+    width: 300,
+    height: 200
+  })
+
+  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()
+  }
+})

+ 0 - 17
docs/fiddles/features/online-detection/main/index.html

@@ -1,17 +0,0 @@
-<!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>Hello World!</h1>
-    <p>
-        We are using node <script>document.write(process.versions.node)</script>,
-        Chrome <script>document.write(process.versions.chrome)</script>,
-        and Electron <script>document.write(process.versions.electron)</script>.
-    </p>
-    <script src="renderer.js"></script>
-</body>
-</html>

+ 0 - 24
docs/fiddles/features/online-detection/main/main.js

@@ -1,24 +0,0 @@
-const { app, BrowserWindow, ipcMain } = require('electron')
-
-let onlineStatusWindow
-
-app.whenReady().then(() => {
-  onlineStatusWindow = new BrowserWindow({ width: 0, height: 0, show: false, webPreferences: { nodeIntegration: true } })
-  onlineStatusWindow.loadURL(`file://${__dirname}/index.html`)
-})
-
-ipcMain.on('online-status-changed', (event, status) => {
-  console.log(status)
-})
-
-app.on('window-all-closed', () => {
-  if (process.platform !== 'darwin') {
-    app.quit()
-  }
-})
-
-app.on('activate', () => {
-  if (BrowserWindow.getAllWindows().length === 0) {
-    createWindow()
-  }
-})

+ 0 - 7
docs/fiddles/features/online-detection/main/renderer.js

@@ -1,7 +0,0 @@
-const { ipcRenderer } = require('electron')
-const updateOnlineStatus = () => { ipcRenderer.send('online-status-changed', navigator.onLine ? 'online' : 'offline') }
-
-window.addEventListener('online', updateOnlineStatus)
-window.addEventListener('offline', updateOnlineStatus)
-
-updateOnlineStatus()

+ 8 - 0
docs/fiddles/features/online-detection/renderer.js

@@ -0,0 +1,8 @@
+function onlineStatusIndicator () {
+  document.getElementById('status').innerHTML = navigator.onLine ? 'online' : 'offline'
+}
+
+window.addEventListener('online', onlineStatusIndicator)
+window.addEventListener('offline', onlineStatusIndicator)
+
+onlineStatusIndicator()

+ 0 - 17
docs/fiddles/features/online-detection/renderer/index.html

@@ -1,17 +0,0 @@
-<!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>Hello World!</h1>
-    <p>
-        We are using node <script>document.write(process.versions.node)</script>,
-        Chrome <script>document.write(process.versions.chrome)</script>,
-        and Electron <script>document.write(process.versions.electron)</script>.
-    </p>
-    <script src="renderer.js"></script>
-</body>
-</html>

+ 0 - 20
docs/fiddles/features/online-detection/renderer/main.js

@@ -1,20 +0,0 @@
-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`)
-})
-
-app.on('window-all-closed', () => {
-  if (process.platform !== 'darwin') {
-    app.quit()
-  }
-})
-
-app.on('activate', () => {
-  if (BrowserWindow.getAllWindows().length === 0) {
-    createWindow()
-  }
-})

+ 0 - 6
docs/fiddles/features/online-detection/renderer/renderer.js

@@ -1,6 +0,0 @@
-const alertOnlineStatus = () => { window.alert(navigator.onLine ? 'online' : 'offline') }
-
-window.addEventListener('online', alertOnlineStatus)
-window.addEventListener('offline', alertOnlineStatus)
-
-alertOnlineStatus()

BIN
docs/images/connection-status.png


+ 47 - 76
docs/tutorial/online-offline-events.md

@@ -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:
-
-![Online-offline-event detection](../images/online-event-detection.png)
-
-### 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 .
+![Connection status](../images/connection-status.png)
 
-online
-```
+> Note: If you need to communicate the connection status to the main process, use the [IPC renderer](../api/ipc-renderer.md) API.