检测 Android 浏览器或 WebView 内部

IT技术 javascript android
2021-01-30 15:20:44

Javascript 如何检测网站是在 Android 的股票浏览器中加载还是在另一个应用程序的 WebView 中加载?我想在这两种情况下运行稍微不同的代码。

3个回答

活动 -> onCreate

this.webView.getSettings().setUserAgentString(
    this.webView.getSettings().getUserAgentString() 
    + " "
    + getString(R.string.user_agent_suffix)
);

资源 -> 值 -> strings.xml

<string name="user_agent_suffix">AppName/1.0</string>

Javascript

function() isNativeApp {
    return /AppName\/[0-9\.]+$/.test(navigator.userAgent);
}
这是developer.android.com/guide/webapps/官方推荐的方式...
2021-03-20 15:20:44
这仅当您也是 Android 应用程序开发人员时才可行,但如果您无法更改将在其中运行页面的应用程序源代码,则此方法将不起作用。当然,除非您联系应用程序开发人员并且他们同意为您更改 Android 代码。
2021-03-30 15:20:44
如果您在 web 视图中使用社交媒体身份验证,则 @MarvinEmilBrach 不起作用。它将失去 Javascript 界面
2021-04-12 15:20:44

您可以检查请求的页面上的服务器变量,看看它是否来自您的应用程序并相应地设置一个 javascript 变量

if($_SERVER['HTTP_X_REQUESTED_WITH'] == "com.company.app")
    echo 'var isAndroidApp=true;';
else
    echo 'var isAndroidApp=false;';
  • 用你的包名替换 com.company.app
有没有可能这有时不可靠?
2021-04-05 15:20:44

在较新版本的 WebView、Lollipop 及以上版本中,您可以通过查找用户代理字符串中的 wv 字段来区分 WebView:

Mozilla/5.0 (Linux; Android 5.1.1; Nexus 5 Build/LMY48B; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/43.0.2357.65 Mobile Safari/537.36

https://developer.chrome.com/multidevice/user-agent#webview_user_agent