• 在线/离线事件探测

    在线/离线事件探测

    使用标准 HTML5 APIs 可以实现在线和离线事件的探测,就像以下例子:

    main.js

    1. var app = require('app');
    2. var BrowserWindow = require('browser-window');
    3. var onlineStatusWindow;
    4. app.on('ready', function() {
    5. onlineStatusWindow = new BrowserWindow({ width: 0, height: 0, show: false });
    6. onlineStatusWindow.loadURL('file://' + __dirname + '/online-status.html');
    7. });

    online-status.html

    1. <!DOCTYPE html>
    2. <html>
    3. <body>
    4. <script>
    5. var alertOnlineStatus = function() {
    6. window.alert(navigator.onLine ? 'online' : 'offline');
    7. };
    8. window.addEventListener('online', alertOnlineStatus);
    9. window.addEventListener('offline', alertOnlineStatus);
    10. alertOnlineStatus();
    11. </script>
    12. </body>
    13. </html>

    也会有人想要在主进程也有回应这些事件的实例。然后主进程没有 navigator 对象因此不能直接探测在线还是离线。使用 Electron 的进程间通讯工具,事件就可以在主进程被使,就像下面的例子:

    main.js

    1. var app = require('app');
    2. var ipc = require('ipc');
    3. var BrowserWindow = require('browser-window');
    4. var onlineStatusWindow;
    5. app.on('ready', function() {
    6. onlineStatusWindow = new BrowserWindow({ width: 0, height: 0, show: false });
    7. onlineStatusWindow.loadURL('file://' + __dirname + '/online-status.html');
    8. });
    9. ipc.on('online-status-changed', function(event, status) {
    10. console.log(status);
    11. });

    online-status.html

    1. <!DOCTYPE html>
    2. <html>
    3. <body>
    4. <script>
    5. var ipc = require('ipc');
    6. var updateOnlineStatus = function() {
    7. ipc.send('online-status-changed', navigator.onLine ? 'online' : 'offline');
    8. };
    9. window.addEventListener('online', updateOnlineStatus);
    10. window.addEventListener('offline', updateOnlineStatus);
    11. updateOnlineStatus();
    12. </script>
    13. </body>
    14. </html>