Android,WebView用户代理与浏览器用户代理

38
我正在构建自己的网站,想知道用户是在使用Android浏览器还是使用内置Webview的应用程序访问。这是否可能?

3
Chrome for Android用户代理:https://developer.chrome.com/multidevice/user-agent - SBotirov
7个回答

21

1
从棒棒糖版本(Android 5.0)开始,您应该在用户代理中检查wv,但这绝对是正确的答案。 - soni
1
非常抱歉我反应有点慢,但我们应该在这里寻找什么?是字符串 Version/ 吗?因为版本号可能不同? - Operator

20

来源:http://googlewebmastercentral.blogspot.com/2011/03/mo-better-to-also-detect-mobile-user.html

对于这样的 User-Agent:

Mozilla/5.0(Linux;U;Android 3.0;en-us;Xoom Build/HRI39)AppleWebKit/534.13(KHTML,像Gecko一样)Version/4.0 Safari/534.13

由于没有“mobile”字符串,因此为此用户提供桌面版(或定制的适用于Android大屏触摸设备的版本)。User-Agent告诉我们,他们来自一个大屏幕设备,即XOOM平板电脑。

另一方面,这个User-Agent:

Mozilla/5.0(Linux;U;Android 2.2.1;en-us;Nexus One Build/FRG83)AppleWebKit/533.1(KHTML,像Gecko一样)Version/4.0 Mobile Safari/533.1

包含“mobile”和“android”,所以为这台Nexus One上的网络冲浪者提供移动体验!

FROM https://dev59.com/bWw05IYBdhLWcg3wSABH#7327201

看起来Webview中的User-Agent与默认移动浏览器中的User-Agent相同。


1
在Android 4.X上,这种方法不起作用。有没有其他方法来检测WebView或Android浏览器? - fermin
@fermin,您可以使用“setUserAgentString(String ua)”编辑Webview的用户代理,并在后端解析它。 - a fair player
3
我的问题是有人在使用Android应用程序中的Webview加载我的移动Web,而我无法在Webview中执行任何操作... - fermin
@fermin,这很可能是因为Web视图默认关闭了JavaScript所致。你的问题可能与此有关。我见过一些网站在JavaScript关闭时显示错误页面,因此我想你可以采用这种方法。 - Radu Simionescu

10
FYI:这无法通过用户代理完成,但是可以检测到。 Android的Web视图会发送一个额外的标题“X-Requested-With”。此标题的值将是正在运行Web视图的应用程序名称空间。
例如,Dolphin浏览器发送:“mobi.mgeek.TunnyBrowser” 我的测试应用程序发送:“com.jamestymann.identifyawebview”
标准浏览器实际上根本不发送此标题,因此很容易检测到这些内容。
我有两个警告:
- “X-Requested-With”是一个标准标题,可能来自台式机的完整网页/浏览器发送。(例如,使用这些值之一来检测ajax调用:“X-Requested-With XMLHttpRequest”) - 大多数Google Play商店的浏览器使用Web视图显示Web页面。即使这些是完整的浏览器,它们仍然会发送此标题。因此,如果您的意图是禁用此功能,则可能要小心,因为您可能会禁用人们的默认浏览器。

2
有人知道iPhone应用程序中嵌入的浏览器是否会做类似的事情吗? - Michael Levy
这对Gingerbread或更早版本的Android是否适用?我在JellyBean上看到了这种行为,但在Gingerbread上没有看到。 - Michael Levy
1
我所看到的是,原生浏览器会发送“com.android.browser”作为X-requested-With头部。 但是对于某些设备(目前我注意到主要是三星),无论是Web视图还是原生浏览器都不会发送此值。 - rishabh

3

0

您可以使用以下代码来检查Android WebView或浏览器。

public static bool is_mobile_and_webview()
{
     return System.Web.HttpContext.Current.Request.Browser.IsMobileDevice && System.Web.HttpContext.Current.Request.UserAgent.Contains("; wv");
}

3
虽然这段代码可能解决了问题,但强烈建议您提供关于为什么和/或如何回答问题的附加上下文。仅有代码的回答通常在长期内变得无用,因为未来的观众遇到类似问题时无法理解解决方案背后的思路。 - Arun Vinoth-Precog Tech - MVP

-1

是的,您可以通过添加这些元标记来优化您的网站

<meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;" />
<meta name="HandheldFriendly" content="True" />

您可以在这里找到更多信息 http://learnthemobileweb.com/2009/07/mobile-meta-tags/


-6

我在服务器端使用PHP来访问有关客户端浏览器(代理)的信息。

...
$_SERVER['HTTP_USER_AGENT']; // Different browsers ...
...

这个样板可以被解释 - 因此你将会知道代理...

在客户端上 - navigator.userAgent


我知道......我想做的是区分WebView和浏览器。谢谢。 - a fair player
我在Android 4.X中找不到WebView和浏览器之间的区别...你知道其他方法吗? - fermin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接