检测Android浏览器或WebView内部

41

如何使用JavaScript检测当前网站是在安卓系统的原生浏览器中加载还是在其他应用程序的WebView中加载?我想在这两种情况下运行略微不同的代码。


检查webview用户代理是否与Android股票浏览器有任何不同。您可以通过访问此网站轻松检查。http://whatsmyuseragent.com/ 但是我相当确定用户代理将完全相同,如果是这种情况,我就不知道该怎么办了。 - Caimen
除非您是相关WebView的创建者,否则我认为您可以为用户代理输入任何内容。 - FoamyGuy
2
如果你负责这个应用程序,是否有可能在加载页面时发送特定的用户代理,然后使用Caimen上面的建议?使用WebView的setUserAgentString函数,您可以设置一个特定的用户代理,然后使用Javascript检测差异。 - mopsled
1
我是使用 WebView 的应用程序的作者。我希望有一种方法可以在不编写其他代码的情况下进行检测,但这是临时解决方案:this.webView.getSettings().setUserAgentString(this.webView.getSettings().getUserAgentString() + getString(R.string.user_agent_suffix)),其中 user_agent_suffix 是 "AppName/1.0"。我希望这符合用户代理字符串标准。 - JoJo
3个回答

57

Activity -> onCreate

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

Res -> Values -> strings.xml

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

Javascript

function() isNativeApp {
    return /AppName\/[0-9\.]+$/.test(navigator.userAgent);
}

4
这是来自http://developer.android.com/guide/webapps/webview.html#EnablingJavaScript的官方推荐方法。 - Marvin Emil Brach
@MarvinEmilBrach 如果您正在Webview中使用社交媒体认证,那么这并不起作用。它将失去Javascript接口。 - user516883
2
只有当您也是Android应用程序开发人员时,这才是可行的,但如果您无法更改将运行页面的应用程序源代码,则无法使用它。当然,除非您联系应用程序开发人员并且他们同意为您更改Android代码。 - Ulysses Alves
我在webview中获取到了以下信息:navigator.userAgent 'Mozilla/5.0 (Linux; Android 13; SM-G781B Build/TP1A.220624.014; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/115.0.5790.166 Mobile Safari/537.36' - Luckylooke

5

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

if($_SERVER['HTTP_X_REQUESTED_WITH'] == "com.company.app")
    echo 'var isAndroidApp=true;';
else
    echo 'var isAndroidApp=false;';
  • 将com.company.app替换为你的包名

这有没有可能有时不可靠? - AlexioVay

4
在最新版本的 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


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