iOS UIWebView通过Append String设置UserAgent不起作用

时间:2016-06-28 01:32:41

标签: ios uiwebview user-agent

这是我的代码:

- (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-iOS”后,但日志输出仍然不包含“YoyaOrg-iOS”。如果我将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提供任何帮助!

2 个答案:

答案 0 :(得分:1)

只是为了将后缀添加到您的用户代理,请在AppDelegate.swift中的didFinishLaunchingWithOptions函数中执行以下操作

    /* 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;")电话。

答案 1 :(得分:0)

我也在寻找一种更改用户代理的方法。我了解到我应该在使用[[NSUserDefaults standardUserDefaults] registerDefaults:@{@"UserAgent":customUserAgent}];等代码实例化webview时更改用户代理,并使用代码webViewDidFinishLoad:在方法NSLog(@"UserAgent = %@", [webView stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"]);中打印用户代理,以查看用户代理是否已更改

然后我发现在webview加载URL请求之前我是否放了代码[webView stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"],就像这样

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

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

结果不仅是用户代理没有改变,而且我使用JavaScriptCore编写的OC-JS交互代码也被禁用了!

我找到了解决此问题的方法:初始化第二个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}];

这很顺利:)