如何更改用于iOS的Cordova(Phonegap)2.4.0上的用户代理?

时间:2013-02-25 08:01:25

标签: cordova user-agent

我想知道如何在适用于iOS的Cordova(Phonegap)2.4.0上更改用户代理。

我已经阅读了更改iOS用户代理的解决方案。 Change Phonegap User Agent

但它不适用于2.4.0。 :P

我认为有关InAppBrowser功能的用户代理有一些变化...... 但我无法找出为什么上层代码不起作用。

你有什么想法吗?

2 个答案:

答案 0 :(得分:0)

是的,这是真的,用户代理处理从2.4开始有所改变。现在所有的魔法都发生在 CDVUserAgentUtil 类中。目前Cordova没有提供任何标准方式来覆盖/扩展用户代理(但他们在路线图上有它:见CB-2520

无论如何,我创建了这个解决方法,在2.5版本上对我来说很好: (我将片段放在 AppDelegate:didFinishLaunchingWithOptions函数)中

注意:当应用程序第一次启动或本地更改时,Cordova会将代理保存在用户设置中。我们只需要在Cordova创建它的缓存副本之前覆盖默认设置。如果有可用的缓存,我们不需要再次运行此代码。

NSUserDefaults* userDefaults = [NSUserDefaults standardUserDefaults];
NSString *isAgentDefined = [userDefaults stringForKey:@"Cordova-User-Agent"];

if(isAgentDefined == nil) {
    UIWebView* sampleWebView = [[UIWebView alloc] initWithFrame:CGRectZero];
    NSString *defaultAgent = [sampleWebView stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"];
    [sampleWebView release];
    NSString *myAgent = @"My custom User-Agent";
    NSString *userAgent = [NSString stringWithFormat:@"%@ %@", defaultAgent, myAgent];

    [CDVUserAgentUtil acquireLock:^(NSInteger lockToken) {
        [CDVUserAgentUtil setUserAgent:userAgent lockToken:lockToken];
        [CDVUserAgentUtil releaseLock:&lockToken];
    }];
}

答案 1 :(得分:0)

我在Cordova 3.3上的iOS上遇到了同样的问题,CB-2520仍然存在,所以我在CDVViewController.m中攻击了userAgent属性,这显然非常脏,但是很有效。