我想知道如何在 Cordova(Phonegap) 2.4.0 for iOS 上更改用户代理。
我已经阅读了更改 iOS 用户代理的解决方案。 更改 Phonegap 用户代理
但它不适用于 2.4.0。:p
我认为关于 InAppBrowser 功能的用户代理有一些变化......但我不知道为什么上层代码不起作用。
你有什么想法?
我想知道如何在 Cordova(Phonegap) 2.4.0 for iOS 上更改用户代理。
我已经阅读了更改 iOS 用户代理的解决方案。 更改 Phonegap 用户代理
但它不适用于 2.4.0。:p
我认为关于 InAppBrowser 功能的用户代理有一些变化......但我不知道为什么上层代码不起作用。
你有什么想法?
是的,没错,自 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];
}];
}
我在 Cordova 3.3 的 iOS 上遇到了同样的问题,并且CB-2520仍然存在,所以我破解了 CDVViewController.m 中的 userAgent 属性,这显然很脏,但有效。