Javascript 在Android浏览器或WebView中检测

Javascript 在Android浏览器或WebView中检测,javascript,android,Javascript,Android,Javascript如何检测一个网站是加载到Android的股票浏览器中还是加载到另一个应用程序的网络视图中?我希望在这两种情况下运行稍微不同的代码。活动->onCreate this.webView.getSettings().setUserAgentString( this.webView.getSettings().getUserAgentString() + " " + getString(R.string.user_agent_suffix) ); Res-

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

活动->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变量

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

在更新版本的WebView、棒棒糖和更高版本中,您可以通过在用户代理字符串中查找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

检查webview用户代理是否与Android股票浏览器不同。您可以通过访问此网站相当轻松地进行检查。不过,我相当肯定用户代理将完全相同,在这种情况下,我不知道。除非你是有问题的WebView的创建者。在这种情况下,我认为您可以为用户代理输入任何您想要的内容。如果您负责该应用程序,您是否可以在加载页面时发送特定的用户代理,然后使用上面Caimen的建议?使用函数,您可以设置特定的用户代理,然后使用javascript来检测差异。我是使用WebView的应用程序的作者。我希望能够在不编写额外代码的情况下检测它,但这是临时解决方案:
this.webView.getSettings().setUserAgentString(this.webView.getSettings().getUserAgentString()+getString(R.string.user_agent_后缀))其中用户\代理\后缀为“AppName/1.0”。我希望这符合用户代理字符串标准。这是@MarvinEmilBrach官方推荐的方法,如果您在webview中使用社交媒体身份验证,则该方法不起作用。它将失去Javascript界面这只有当你也是Android应用程序开发人员时才可行,但如果你不能更改运行页面的应用程序源代码,它将无法工作。当然,除非你联系应用程序开发人员,他们同意为你修改Android代码。有没有可能有时候这不可靠?
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