-
Notifications
You must be signed in to change notification settings - Fork 10
/
online-offline-events.js
30 lines (29 loc) · 1.21 KB
/
online-offline-events.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
const EventTarget = require('event-target-shim');
exports.polyfill = target => {
if (!wx.onNetworkStatusChange) return;
if (target.__onlineOfflinePolyfilled) return;
target.__onlineOfflinePolyfilled = true;
const internalEventTarget = new EventTarget();
if (!target.dispatchEvent) {
target.addEventListener = internalEventTarget.addEventListener.bind(internalEventTarget);
target.removeEventListener = internalEventTarget.removeEventListener.bind(internalEventTarget);
target.dispatchEvent = internalEventTarget.dispatchEvent.bind(internalEventTarget);
// avoid this condition to be true:
// https://github.com/zloirock/core-js/blob/9f051803760c02b306aae2595621bb7ef698fc29/library/modules/_task.js#L61
if (typeof postMessage == 'function' && !target.importScripts) {
target.importScripts = () => { throw new Error('mocked'); };
}
}
wx.getNetworkType({
success: ({networkType}) => {
target.onLine = networkType !== 'none';
wx.onNetworkStatusChange(({isConnected}) => {
if (target.onLine === isConnected) return;
target.onLine = isConnected;
target.dispatchEvent({
type: isConnected ? 'online' : 'offline',
});
});
},
});
}