2016-06-28 4 views
0

Вот мой код:IOS UIWebView установить UserAgent по Append String, не работает

- (void)viewDidLoad { 
[super viewDidLoad]; 
NSURL *url = [NSURL URLWithString:urlString]; 
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; 
// NSString *tagString = @"Mozilla/5.0 (iPhone; CPU iPhone OS 9_3_2 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Mobile/13F69/YoyaOrg-iOS"; 
// NSString *tag = @"YoyaOrg-iOS"; 
NSString *defaultUserAgent = [self.mainWebView stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"]; 
NSString *newUserAgent = [NSString stringWithFormat:@"%@ YoyaOrg-iOS",defaultUserAgent]; 
NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:newUserAgent, @"UserAgent", nil]; 
[[NSUserDefaults standardUserDefaults] registerDefaults:dictionary]; 
self.mainWebView.scrollView.bounces = NO; 
[self.mainWebView loadRequest:request]; 
} 
NSLog(@"webUserAgent:%@",defaultUserAgent); 

После дописывания строки "YoyaOrg КСН", но выход журнала по-прежнему не содержит "YoyaOrg КСН" .if я заменить UserAgent как:

NSString *tagString = @"Mozilla/5.0 (iPhone; CPU iPhone OS 9_3_2 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Mobile/13F69/YoyaOrg-iOS"; 
NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:tagString, @"UserAgent", nil]; 
[[NSUserDefaults standardUserDefaults] registerDefaults:dictionary]; 

то UserAgent я получаю то, что я хочу, я не могу это сделать и потратил много времени; TKS для любых ответов. TKS за любую помощь!

ответ

0

Я также ищу способ изменить агент пользователя. Я узнал, что я должен изменить агент пользователя при создании экземпляра webview с помощью кода, например [[NSUserDefaults standardUserDefaults] registerDefaults:@{@"UserAgent":customUserAgent}];, и распечатать агент пользователя в методе webViewDidFinishLoad: с помощью кода NSLog(@"UserAgent = %@", [webView stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"]);, чтобы узнать, изменен ли пользовательский агент.

тогда я нашел, если я поставил код [webView stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"] перед WebView загружает запрос URL, как этот

 NSString *userAgent = [_webView stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"]; 
    NSString *mystring = @" mystring"; 
    NSString *customUserAgent = [userAgent stringByAppendingString:mystring]; 

    [[NSUserDefaults standardUserDefaults] registerDefaults:@{@"UserAgent":customUserAgent}]; 

результат не только агент пользователя не изменяется, но и коды взаимодействия OC-JS, которые я написал, используя JavaScriptCore отключен!

Я нашел способ исправить это: запустите второй UIWebView, который ничего не делает, только чтобы получить пользовательский агент по умолчанию. вот мое окончательное решение для добавления по умолчанию строки пользовательского агента:

_webView = [[UIWebView alloc] initWithFrame:self.view.bounds]; 
    _webView.scalesPageToFit = YES; 

    //init another webView to get the default user agent 
    NSString *userAgent = [[[UIWebView alloc] init] stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"]; 
    NSString *mystring = @" mystring"; 
    NSString *customUserAgent = [userAgent stringByAppendingString:mystring]; 

    [[NSUserDefaults standardUserDefaults] registerDefaults:@{@"UserAgent":customUserAgent}]; 

это работает гладко :)

1

Только для сдачи постфикса пользовательского агента выполните следующие действия в функции didFinishLaunchingWithOptions в вашем AppDelegate. скор

/* changing User Agent system-wide */ 
    UserDefaults.standard.register(
     defaults: [ 
      "UserAgent" : "\(UIWebView().stringByEvaluatingJavaScript(from: "navigator.userAgent;")) YOUR_POSTFIX_TO_USER_AGENT" 
     ] 
    ) 

Для совершенно нового пользовательского агента, вы должны избавиться от UIWebView().stringByEvaluatingJavaScript(from: "navigator.userAgent;") вызова.