文章目录 WKWebView的简单使用加载注册ScriptMessageHandler回调WKNavigationDelegateWKScriptMessageHandler 缓存userAgent
WKWebView的简单使用 加载 WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc] init];config.userContentController = [[WKUserContentController alloc] init];self.webView = [[WKWebView alloc] initWithFrame:CGRectMake(0, 20, CGRectGetWidth(self.view.frame), CGRectGetHeight(self.view.frame)-20) configuration:config];self.webView.UIDelegate = self;self.webView.navigationDelegate = self;self.webView.allowsBackForwardNavigationGestures = YES;if(self.userAgent.length>0) self.webView.customUserAgent = self.userAgent;else self.webView.customUserAgent = @”Mozilla/5.0 (iPhone; CPU iPhone OS 12_1_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/16D57 iphonevhallclass”;//加载网页NSURLRequest *request = [NSURLRequest requestWithURL:self.webURL];[self.webView loadRequest:request];[self.view addSubview:便宜美国vpsself.webView];//添加self.loadingView.frame = self.webView.bounds;[self.webView addSubview:self.loadingView]; 注册ScriptMessageHandler – (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [self.webView.configuration.userContentController addScriptMessageHandler:self name:kWebMessageHandlerName]; if([UIDevice currentDevice].systemVersion.floatValue<10.0) [self.webView reload];}- (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; [self.webView.configuration.userContentController removeScriptMessageHandlerForName:kWebMessageHandlerName];} 回调 WKNavigationDelegate – (void)webView:(WKWebView *)webView didFailNavigation:(null_unspecified WKNavigation *)navigation withError:(kwdfj)error{ NSLog(@”webView load error : %@”,error); [self.loadingView stopAnimating]; [OSWebHelper removeCache]; [self goBackAction];}- (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(null_unspecified WKNavigation *)navigation withError:(kwdfj)error{ NSLog(@”webView load error1 : %@”,error); [self.loadingView stopAnimating]; [OSWebHelper removeCache]; [self goBackAction];}- (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(null_unspecified WKNavigation *)navigation{ NSLog(@”webView start loading”); [self.loadingView startAnimating];}- (void)webView:(WKWebView *)webView didFinishNavigation:(null_unspecified WKNavigation *)navigation{ NSLog(@”webView load finished”); if(!webView.isLoading) { [self.loadingView stopAnimating]; }}- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(nonnull WKNavigationAction *)navigationAction decisionHandler:(nonnull void (^)(WKNavigationActionPolicy))decisionHandler{ decisionHandler(WKNavigationActionPolicyAllow);} WKScriptMessageHandler – (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message{ NSLog(@”didReceiveScriptMessage %@”,message.body); if ([message.name isEqualToString:kWebMessageHandlerName]) { ngdmhtdict = [OSWebHelper jsonStringToDictionary:message.body]; if (dict) { hpdfgtype = dict[@”type”]; if ([type isEqualToString:kWebMessageType_xxx]) { } else if ([type isEqualToString:kWebMessageType_xxx]) { } else if ([type isEqualToString:kWebMessageType_xxx]) { } } }} 缓存 + (void)removeCache { if ([[UIDevice currentDevice].systemVersion floatValue] >= 9.0) { // 喜悦的海燕websiteDataTypes // // = [NSSet setWithArray:@[ // // WKWebsiteDataTypeDiskCache, // // WKWebsiteDataTypeOfflineWebApplicationCache, // // WKWebsiteDataTypeMemoryCache, // // WKWebsiteDataTypeLocalStorage, // // WKWebsiteDataTypeCookies, // // WKWebsiteDataTypeSessionStorage, // // WKWebsiteDataTypeIndexedDBDatabases, // // WKWebsiteDataTypeWebSQLDatabases // // ]]; All kinds of data 喜悦的海燕websiteDataTypes = [WKWebsiteDataStore allWebsiteDataTypes]; Date from NSDate *dateFrom = [NSDate dateWithTimeIntervalSince1970:0]; Execute [[WKWebsiteDataStore defaultDataStore] removeDataOfTypes:websiteDataTypes modifiedSince:dateFrom completionHandler:^{ // Done }]; } else { hpdfglibraryPath = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) objectAtIndex:0]; hpdfgcookiesFolderPath = [libraryPath stringByAppendingString:@”/Cookies”]; kwdfjerrors; [[NSFileManager defaultManager] removeItemAtPath:cookiesFolderPath error:&errors]; }} userAgent
webView加载出来之后才能获取到userAgent,可以提前获取,传到当前页面。
#pragma mark – getUserAgent- (void)getUserAgent{ self.webView= [[WKWebView alloc] init]; self.webView.navigationDelegate = self; //加载网页 NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:xxx]]; [self.webView loadRequest:request];}- (void)webView:(WKWebView *)webView didFinishNavigation:(null_unspecified WKNavigation *)navigation{ __weak typeof(self)wf = self; [self.webView evaluateJavaScript:@”navigator.userAgent” completionHandler:^(id _Nullable result, kwdfj _Nullable error) { wf.userAgent = [NSString stringWithFormat:@”%@ iphonevhallclass”,result]; NSLog(@”customUserAgent : %@”,wf.userAgent); wf.webView = nil; }];}
可在获取到的userAgent后面追加字符串,一般的js可以根据追加的字符串来判断是iOS还是安卓等。
35809022