Обнаружение Javascript веб-страницы iOS Captive Network Assistant

Я запускаю веб-приложение, которое отображается сразу после того, как пользователь успешно вошел в сеть Wi-Fi с помощью закрытого портала.

В iOS после входа пользователя мое веб-приложение отображается во всплывающем окне CNA (Captive Network Assistant), а метка верхней правой кнопки повернута на «ОК», чтобы пользователь мог закрыть это всплывающее окно.

Я хочу, чтобы в моем веб-приложении было определенное поведение, когда оно отображается во всплывающем окне CNA, поэтому я пытаюсь определить (с помощью Javascript), отображается ли мое веб-приложение в таком всплывающем окне.

Сначала я делаю ставку на значение window.innerHeight, но на моем iPhone 5 это кажется сложным:

  • Высота 460 пикселей внутри Safari
  • Высота 440 пикселей внутри Safari во время общего соединения или телефонного звонка
  • Высота 459 пикселей внутри Captive Network Assistant
  • Высота 439 пикселей внутри Captive Network Assistant во время общего соединения или телефонного звонка

Разница в 1 пиксель, с моей точки зрения, недостаточна, чтобы понять, нахожусь ли я в этом всплывающем окне CNA.

Есть ли какая-либо другая информация о javascript, на которую я могу положиться, чтобы определить, нахожусь ли я в таком всплывающем окне?

Спасибо


person Lionel Tressens    schedule 14.11.2013    source источник


Ответы (1)


Наконец-то я обнаружил CNA с помощью пользовательского агента. Находясь внутри CNA, пользовательский агент не включает «Safari/» в строку UA. Также протестировано с десятком альтернативных браузеров, таких как Opera mini, Dolphin, Mercury, Puffin, Atomic, 360 Lite, ...

Например, строка Safari UA:

Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5355d Safari/8536.25

На том же устройстве внутри CNA строка пользовательского агента будет выглядеть так:

Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5355d

Итак, в PHP мое обнаружение выглядит так:

$userAgent = strtolower($_SERVER['HTTP_USER_AGENT']);

if ((strpos($userAgent, 'iphone') || strpos($userAgent, 'ipad')) &&
    (strpos($userAgent, 'mozilla/') !== false) &&
    (strpos($userAgent, 'applewebkit/') !== false) &&
    (strpos($userAgent, 'mobile/') !== false) &&
    (strpos($userAgent, 'safari') === false))
{
    // Yes, we are in a CNA popup
    [...]
}
person Lionel Tressens    schedule 17.11.2013