Detección de Javascript de la página web de iOS Captive Network Assistant

Estoy ejecutando una aplicación web que se muestra justo después de que un usuario haya iniciado session en una networking wifi usando un portal cautivo.

En iOS, después de que el usuario inicia session, mi aplicación web se muestra en la window emergente CNA (Asistente de networking cautiva) y la label del button superior derecho se convierte en "Aceptar" para permitir que el usuario cierre esta window emergente.

Quiero tener un comportamiento específico en mi aplicación web cuando se muestra dentro de esta window emergente de CNA, por lo que estoy tratando de detectar (con Javascript) si mi webapp se muestra en una window emergente.

Primero aposté por el valor window.innerHeight pero en mi iPhone 5 me parece difícil:

  • Altura 460px dentro de Safari
  • Altura 440px dentro de Safari durante la connection compartida o la llamada telefónica
  • Altura de 459px dentro del Asistente de networking cautiva
  • 439px de altura dentro del Asistente de networking cautiva durante la connection compartida o la llamada telefónica

La diferencia 1px es, desde mi punto de vista, no es suficiente para descubrir si estoy en este popup de CNA.

¿Hay alguna otra información de javascript en la que pueda confiar para determinar si estoy en una window emergente?

Gracias

Bueno, finalmente, detecto el CNA con el agente de usuario. Cuando dentro del CNA, el agente de usuario no incluye "Safari /" en la cadena UA. También probado con una docena de browseres alternativos como Opera mini, Dolphin, Mercury, Puffin, Atomic, 360 Lite, …

Por ejemplo, Safari UA string es:

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 

En el mismo dispositivo, dentro de un CNA, la cadena del agente de usuario sería:

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

Entonces en PHP mi detección se ve así:

 $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 [...] }