WKWebview和iOS交互篇
##iOS調用js
在UIWebview的時候使用JSContext來進行js通信,在WKWebview的時候,沒有JSContext了,但是Apple提供了新的方法evaluateScript,使用起來更便捷。
[self.webview evaluateJavaScript:@"document.title" completionHandler:^(id _Nullable title, NSError * _Nullable error) {
NSLog(@"title: %@", title);
}];
NSString *jsData = @"傳遞給h5的數據";
NSString *jsStr = [NSString stringWithFormat:@"setJSData('%@')", jsData];
[self.webview evaluateJavaScript:jsStr completionHandler:^(id _Nullable info, NSError * _Nullable error) {
//js設置成功
}];
- 通過evaluateScript的方式,可以直接使用js如:document.title來獲取html的title。
- 使用自定義的方法setJSData來處理。
上述通過setJSData的方式需要js端進行接收
var js_data;
window.setJSData= function(obj){
js_data = obj;
};
##js調用iOS
同樣在UIWebview的時候使用JSContext來進行js通信,在WKWebview的時候,沒有JSContext了,但是Apple提供了新的方法WKScriptMessageHandler。
js代碼:
var message = {
'method' : 'updateData',
'params' : 'dataStr',
};
window.webkit.messageHandlers.AWCall.postMessage(message);
///設置message.name
_userContent = [[WKUserContentController alloc] init];
[_userContent addScriptMessageHandler:self name:@"AWCall"];
//實現代理
- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message {
NSLog(@"JS 調用了 %@ 方法,傳回參數 %@", message.name,message.body);
NSLog(@"方法名:%@", message.name);
NSLog(@"參數:%@", message.body);
if ([message.name isEqualToString:@"AWCall"]) {
}
}