自定义用户代理字符串或标头,无需修改 cordova 库

2024-05-01

我有一个与 ASP.NET MVC Web 应用程序交互的 Android Phonegap/Cordova 应用程序。我正在尝试检测服务器端是否从浏览器或我的 Phonegap/Cordova 应用程序加载网页。

我考虑过以下几种方法:

  1. 更改用户代理字符串。我发现这个堆栈溢出链接 https://stackoverflow.com/questions/14406393/change-phonegap-cordova-user-agent-for-ajax它描述了一种实现该功能的方法。不幸的是,它对我不起作用。请求对象没有自定义用户代理字符串。
  2. 包含自定义标头值。这可以通过修改 cordova 库来完成(请参阅这个堆栈溢出链接 https://stackoverflow.com/questions/12243863/cordova-how-to-set-http-accept-header-when-calling-loadurl-in-android-app.) 不过,修改库通常是一个坏主意,因为它会成为将来的维护问题。 (更新:此方法在第一次请求后不起作用。)
  3. 加载第一页时向查询字符串添加一些特殊内容。然后可以设置 cookie。与简单的标头更改相比,这是一种丑陋的解决方案。

我在用户代理字符串更改方面做错了什么吗?或者有另一种方法可以实现这一点吗?


因此,对于 Cordova 5.1.1 及其 Android 4.0.2 平台版本(我当前使用 Cordova 5.1.1 时开箱即用的内容),这些答案不再有效。

经过一番摸索,上述版本的解决方案如下:

在平时的MainActivity.java它是由 cordova 默认创建并扩展的CordovaActivity,覆盖makeWebViewEngine method:

@Override
    protected CordovaWebViewEngine makeWebViewEngine() {
        CordovaWebViewEngine cordovaWebViewEngine = super.makeWebViewEngine();
        WebSettings settings = ((SystemWebView) ((SystemWebViewEngine) cordovaWebViewEngine).getView()).getSettings();
        settings.setUserAgentString("MreaderMobile App / Android");
        return cordovaWebViewEngine;
    }

将来,当他们升级 Android 平台的版本时,这应该可以通过 config.xml 更轻松地完成,但这不是一个选项 ATM,正如我在错误修复线程 CB-8960 上评论的那样

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

自定义用户代理字符串或标头,无需修改 cordova 库 的相关文章

随机推荐