const { invokeCallbackHandler: invoke } = UniServiceJSBridge const callbackIds = [] function changeHandler () { const { networkType } = getNetworkType() callbackIds.forEach(callbackId => { invoke(callbackId, { errMsg: 'onNetworkStatusChange:ok', isConnected: networkType !== 'none', networkType }) }) } export function onNetworkStatusChange (callbackId) { const connection = navigator.connection || navigator.webkitConnection callbackIds.push(callbackId) if (connection) { connection.addEventListener('change', changeHandler) } else { window.addEventListener('offline', changeHandler) window.addEventListener('online', changeHandler) } } export function offNetworkStatusChange (callbackId) { // 暂不支持移除所有监听 if (callbackId) { const index = callbackIds.indexOf(callbackId) if (index >= 0) { callbackIds.splice(index, 1) } } if (!callbackIds.length) { const connection = navigator.connection || navigator.webkitConnection if (connection) { connection.removeEventListener('change', changeHandler) } else { window.removeEventListener('offline', changeHandler) window.removeEventListener('online', changeHandler) } } } export function getNetworkType () { const connection = navigator.connection || navigator.webkitConnection let networkType = 'unknown' if (connection) { networkType = connection.type if (networkType === 'cellular' && connection.effectiveType) { networkType = connection.effectiveType.replace('slow-', '') } else if (!['none', 'wifi'].includes(networkType)) { networkType = 'unknown' } } else if (navigator.onLine === false) { networkType = 'none' } return { errMsg: 'getNetworkType:ok', networkType } }