提交 c45e8c5d 编写于 作者: Q qiang

fix: 解决 Safari 浏览器无法获取网络状态的问题(H5)

上级 0090392e
const {
invokeCallbackHandler: invoke
const {
invokeCallbackHandler: invoke
} = UniServiceJSBridge
const callbackIds = []
function _getEffectiveNetworkType () {
const connectionType = navigator.connection.type
let networkType = ''
if (~['none', 'wifi', 'unknown'].indexOf(connectionType)) {
networkType = connectionType
} else {
let effectiveType = navigator.connection.effectiveType
if (effectiveType === 'slow-2g') {
effectiveType = '2g'
}
networkType = effectiveType
}
return networkType
}
function changeHandler () {
let isConnected = true
const networkType = _getEffectiveNetworkType()
if (networkType === 'none') {
isConnected = false
}
const {
networkType
} = getNetworkType()
callbackIds.forEach(callbackId => {
callbackId && invoke(callbackId, {
invoke(callbackId, {
errMsg: 'onNetworkStatusChange:ok',
isConnected: isConnected,
networkType: networkType
isConnected: networkType !== 'none',
networkType
})
})
}
export function onNetworkStatusChange (callbackId) {
if (window.NetworkInformation) {
callbackIds.push(callbackId)
navigator.connection.onchange = changeHandler
const connection = navigator.connection || navigator.webkitConnection
callbackIds.push(callbackId)
if (connection) {
connection.addEventListener('change', changeHandler)
} else {
callbackId && invoke(callbackId, {
errMsg: 'onNetworkStatusChange:fail'
})
window.addEventListener('offline', changeHandler)
window.addEventListener('online', changeHandler)
}
}
}
export function getNetworkType () {
if (window.NetworkInformation) {
return {
errMsg: 'getNetworkType:ok',
networkType: _getEffectiveNetworkType()
}
} else {
return {
errMsg: 'getNetworkType:fail'
const connection = navigator.connection || navigator.webkitConnection
let networkType = 'unknown'
if (connection) {
networkType = connection.type
if (networkType === 'cellular') {
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
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册