2

Cordova(Phonegap) 2.4.0 for iOS でユーザーエージェントを変更する方法を知りたいです。

iOS のユーザー エージェントを変更するためのソリューションを既に読みました。 Phonegap ユーザー エージェントの変更

しかし、2.4.0 では動作しません。:p

InAppBrowser の機能に関して、ユーザー エージェントにいくつかの変更があると思います...しかし、上部のコードが機能しない理由がわかりません。

あなたはなにか考えはありますか?

4

2 に答える 2

0

はい、そのとおりです。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];
    }];
}
于 2013-03-28T12:59:05.323 に答える
0

Cordova 3.3 の iOS で同じ問題が発生し、CB-2520がまだ存在するため、CDVViewController.m の userAgent プロパティをハックしました。これは明らかに非常に汚れていますが、機能しました。

于 2014-03-20T18:45:50.440 に答える