Как вы определяете соединение 3G и Wi-Fi в мобильном сафари?

Я специально спрашиваю о javascript на мобильной веб-странице, а не о приложении Objective-C. Есть ли что-то вроде Apple Reachability для javascript, чтобы я мог сказать, когда установлено или изменено соединение Edge, 3G или Wifi?


person angelfilm entertainment    schedule 22.12.2011    source источник


Ответы (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.

person Community    schedule 29.01.2012
comment
Это было бы абсолютно полезно, особенно для загрузки ресурсов. Я бы с радостью отправил скриншоты своего продукта на мобильное устройство, если бы знал, что они подключены к Wi-Fi. - person Jason; 04.04.2013
comment
@ Джейсон, было бы полезно знать скорость загрузки, чтобы отправлять ресурсы нужного размера, да! Но соединение Wi-Fi на конечной точке не означает, что в ваших соединениях нет более медленных узлов. Например. Мой iPad подключен к сети Wi-Fi, к точке доступа моего телефона... Но у моего телефона только 3G для выхода в Интернет. И это всего 2 прыжка. Сколько переходов между вашим сервером и пользовательским агентом?! - person ; 09.05.2013
comment
Это справедливо, я полагаю. Пропускная способность была бы идеальной, но в ее отсутствие тип соединения позволил бы мне сделать лучшее предположение, чем то, что доступно. 4G всегда будет быстрее, чем 3G, и большую часть времени Wi-Fi быстрее, чем они оба. Это не всегда будет правильно, но опять же, GPS не всегда точен, и мы все еще полагаемся на него, верно? ;) - person Jason; 09.05.2013
comment
@ Джейсон, я полагаю, можно просто загрузить ресурс известного размера с помощью асинхронного вызова JavaScript и измерить время, необходимое для передачи. Это позволит получить фактические метрики для соединения под рукой. Я просто не сторонник предположения, что определенное соединение гарантирует определенную скорость полосы пропускания... но я понимаю причину этого. :) - person ; 09.05.2013

Хотя вы не можете использовать данные из браузера, чтобы определить, подключен ли пользователь к 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:

введите здесь описание изображения

Это может быть одним из ответов на проблему без помощи браузера.

person Collarbone    schedule 22.04.2015
comment
Куто тебе, я только что узнал очень ценную информацию. - person THE AMAZING; 15.09.2015
comment
Я думаю, это потому, что вы получаете адрес ipv6 от своего телефонного провайдера. ipv6 не использует роутер. Когда я на 4G, я получаю адрес ipv4, и невозможно различить - person Jos Faber; 16.10.2015

На данный момент это ограничение устранено, но все еще существуют ограничения, связанные с API сетевой информации, поддерживаемым в различных браузерах (мобильных и других), https://caniuse.com/#search=network

Если это поможет вам, в нашем случае, поскольку наше конкретное мобильное приложение является гибридным и разработано с использованием Ionic, мы смогли сделать это на iOS или Android с помощью этого плагина Cordova: https://github.com/apache/cordova-plugin-network-information, который прекрасно работает.

person rtrujillor    schedule 22.10.2018