【问题标题】:Change Phonegap User Agent更改 Phonegap 用户代理
【发布时间】:2012-05-16 18:12:41
【问题描述】:

允许我的 Phonegap 应用程序浏览到一些也使用 Phonegap API 的外部站点。目前,我有条件地根据您所在的平台(Android、iOS 等)包含 Phonegap javascript。但是,我无法区分 Phonegap 应用程序和移动设备上的常规浏览器之间的区别。有没有办法更改我的 Phonegap 应用程序中的用户代理以向我的服务器提供有关此的提示?

对此最感兴趣的 iOS 解决方案。

【问题讨论】:

    标签: ios cordova user-agent


    【解决方案1】:

    如果您仍在为该解决方案寻找快速解决方案,这就是我实现它的方法:

    // Modify the user-agent
    NSString* suffixUA = @" my nice user-agent suffix";
    UIWebView* webView = [[UIWebView alloc] initWithFrame:CGRectZero]; 
    NSString* defaultUA = [webView stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"];
    NSString* finalUA = [defaultUA stringByAppendingString:suffixUA];
    NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:finalUA, @"UserAgent", nil];
    [[NSUserDefaults standardUserDefaults] registerDefaults:dictionary];
    

    在Phonegap (Cordova) 示例应用程序中,您需要在AppDelegate.m

    didFinishLaunchingWithOptions 方法中添加这些行

    我花了一整天的时间来解决这个问题!我相信它可能对其他人有用。

    【讨论】:

    • 最好也包含 android 解决方案。
    • 我在stackoverflow.com/questions/14406393/…找到了Android解决方案
    • 要让@alanou 解决方案正常工作,您应该在返回语句之前的 didFinishLaunchingWithOptions 方法末尾添加他发布的代码。似乎 [self.window makeKeyAndVisible];必须先运行,然后才能更改 UA。在装有 iOS 6.1.3 的 iPhone 4 上测试 OK
    【解决方案2】:

    This answer 对类似问题也提到了当前 Cordova 版本中可用的首选项:

    <preference name="OverrideUserAgent" value="MyCordovaApp/1.2.3" />
    

    documented for AndroidiOS

    【讨论】:

      【解决方案3】:

      CB-2520 已解决,建议允许修改用户代理字符串。您现在可以通过设置 MainViewController 的 baseUserAgent 属性来实现这一点。做一个简单的测试,你可以在MainViewController初始化后,在AppDelegate.mdidFinishLaunchingWithOptions方法中添加如下内容:

      self.viewController.baseUserAgent = @"My Custom User Agent";

      【讨论】:

      • 这在我设置时没有任何效果......我错过了什么?
      【解决方案4】:

      如果您正在为cordova 寻找更强大的http 客户端,它允许更改用户代理或任何相关标头,请尝试https://github.com/aporat/cordova-plugin-fetch。它包含经过良好测试的本地网络库(AFNetworking 2 在 ios 上,OKHttp 在 android 上)。

      它也遵循window.fetch,因此您可以在模拟器和设备上使用cordovaFetch,而在浏览器上使用fetch.js进行测试。

      只需安装插件

      cordova plugin add https://github.com/aporat/cordova-plugin-fetch.git

      并在您发出的任何请求中包含用户代理标头。

      cordovaFetch('/users.json', {
        method : 'GET',
        headers: {
         'User-Agent': 'your user agent'
       },
      })
      

      【讨论】:

        【解决方案5】:

        看到这个问题:Detect between a mobile browser or a PhoneGap application

        我做出了贡献,但有很多答案可能适合你。

        【讨论】:

          【解决方案6】:

          我无法使用 Cordova 3.3 在 iOS 中使用它,大概是因为 CB-2520,但作为一个 hack,我修改了 CDVViewController.h 以使 userAgent 属性可读写,然后简单地更新了 self .userAgent 在我的控制器的viewDidLoad 中继承自CDVViewController

          如果时间有问题,您可以强行操纵CDVViewController.m 中的userAgent 延迟加载属性。

          这两个都很脏。 :)

          【讨论】:

          • CB-2520 已解决; CDVViewController 现在有一个可以修改的 baseUserAgent 属性
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-02-12
          • 2013-08-17
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多