iOS强制网络助理网页的Javascript检测

时间:2013-11-14 15:00:22

标签: javascript ios wifi captivenetwork

我正在运行一个webapp,它是在用户使用强制网络门户成功登录wifi网络后显示的。

在iOS上,用户登录后,我的webapp会显示在CNA(Captive Network Assistant)弹出窗口中,右上角按钮标签会变为“Ok”以允许用户关闭此弹出窗口。

当我在这个CNA弹出窗口中显示时,我想在我的webapp中有一个特定的行为,所以我试图检测(使用Javascript)我的webapp是否显示在这样的弹出窗口中。

我首先打赌window.innerHeight值,但在我的iPhone 5上似乎很难:

  • Safari内的460px高度
  • 在共享连接或电话呼叫期间,Safari内部的高度为440px
  • 强制网络助手内的459像素高度
  • 在共享连接或电话呼叫期间,Captive Network Assistant内的高度为439px

在我看来,1px的差异还不足以弄清楚我是否在这个CNA弹出窗口中。

我是否可以依赖任何其他javascript信息来确定我是否在这样的弹出窗口中?

谢谢

1 个答案:

答案 0 :(得分:7)

最后我用用户代理检测到了CNA。 在CNA内部时,用户代理不在UA字符串中包含“Safari /”。 还测试了十几种其他浏览器,如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
    [...]
}