Я специально спрашиваю о javascript на мобильной веб-странице, а не о приложении Objective-C. Есть ли что-то вроде Apple Reachability для javascript, чтобы я мог сказать, когда установлено или изменено соединение Edge, 3G или Wifi?
Как вы определяете соединение 3G и Wi-Fi в мобильном сафари?
Ответы (3)
Нет, если только браузеры не начнут передавать эту информацию через DOM, чего в настоящее время они не делают. Существует navigator
javascript-объект, который содержит много вещей, но не то, что вы ищете. Я также недавно прочитал в новостях, что какой-то оператор сотовой связи добавлял файлы cookie к HTTP-запросам, сделанным на их телефонах. Было обнаружено, что они добавляют идентификаторы клиентов в файлы cookie (огромная брешь в системе безопасности!!).
Мобильный Safari добавляет несколько новых добавления DOM, но не то, что вы просите.
За исключением этих вариантов, вы не можете. Уровни Интернет-протокола предназначены для инкапсуляции и сокрытия деталей нижних уровней. Вы не можете обнаружить Edge, 3G или Wi-Fi так же, как вы не можете обнаружить кабель, DSL или более тонкую оптику.
Наконец, даже если бы вы могли получить эту информацию, это не принесло бы вам никакой пользы, если бы у вас не было сведений о каждом узле в вашем TCP-соединении. Например, я мог бы иметь следующую настройку:
iPad ---WiFi----> iPhone's Hotspot ---3G---> Carrier ---unknown--->>>
Приложение
В 2012–2013 годах W3C конкретизировался API сетевой информации, предназначенный для предоставления "интерфейса для веб-приложений для доступа к базовой информации о подключении устройства". В то время API предусматривал, что «оценочная» пропускная способность для браузера будет доступна через navigator.connection.bandwidth
. По состоянию на апрель 2014 года эта работа прекращена!
Обновление. По состоянию на 20 октября 2015 года работа над этим API продолжается. Вы можете найти последние редакторские черновики API сетевой информации на страницах W3C на github.
Хотя вы не можете использовать данные из браузера, чтобы определить, подключен ли пользователь к Wi-Fi или сотовой сети, захват IP-адреса пользователя может быть одним из способов отличить Wi-Fi от сотовой связи.
В этой статье о том, как сотовая связь влияет на ваш IP-адрес (http://classroom.synonym.com/wifi-change-ip-17586.html), в нем указано следующее:
При подключении к сети Wi-Fi общедоступный IP-адрес вашего устройства будет соответствовать всем другим компьютерам в вашей сети, а ваш маршрутизатор назначает локальный IP-адрес. При использовании сотовой связи ваш оператор сотовой связи назначает общедоступный IP-адрес. Для подключения к сотовому Интернету не используется маршрутизатор, поэтому у вашего устройства не будет локального IP-адреса.
ЕСЛИ ip = localIp, тогда соединение = wifiConnection
ЕСЛИ ip = publicIp, тогда соединение = cellularConnection
Вот скриншот моего IP, когда я на сотовой связи:
Вот скриншот моего IP (сразу после отключения сотовой связи) на Wi-Fi:
Это может быть одним из ответов на проблему без помощи браузера.
На данный момент это ограничение устранено, но все еще существуют ограничения, связанные с API сетевой информации, поддерживаемым в различных браузерах (мобильных и других), https://caniuse.com/#search=network
Если это поможет вам, в нашем случае, поскольку наше конкретное мобильное приложение является гибридным и разработано с использованием Ionic, мы смогли сделать это на iOS или Android с помощью этого плагина Cordova: https://github.com/apache/cordova-plugin-network-information, который прекрасно работает.