6

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

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

是否有可能通过检查用户代理或通过 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 版本之间不一致,并且不是确定浏览器类型的可靠方法。

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

4

2 回答 2

3

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

于 2015-10-06T10:57:05.000 回答
1

我正在测试的 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 已经改变了它运行强制门户的方式似乎.

于 2020-08-25T12:51:56.943 回答