Подтвердить что ты не робот

Captive Wifi Popup: нажмите ссылку, чтобы открыть Safari

У нас возникла проблема с нашей сетью с устройствами iOS (ipads, iphones и т.д.): после подключения к SSID iphone/ipad немедленно открывает Captive Network Assistant (CNA) - это похоже на уменьшенный браузер без навигационные кнопки и т.д. - который отображает нашу страницу приветствия (готов для пользователя аутентифицировать свой MAC в сети, чтобы дать ему интернет). Этот CNA является функционалом iOS и выполняется автоматически.

Я смотрел на этом форуме, как заставить пользователя открыть браузер Safari, щелкнув ссылку (в то время как в CNA), отправив его от CNA и в Safari (именно там я бы предпочел, чтобы он был).

Я искал фразы, такие как: "Как установить ссылку для открытия в сафари", но я получаю результаты о том, что люди используют телефонную книгу, чтобы делать такую ​​вещь...
Один пользователь говорил об использовании window.open(myURL, '_system') но я не знаю, решает ли это мою проблему.

В основном, мой план: - На моей странице приветствия (страница, отображаемая после того, как пользователь подключился к моему SSID) обнаружил, какой тип браузера принадлежит пользовательскому устройству. Моя страница приветствия размещена на сайте, который находится в Walled Garden моего контроллера, поэтому каждое устройство может видеть эту страницу приветствия (имеют ли они полный доступ в Интернет или нет). - Если у пользователя есть устройство iOS, браузер CNA открывается автоматически. Мой контроллер обнаруживает, что устройство имеет браузер CNA и загружает простую страницу с сообщением (например): "нажмите здесь, чтобы начать навигацию" - В течение следующих нескольких секунд (когда пользователь переваривает сообщение), мой контроллер дает пользователю MAC полный доступ в Интернет - Когда пользователь нажимает эту ссылку в браузере CNA, CNA закрывается, а затем открывается Safari, а также заставляет Safari открывать страницу приветствия назначения (где я хочу, чтобы мой пользователь был в зависимости от антенны, к которой он подключался).

Я очень надеюсь, что все имеет смысл...

Я нашел эту ссылку о браузере CNA на этом форуме: Обходит Apple Captive Network Assistant Вход в iOS 7

Но он говорит о том, что пользователь открывает Safari с самого начала (отключая функцию CNA), "надеясь", что пользователь открывает Safari (а не сразу переходит к одному из своих приложений). Я предпочитаю, чтобы пользователь "нажимал", чтобы продолжить ", что делает Safari открытым, и он видит мою страницу приветствия.

4b9b3361

Ответ 1

Извлечен из ответа Райана на Как открыть внешнюю ссылку в Safari, а не в UIWebView приложения?

Чтобы иметь ссылку на Safari, просто добавьте target = "_ system" в ссылку, как в

<a href="http://www.domain.com/" target="_system">Link Text</a>

Или поймать все ссылки в вашем javascript с target = "_ blank", включить jQuery и передать их в window.open с параметром '_system'. Это будет работать как на iOS, так и на Android.

$(document).on('click', 'a[target="_blank"]', function(ev) {
  var url;

  ev.preventDefault();
  url = $(this).attr('href');
  window.open(url, '_system');
});

Ответ 2

Javascript НЕ работает полностью в CNA, он отключен по соображениям безопасности. target = "_ system" - это сафари, а не CNA. == > кратко, _system не работает в CNA.

Ответ 3

EDIT: это решение не работает после iOS 10.3. Не уверен, что эта функция или ошибка: https://forums.developer.apple.com/thread/75498

EDIT2: По-видимому, он снова работает на iOS 11


Существует простой способ сделать это, если у вас есть контроль над сервером портативного портала.

При подключении к Wi-Fi-сети устройства iOS отправляют запрос GET на кучу предопределенных URL-адресов (http://www.apple.com/library/test/success.html,...), чтобы узнать, есть ли подключение к Интернету (запросы wispr). Устройство iOS ожидает ответа <HTML><HEAD><TITLE>Success</TITLE></HEAD><BODY>Success</BODY></HTML>. Если запрос преуспевает, но ответ отличается (например, страница вашего невольного портала), он запускает CNA для открытия.

На этом этапе CNA считает, что вы не подключены и покажете кнопку Cancel вверху. Каждая ссылка откроется внутри CNA, а не в окне Safari, независимо от того, что вы делаете. CNA выполняется так, что вы можете получить своего пользователя через процесс входа в систему. Чтобы проверить, завершен ли процесс входа в систему и окончательно установлено соединение, устройство iOS теперь отправляет другой запрос wispr. Это происходит каждые 40 секунд или всякий раз, когда выдается запрос HTTP (навигация внутри CNA).

Когда ваш сервер наконец ответит на Success на запрос wispr, CNA отметит как connected, кнопка вверху изменится на Done. На этом этапе любая ссылка на внешний url закроет CNA и откроется в Safari:)

Итак, чтобы суммировать, вы можете достичь того, чего хотите, со следующими шагами подключения:

  • Сервер
  • отвечает на исходный запрос wispr с вашей страницей CNA.
  • открывается страница CNA. На этой странице есть JavaScript, который сразу же запускает навигацию в CNA, например: <script>window.location.reload(true)</script> это приведет к тому, что устройство iOS немедленно отправит другой запрос wispr Сервер
  • отвечает на этот второй запрос wispr с помощью <HTML><HEAD><TITLE>Success</TITLE></HEAD><BODY>Success</BODY></HTML>, это приведет к тому, что CNA отметит как подключенный
  • чтобы ваша страница CNA отображала ссылку на внешний URL