因?yàn)槲覀僡pp原生和H5交互都是依靠設(shè)置WKWebView的userAgent實(shí)現(xiàn)交互,線上反饋一臺(tái)手機(jī)點(diǎn)擊按鈕沒反應(yīng),因?yàn)辄c(diǎn)擊按鈕是給到原生端處理,通過日志發(fā)現(xiàn)設(shè)置userAgent不成功導(dǎo)致。
解決方法如下:
網(wǎng)上資料如下,都是創(chuàng)建一個(gè)假的webView,最后設(shè)置真是webView的userAgent即可。
這么做確實(shí)是首個(gè)頁面設(shè)置成功了,但是進(jìn)到app里面頁面又存在設(shè)置不上的問題,因?yàn)槲覀兊脑O(shè)置userAgent的都是在每個(gè)webView的didStartProvisionalNavigation代理方法設(shè)置的。
最后是在AppDelegate文件全局設(shè)置userAgent解決了。
代碼如下:
#pragma mark - 設(shè)置全局userAgent
//修改userAgent
- (void)addToWebViewUserAgent {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
WKWebView *webView = [WKWebView new];
[webView evaluateJavaScript:@"navigator.userAgent" completionHandler:^(id _Nullable oldAgent, NSError * _Nullable error) {
if (![oldAgent isKindOfClass:[NSString class]]) {
// 為了避免沒有獲取到oldAgent,所以設(shè)置一個(gè)默認(rèn)的userAgent
// Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148
oldAgent = [NSString stringWithFormat:@"Mozilla/5.0 (%@; CPU iPhone OS %@ like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148", [[UIDevice currentDevice] model], [[[UIDevice currentDevice] systemVersion] stringByReplacingOccurrencesOfString:@"." withString:@"_"]];
}
NSString *userAgent = oldAgent;
//修改UserAgent
NSString *newUserAgent = [userAgent stringByAppendingString:@"C2Mobile/{1.0.0}"];
if (![newUserAgent containsString: @" SmartChasing"]) {
//修改UserAgent
newUserAgent = [newUserAgent stringByAppendingString:@" SmartChasing"];
}
NSString *barHeight = [NSString stringWithFormat:@";statusBarHeight:%f",kStatusBarHeight];
newUserAgent = [newUserAgent stringByAppendingString:barHeight];
[webView setCustomUserAgent:newUserAgent];
NSDictionary *userAgentDic = @{@"UserAgent": newUserAgent};
[[NSUserDefaults standardUserDefaults] registerDefaults:userAgentDic];
}];
});
}