gpt4 book ai didi

iOS Captive Network Assistant网页的Javascript检测

转载 作者:可可西里 更新时间:2023-11-01 05:21:55 25 4
gpt4 key购买 nike

我正在运行一个网络应用程序,该应用程序会在用户使用强制门户成功登录 wifi 网络后立即显示。

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

当我的 web 应用程序显示在此 CNA 弹出窗口中时,我希望它具有特定的行为,因此我试图检测(使用 Javascript)我的 web 应用程序是否显示在这样的弹出窗口中。

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

  • Safari 内高度为 460 像素
  • 在共享连接或通话期间,Safari 内的高度为 440 像素
  • Captive Network Assistant 内高度为 459px
  • 在共享连接或电话通话期间,Captive Network Assistant 内的高度为 439 像素

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

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

谢谢

最佳答案

好吧,我终于用用户代理检测到了 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
[...]
}

关于iOS Captive Network Assistant网页的Javascript检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19981008/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com