2013-11-14 52 views
3

我正在運行一個web應用程序,用戶在使用強制門戶成功登錄wifi網絡後顯示。iOS的網頁檢測網頁助理網頁

在iOS上,用戶登錄後,我的webapp顯示在CNA(Captive Network Assistant)彈出窗口中,右上角的按鈕標籤變爲「Ok」,以允許用戶關閉此彈出窗口。

我想在我的webapp中有一個特定的行爲,當它顯示在這個CNA彈出窗口中時,所以我試圖檢測(使用Javascript)如果我的web應用程序顯示在這樣的彈出窗口中。

我在window.innerHeight值,但在我的iPhone的第一個賭注5似乎很難:

  • 460像素的高度內的Safari
  • 440px內的Safari瀏覽器的高度共享連接或電話呼叫
  • 459px高度時內部網絡助理
  • 共享連接或電話呼叫時網絡助理內部高度爲439px

在我看來,1px的差異不足以弄清楚我是否在這個CNA彈出窗口中。

是否有任何其他的JavaScript信息可以依靠確定我是否在這樣的彈出窗口中?

謝謝

回答

7

那麼最後我用用戶代理檢測CNA。 當在CNA中時,用戶代理在UA字符串中不包含「Safari /」。 與其他瀏覽器如Opera迷你,海豚,水星,海雀,原子,360精簡版,一打還測試...

例如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 

在同一臺設備,中央社裏面,用戶代理字符串是:

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