提交 c45e8c5d 编写于 作者: Q qiang

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

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