iOS8以下大家用的UIWebView
1、JS调用iOS
ios 端声明方法 TryClothes 并在block中处理js调用函数是发过来 的参数
JSContext* context = [self.mainWebView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"]; context[@"TryClothes"] = ^() { NSArray *args = [JSContext currentArguments]; if (args.count>0) { JSValue *jsVal = args[0]; NSDictionary *dic = jsVal.toDictionary; NSLog(@"%@", dic); }
H5端调用方法:
TryClothes(str1,str2);
2、iOS调用js
js实现function
function testClick(str1,str2) { }
ios 调用
- //首先创建JSContext 对象(此处通过当前webView的键获取到jscontext)
- JSContext *context=[webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
NSString *jsFunctStr1=@"testClick('参数a','参数b')";
[context evaluateScript:jsFunctStr1];
iOS8以上 用wkwebview
1、JS调用iOS
ios 端声明方法 TryClothes 并在block中处理js调用函数是发过来 的参数
首先要在wkwebview定义是声明方法
// 创建一个webiview的配置项 WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc]init]; // Webview的偏好设置 // 设置偏好设置 config.preferences = [[WKPreferences alloc]init]; // 默认为0 config.preferences.minimumFontSize = 10; // 默认认为YES config.preferences.javaScriptEnabled = YES; // 在iOS上默认为NO,表示不能自动通过窗口打开 config.preferences.javaScriptCanOpenWindowsAutomatically = NO; // 通过JS与webview内容交互 config.userContentController = [[WKUserContentController alloc]init]; // 注入JS对象名称AppModel,当JS通过AppModel来调用时, // 我们可以在WKScriptMessageHandler代理中接收到 [config.userContentController addScriptMessageHandler:self name:@"TryClothes"];
_wkWebView = [[WKWebView alloc] initWithFrame:CGRectMake(0, 0, winsizeW, winsizeH-55-64) configuration:config];
在wkwebview的代理方法里面处理
#pragma mark -@protocol WKScriptMessageHandler <NSObject> - (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message { NSLog(@"WKScriptMessageHandler。message.name = %@", message.name); UserInfo *userinfo = [UserInfo unarchiveObject]; if ([message.name isEqualToString:@"TryClothes"]) { // 打印所传过来的参数,只支持NSNumber, NSString, NSDate, NSArray, // NSDictionary, and NSNull类型 NSLog(@"%@", message.body); NSDictionary *dic = message.body; } }
JS调用的方法
//JS响应方法列表
function btnClick1() {
window.webkit.messageHandlers.TryClothes.postMessage(null)
}
2、iOS调用js
js声明方法
//JS响应方法列表
function btnClick1(参数) {
}
iOS调用的方法:
NSString *jsFunctStr1=[NSString stringWithFormat:@"btnClick1('%@')",@“参数”]; QLOG(@"jsFunctS", jsFunctStr1); [self.wkWebView evaluateJavaScript:jsFunctStr1 completionHandler:nil];