我的代码:
- (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就是我想要的,我做不到,浪费了很多时间;谢谢你的回答。谢谢你的帮助!
在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;")
呼叫
我也在寻找一种改变用户代理的方法。我了解到,我应该在使用[[NSUserDefaults standardUserDefaults] registerDefaults:@{@"UserAgent":customUserAgent}];
等代码实例化webview时更改用户代理,并使用NSLog(@"UserAgent = %@", [webView stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"]);
代码在webViewDidFinishLoad:
方法中打印用户代理,以查看用户代理是否更改。
然后我发现如果我把代码[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}];