【问题标题】:Is it possible to detect the Android captive portal browser?是否可以检测到 Android 强制门户浏览器?
【发布时间】:2016-01-02 05:04:30
【问题描述】:

我有一个强制门户,从 Android 5.0+ Lollipop 开始,它在 Android 的强制门户浏览器而不是设备的默认浏览器中启动。

我需要以某种方式检测它们是否在强制门户浏览器中(与常规网络浏览器相反),如果是,则显示不同的内容。

是否有可能通过检查用户代理或通过 Javascript 来检测它们是否位于 Captive Portal Browser 窗口中?我查看了我的 Android 5.1 设备上的用户代理,但我看不出有什么可以区分它们:

强制门户浏览器:

Mozilla/5.0 (Linux; Android 5.1; Elite 5 Build/LMY47D) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/39.0.0.0 Mobile Safari/537.36

普通谷歌浏览器:

Mozilla/5.0 (Linux; Android 5.1; Elite 5 Build/LMY47D) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.94 Mobile Safari/537.36

版本号略有不同,但这在 Android/Chrome 版本之间似乎不一致,并且不是确定浏览器类型的可靠方法。

还有其他检测方法吗?提前致谢。

【问题讨论】:

    标签: javascript android google-chrome user-agent captivenetwork


    【解决方案1】:

    您可以使用Modernizr 来检测是否存在 Fetch API 或 Local Storage 功能,这两者都存在于常规的 Google Chrome 和 Firefox 等中,但在强制门户浏览器中不可用。

    【讨论】:

    • 我正在检测 Fetch 和 localstorage,它可以工作,但不再适用于三星 S7 等较新的手机
    • @devwannabe:localstorage 似乎仍然是一个有效的测试(不存在于俘虏中,存在于 chrome、firefox 和 opera 中)。我同意“获取”现在出现在强制门户浏览器中。另一种选择是 csspseudotransitions,但我不会将其用作渲染功能。
    • 我正在使用以下内容:var isCNA = !(Modernizr.pagevisibility && Modernizr.sessionstorage && Modernizr.localstorage && Modernizr.hashchange)。直到现在都没有问题。它适用于 Android 5+ 和 iOS。
    • 似乎不再工作了...至少在 Android 7.1 上
    • 请注意,iOS 中的隐私浏览功能也(曾经)禁用了 localStorage:gist.github.com/paulirish/5558557
    【解决方案2】:

    我正在测试的 Pixel 设备现在通过了这两项测试 -

    try {
    
        const test = 'test';
        
        localStorage.setItem(test, test);
        localStorage.removeItem(test);
        sessionStorage.setItem(test, test);
        sessionStorage.removeItem(test);
        alert("We're in a chrome instance!")
    } catch(e) {
        alert("We're inside a Captive Portal!")
    }
    
    

    在 Android 10 上运行 - Pixel XL 和普通 Pixel

    对于许多其他设备 - 上面的 localStorage 测试工作正常 - 我们进入一个 catch 块并确定我们不在一个完整的 Chrome 选项卡/Android 默认浏览器选项卡中,但 Android 已经改变了它的运行方式好像是传送门。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-01
      • 2022-01-17
      • 2013-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-01
      • 2019-08-03
      相关资源
      最近更新 更多