iOS 强制网络助手网页的 JavaScript 检测
Javascript detection of iOS Captive Network Assistant webpage
>我正在运行一个网络应用程序,该应用程序在用户使用强制门户成功登录 wifi 网络后立即显示。
在 iOS 上,用户登录后,我的 Web 应用程序将显示在 CNA(强制网络助手)弹出窗口中,并且右上角的按钮标签将变为"确定"以允许用户关闭此弹出窗口。
当它显示在此 CNA 弹出窗口中时,我想在我的 Web 应用程序中有一个特定的行为,所以我正在尝试检测(使用 Javascript)我的 Web 应用程序是否显示在这样的弹出窗口中。
我首先押注 window.innerHeight 值,但在我的 iPhone 5 上似乎很难:
- 460px 高度在 Safari 中
- 共享连接或电话通话时 Safari 内部高度为 440 像素
- 内置专网网络助手高度 459 像素
- 共享连接或电话呼叫期间强制网络助手内部高度为 439 像素
在我看来,1px 的差异不足以弄清楚我是否在这个 CNA 弹出窗口中。
我是否可以依靠任何其他 JavaScript 信息来确定我是否在这样的弹出窗口中?
谢谢
最后,
我用用户代理检测到了 CNA。在 CNA 内部时,用户代理不会在 UA 字符串中包含"Safari/"。还测试了十几种替代浏览器,如 歌剧迷你, 海豚, 水星, 海雀, 原子, 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
在同一设备上,在 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
[...]
}
相关文章:
- 打开网页后立即获取网页的活动javascript函数
- Android键盘不适用于包含Javascript的网页
- 网页上失败的javascript会导致所有其他脚本失败
- 使用javascript替换网页上的文本
- 同一网页中有多个javascript标记
- 使用Javascript从整个网页中删除具有特定类的所有span标记
- 如何通过javascript或jquerycookie获取网页的刷新次数
- 如何使用httpwebrequest在c#中获得网页(使用ajax/javascript的php)的最终响应
- 网页javascript根本没有执行
- 如何复制谷歌Chrome网页javascript徽标效果
- Python Selenium,抓取网页JavaScript表
- java程序可以作为网页javascript和数据库之间的中介吗
- 是否有一种方法来检查如果谷歌浏览器安装(和默认浏览器)通过网页/ JavaScript不安装任何客户端
- 我如何用Javascript或jQuery重定向我的网页??Javascript重定向
- IPad 5x操作系统错误地提供网页JavaScript是否常见?
- 传递HTML表单post数据到不同的文件/网页javascript变量(php)
- 当我添加另一个函数时,网页Javascript停止工作
- 如何从网页Javascript调用c#方法
- Cocoa插件调用网页javascript
- 提取网页javascript中的字段值