问题:使用web-view组件在iOS下进入任意url地址(用百度测试的,百度是根据userAgent判断显示PC页面还是手机页面),进去后userAgent被清空,百度显示为PC版本。
原因分析:在eeuiWKWebViewComponent.m文件中,wkWebView作为局部变量在block中已经被释放,若注释掉这段代码,userAgent未被清空。
建议:把wkWebView让类实例持有。
问题代码:
WKWebView *wkWebView = [[WKWebView alloc] initWithFrame:CGRectZero];
[wkWebView evaluateJavaScript:@"navigator.userAgent" completionHandler:^(id _Nullable result, NSError * _Nullable error) {
if (!error) {
NSString *versionName = (NSString*)[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
originalUserAgent = [NSString stringWithFormat:@"%@;ios_kuaifan_eeui/%@", result, versionName];
if (_userAgent.length > 0) {
originalUserAgent = [NSString stringWithFormat:@"%@/%@", originalUserAgent, _userAgent];
}
[storage setCachesString:@"__system:originalUserAgent" value:originalUserAgent expired:0];
NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:originalUserAgent, @"UserAgent", nil];
[[NSUserDefaults standardUserDefaults] registerDefaults:dictionary];
}
Block中error报错信息:
Printing description of error:
Error Domain=WKErrorDomain Code=3 "WKWebView已失效" UserInfo={NSLocalizedDescription=WKWebView已失效}
建议修改代码:
定义:
@interface eeuiWKWebViewComponent() <WKNavigationDelegate, WKUIDelegate>
{
WKWebView *webView;
}
使用:
if (webView == nil) {
webView = [[WKWebView alloc] init];
}
[webView evaluateJavaScript:@"navigator.userAgent" completionHandler:^(id _Nullable result, NSError * _Nullable error) {