@megalo/api
Version:
重新封装各个端中的API,由 megalo 统一对外抛出方法名。目前微信小程序端提供的 API 最为丰富,所以 API 名称以微信小程序为准。
70 lines (61 loc) • 1.52 kB
JavaScript
function getConnection() {
return navigator.connection || navigator.mozConnection || navigator.webkitConnection;
}
function getNetworkType() {
let connection = getConnection();
let res = {};
if (!connection) {
res.networkType = 'unknown';
return Promise.resolve(res);
}
if (!navigator.onLine) {
res.networkType = 'none';
return Promise.resolve(res);
}
let type = 'unknown';
if (!isNaN(Number(connection.type))) {
switch(connection.type) {
case connection.WIFI:
type = 'wifi';
break;
case connection.CELL_3G:
type = '3g';
break;
case connection.CELL_2G:
type = '2g';
break;
default:
type = 'unknown';
}
} else if (connection.type) {
type = connection.type;
} else if (connection.effectiveType) {
type = connection.effectiveType;
}
res.networkType = type;
return Promise.resolve(res);
}
function onNetworkStatusChange(cb) {
let connection = getConnection();
if (connection) {
connection.addEventListener('change', () => {
getNetworkType()
.then(res => {
const { networkType } = res;
const isConnected = networkType !== 'none';
cb({
isConnected,
networkType,
});
});
});
}
}
export default {
install(Megalo) {
Object.assign(Megalo, {
getNetworkType,
onNetworkStatusChange,
});
}
};