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 の機能に関して、ユーザー エージェントにいくつかの変更があると思います...しかし、上部のコードが機能しない理由がわかりません。
あなたはなにか考えはありますか?
はい、そのとおりです。User-Agent の処理は 2.4 から少し変更されました。すべての魔法がCDVUserAgentUtilクラスで実行されるようになりました。現在、Cordova は User-Agent をオーバーライド/拡張する標準的な方法を提供していません (ただし、ロードマップにはあります: 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 プロパティをハックしました。これは明らかに非常に汚れていますが、機能しました。