##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"]) { } }