【问题标题】:Android, webview user agent vs browser user agentAndroid,webview 用户代理与浏览器用户代理
【发布时间】:2012-09-25 11:31:45
【问题描述】:

我正在构建我的网站,我想知道用户使用的是 Android 浏览器还是带有 webview 的应用程序。

有可能吗??

【问题讨论】:

标签: android android-webview user-agent


【解决方案1】:

您可以将以下代码用于已检查的 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");
}

【讨论】:

  • 虽然此代码可能会为 OP 的问题提供解决方案,但强烈建议您提供有关此代码为何和/或如何回答问题的额外上下文。从长远来看,只有代码的答案通常会变得毫无用处,因为未来遇到类似问题的观众无法理解解决方案背后的原因
【解决方案2】:

有关更多最新信息,请查看此处https://developer.chrome.com/multidevice/user-agent 棒棒糖和更新的设备在 UserAgent 中包含 wv)

【讨论】:

    【解决方案3】:

    根据Chrome dev docs:“如果您试图区分 WebView 和 Chrome for Android,您应该在 WebView 用户代理中查找 Version/XX 字符串字符串。”

    【讨论】:

    • 从棒棒糖及以上你应该在用户代理中检查 wv,但这绝对是正确的答案
    【解决方案4】:

    仅供参考:用户代理无法做到这一点,但可以检测到。 Android 的 Web 视图会发送一个附加标头“X-Requested-With”。此标头的值将是运行 webview 的应用程序的名称空间。

    例如 Dolphin 浏览器发送:“mobi.mgeek.TunnyBrowser” 我的测试应用发送:“com.jamestymann.identifyawebview”

    标准浏览器实际上根本不发送此标头,因此很容易检测到这些标头。

    我有两个警告:

    • “X-Requested-With”是标准标头,可能会从桌面的完整网页/浏览器发送。 (例如,这用于检测具有这些值“X-Requested-With XMLHttpRequest”的 ajax 调用)
    • 大多数 google play 商店浏览器使用 webviews 来显示网页。即使这些是成熟的浏览器,它们仍会发送此标头。因此,如果您打算禁用此功能,则可能需要小心,因为您可能会禁用人们的默认浏览器。

    【讨论】:

    • 有谁知道嵌入在应用程序中的 iPhone 浏览器是否有类似的功能?
    • 对于 Gingerbread 或旧版本的 Android 是否如此?我在 JellyBean 上看到了这种行为,但在 Gingerbread 上没有看到。
    • 我所看到的是,本机浏览器发送“com.android.browser”作为 X-requested-With 标头。但是对于某些设备(主要是三星,到目前为止我已经注意到),对于 webviews 和本机浏览器,这个值根本不会发送
    【解决方案5】:

    发件人:http://googlewebmastercentral.blogspot.com/2011/03/mo-better-to-also-detect-mobile-user.html

    使用这样的用户代理:

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

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

    另一方面,这个用户代理:

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

    包含“mobile”和“android”,因此在 Nexus One 上为网络冲浪者提供移动体验!

    来自https://stackoverflow.com/a/7327201

    看起来 Webview 中的 User-Agent 与默认移动浏览器中的用户代理相同

    【讨论】:

    • 使用 android 4.X 这不起作用。任何人有另一种方法来检测 webview 或 android 浏览器?
    • @fermin 您可以使用“setUserAgentString (String ua)”编辑 webview 的用户代理并在后端解析它。
    • 我的问题是有人正在使用 webview en android 应用程序加载我的移动网络,而我在 webview 中无法执行任何操作...
    • @fermin 这很可能是因为 webviews 默认关闭了 javascript。您的问题可能与此有关。如果关闭 javascript,我已经看到网站显示错误页面,所以我想你可以使用这种方法
    【解决方案6】:

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

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

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

    在客户端 - navigator.userAgent

    【讨论】:

    • 我知道....我想做的是区分webview和浏览器。谢谢。
    • 我在 android 4.X 中没有发现 webview 和浏览器之间的差异......你知道另一种方式吗?
    【解决方案7】:

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

    <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/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-20
      • 1970-01-01
      • 1970-01-01
      • 2011-04-02
      • 2011-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多