Несколько полезных веб-API — API состояния сети
предисловие
При просмотре веб-сайта с видео на мобильном телефоне при необходимости могут появляться подсказки в зависимости от типа сети, которую пользователь использует в данный момент, что является хорошим опытом.
Вот так (мобильный браузер UC):
Это (браузер QQ мобильного телефона):
У этой функции есть еще одно применение: предварительная загрузка ресурсов. При использовании Wi-Fi мобильный телефон может загружать статические ресурсы страницы заранее, чтобы улучшить впечатления пользователя от просмотра, а при отсутствии Wi-Fi можно использовать отложенную загрузку для экономии трафика для пользователя.
Однако нетрудно обнаружить, что они реализованы API программной оболочки, а не простой реализацией JS. (Вообще, при воспроизведении видео на другом носителе подсказка не появляется. Можно догадаться, что JSBridge в этой среде не вызывается)
Например, в WeChat или апплете WeChat тип сети можно получить так:
//微信
WeixinJSBridge.invoke('getNetworkType', {}, e => {
//blabla
});
//小程序
wx.getNetworkType({
success: res => {
//blabla
}
})
На самом деле в HTML5 уже есть такой Web API для стандартизации этой функциональности: onLine и API подключения.
Теперь первое лучше реализовано на стороне мобильных устройств и ПК, а второе поддерживается только некоторыми расширенными версиями на стороне ПК (я использую поддержку Chrome67). Итак, если вы хотите использовать чистый JS для реализации этой функции на своем мобильном телефоне, вы можете отключить ее здесь. . .
Если вы все еще возлагаете надежды на ПК, то можете продолжить поиск 😄 .
onLine: одно свойство два события
navigator.onLine:
Логический тип, чтобы определить, подключено ли устройство к сети.
онлайн, оффлайн мероприятия
Обычно привязанный к окну, он срабатывает, когда устройство переключается между сетевым и несетевым режимами.
var online = navigator.onLine; //是否在线
//事件绑定
window.addEventListener('online', updateOnlineStatus);
window.addEventListener('offline', updateOnlineStatus);
соединение: один объект и одно событие
Объект: navigator.connection
type
Тип сети
bluetooth: 蓝牙
cellular: 蜂窝网络(e.g., EDGE, HSPA, LTE, etc.)
ethernet: 以太网
none: 无连接
mixed: 多类型混合
other: 类型可知,但不可枚举
unknown: 有链接,但类型未知
wifi: Wi-Fi
wimax: WiMAX
effectiveType
допустимый тип соединения
'2g'
'3g'
'4g'
'slow-2'
downlink
Эффективная пропускная способность, М/с
downlinkMax
Максимальная скорость передачи в нисходящем направлении
rtt:
Время приема-передачи (время приема-передачи): указывает общее время, прошедшее с момента, когда отправитель отправляет данные, до момента, когда отправитель получает подтверждение от получателя (получатель отправляет подтверждение сразу после получения данных, исключая время передачи данных).
Событие: connection.onchange
Очень просто, запускайте событие при изменении типа сетевого подключения устройства.
Demo
Основной код:
{
onGetStatus () {
if(!this.canUseConnection) {
this.$message.error('浏览器不支持navigator.connection(>_<)...');
return;
}
this.updateConnectionStatus();
},
update () {
this.connection = navigator.connection;
},
bindEvents () {
let self = this;
window.addEventListener('online', e => {
console.log(e);
self.updateOnlineStatus();
});
window.addEventListener('offline', e => {
console.log(e);
self.updateOnlineStatus();
});
if(navigator.connection) {
let timer = null;
navigator.connection.addEventListener('change', e => {
timer && clearTimeout(timer);
timer = setTimeout(() => {
self.updateConnectionStatus(e);
}, 500);
});
}
},
updateOnlineStatus () {
this.online = navigator.onLine;
console.log(this.online);
if(this.online) {
this.$message.success('有网啦❛‿˂̵✧');
} else {
this.$message.error('掉线啦(>_<)...');
}
},
updateConnectionStatus (e) {
console.log(e);
this.connection = navigator.connection || initConnection;
this.$notify.info({
title: '提示',
message: '当前网络:' + (e ? e.currentTarget.type : this.connection.type || 'unknown')
});
}
}
Браузер не поддерживает navigator.connection и не может получить текущую используемую сетьНе поддерживает navigator.connection, эффекта не видно? Выглядит это так (скриншот) -
Суммировать
Из-за ограничений совместимости функции, которые можно выполнять сейчас, действительноочень - иметь - ограниченный.
Но будем надеяться...будущее😄.