我想知道如何在适用于iOS的Cordova(Phonegap)2.4.0上更改用户代理。
我已经阅读了更改iOS用户代理的解决方案。 Change Phonegap User Agent
但它不适用于2.4.0。 :P
我认为有关InAppBrowser功能的用户代理有一些变化...... 但我无法找出为什么上层代码不起作用。
你有什么想法吗?
答案 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属性,这显然非常脏,但是很有效。