是否可以检测Android强制门户浏览器?

时间:2015-10-05 13:52:09

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

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

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

通过检查用户代理或通过Javascript检测它们是否在Captive Portal Browser窗口中是否可行?我查看了Android 5.1设备上的用户代理,但我看不到任何可以区分它们的内容:

CAPTIVE PORTAL BROWSER:

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

常规Google Chrome:

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版本中似乎不一致,而且不是确定浏览器类型的可靠方法。

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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更改了其运行方式门户网站。