检测用户是否正在使用webview for android / iOS或常规浏览器

如何使用webview for androidiOS检测用户是否正在浏览页面?

stackoverflow上发布了各种解决方案,但我们还没有针对这两种操作系统的防弹解决方案。

目标是if语句,例如:

if (android_webview) { jQuery().text('Welcome webview android user'); } else if (ios_webview) { jQuery().text('Welcome webview iOS user'); } else if (ios_without_webview) { // iOS user who's running safari, chrome, firefox etc jQuery().text('install our iOS app!'); } else if (android_without_webview) { // android user who's running safari, chrome, firefox etc jQuery().text('install our android app!'); } 

到目前为止我尝试过的

检测iOS webview ( 来源 ):

 if (navigator.platform.substr(0,2) === 'iP'){ // iOS (iPhone, iPod, iPad) ios_without_webview = true; if (window.indexedDB) { // WKWebView ios_without_webview = false; ios_webview = true; } } 

检测android webview ,我们有很多像这样的解决方案。 我不确定什么是合适的方式,因为每个解决方案似乎都有问题。

检测iOS设备的浏览器与Android设备不同。 对于iOS设备,您可以通过使用JavaScript检查用户代理来执行此操作

 var userAgent = window.navigator.userAgent.toLowerCase(), safari = /safari/.test( userAgent ), ios = /iphone|ipod|ipad/.test( userAgent ); if( ios ) { if ( safari ) { //browser } else if ( !safari ) { //webview }; } else { //not iOS }; 

对于Android设备,您需要通过服务器端编码来检查请求标头。

PHP:

 if ($_SERVER['HTTP_X_REQUESTED_WITH'] == "your.app.id") { //webview } else { //browser } 

JSP:

 if ("your.app.id".equals(req.getHeader("X-Requested-With")) ){ //webview } else { //browser } 

参考: 通过javascript检测ipad / iphone webview

注意:此解决方案基于PHP。 HTTP标头可以伪造,因此这不是最好的解决方案,但您可以从此开始。

 //For iOS if ((strpos($_SERVER['HTTP_USER_AGENT'], 'Mobile/') !== false) && (strpos($_SERVER['HTTP_USER_AGENT'], 'Safari/') == false) { echo 'WebView'; } else{ echo 'Not WebView'; } //For Android if ($_SERVER['HTTP_X_REQUESTED_WITH'] == "com.company.app") { echo 'WebView'; } else{ echo 'Not WebView'; } 

这是rhavendc答案的扩展版本。 它可用于在浏览器访问网站时显示应用安装横幅,并在网页视图中打开网站时隐藏横幅。

 $iPhoneBrowser = stripos($_SERVER['HTTP_USER_AGENT'], "iPhone"); $iPadBrowser = stripos($_SERVER['HTTP_USER_AGENT'], "iPad"); $AndroidBrowser = stripos($_SERVER['HTTP_USER_AGENT'], "Android"); $AndroidApp = $_SERVER['HTTP_X_REQUESTED_WITH'] == "com.company.app"; $iOSApp = (strpos($_SERVER['HTTP_USER_AGENT'], 'Mobile/') !== false) && (strpos($_SERVER['HTTP_USER_AGENT'], 'Safari/') == false); if ($AndroidApp) { echo "This is Android application, DONT SHOW BANNER"; } else if ($AndroidBrowser) { echo "This is Android browser, show Android app banner"; } else if ($iOSApp) { echo "This is iOS application, DONT SHOW BANNER"; } else if($iPhoneBrowser || $iPadBrowser) { echo "This is iOS browser, show iOS app banner"; } 

对于iOS,我发现您可以使用以下内容可靠地识别您是否在Webview(WKWebView或UIWebView)中:

 var isiOSWebview = (navigator.doNotTrack === undefined && navigator.msDoNotTrack === undefined && window.doNotTrack === undefined); 

它的工作原理:所有现代浏览器(包括Android上的网页浏览)似乎都有某种类型的doNotTrack实现,除了iOS上的webview 。 在所有支持doNotTrack的浏览器中,如果用户没有提供值,则该值将返回null,而不是未定义 – 因此,通过在所有各种实现上检查undefined,确保您在iOS上的Webview中。

注意:这会将iOS上的Chrome,Firefox和Opera识别为webview – 这不是错误。 正如在线 各地所指出的那样 ,Apple将iOS上的第三方浏览器开发者限制为UIWebView或WKWebView以呈现内容 – 因此iOS上的所有浏览器都只包含除Safari之外的标准Web视图。

如果您需要知道自己在网页浏览中,而不是在第三方浏览器中,则可以通过各自的 用户 代理识别第三方浏览器:

 (isiOSWebview && !(/CriOS/).test(navigator.userAgent) && !(/FxiOS/).test(navigator.userAgent) && !(/OPiOS/).test(navigator.userAgent)