標籤:tps uiwebview test move rem use 邏輯 代理 content
本篇主要講的是UIWebView和JS的互動,UIWebView和JS互動的詳解https://www.cnblogs.com/llhlj/p/6429431.html
一. WKWebView調用JS
[webView evaluateJavaScript:@"我是JS" completionHandler:^(id _Nullable response, NSError * _Nullable error) { }];
該方法為非同步執行
二.JS調用OC
當JS端想傳一些資料給iOS.那它們會調用下方方法來發送.
window.webkit.messageHandlers.<對象名>.postMessage(<資料>)
上方代碼在JS端寫會報錯,導致頁面後面業務不執行.可使用try-catch
執行.
那麼在OC中的處理方法如下.它是WKScriptMessageHandler的代理方法.name和上方JS中的對象名相對應.
- (void)addScriptMessageHandler:(id <WKScriptMessageHandler>)scriptMessageHandler name:(NSString *)name;
具體添加如下
1.設定addScriptMessageHandler的代理和名稱
WKWebViewConfiguration *configuration = [[WKWebViewConfiguration alloc] init]; WKUserContentController *userContentController = [[WKUserContentController alloc] init]; [userContentController addScriptMessageHandler:self name:@"test"]; configuration.userContentController = userContentController; // WKPreferences *preferences = [WKPreferences new]; preferences.javaScriptCanOpenWindowsAutomatically = YES;// preferences.minimumFontSize = 40.0; configuration.preferences = preferences; _webView = [[WKWebView alloc] initWithFrame:CGRectMake(0, 0, WIDTH, HEIGHT64) configuration:configuration];
2.WKScriptMessageHandler協議方法
- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message{ //JS調用OC方法 //message.boby就是JS裡傳過來的參數 NSLog(@"body:%@",message.body); if ([message.name isEqualToString:@"test"]) { //具體邏輯 [self sendMessage:message.body]; } }
3.銷毀
- (void)dealloc { ... [[_webView configuration].userContentController removeScriptMessageHandlerForName:@"對象名"]; ...}
iOS下JS與原生的互動二