設計思路
- 創(chuàng)建WKWebViewConfiguration對象,配置該對象的userContentController屬性,這里需要注冊html中預留的接口“jsCallOC”
WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc]init];
//2.配置JS
WKUserContentController *userContentController = [[WKUserContentController alloc]init];
//定義了js中將要調用oc的方法名
//注冊html中預留的接口jsCallOC
[userContentController addScriptMessageHandler:self name:@"jsCallOC"];
config.userContentController = userContentController;
- 創(chuàng)建wkwebView對象
//3.顯示wkWebView
self.webView = [[WKWebView alloc]initWithFrame:CGRectMake(10,100,200,400) configuration:config];
self.webView.UIDelegate = self;
[self.view addSubview:self.webView];
NSURL *url = [[NSBundle mainBundle] URLForResource:@"test" withExtension:@"html"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[self.webView loadRequest:request];
- 準備HTML代碼,創(chuàng)建一個button,點擊button之后會調用
window.webkit.messageHandlers.jsCallOC.postMessage(dict)方法,該方法會將字典數(shù)據(jù)傳遞給oc代碼層。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>This is a testing</title>
</head>
<body>
<h1>Tested Html</h1>
<button name="Click Me" type="button" onclick="onClickButton()" style="width: 100px; height: 30px;"></button>
<script type="application/javascript">
function onClickButton() {
var list = [1,2,3];
var dict = {"name" : "陽君","qq":"3300333221","data":"123","array":list};
alert(dict);
window.webkit.messageHandlers.jsCallOC.postMessage(dict);
}
</script>
</body>
</html>
- OC代碼層會響應js的事件傳遞,并調用userContentController: didReceiveScriptMessage方法。這里可以做相應的操作。
//這里取得oc的方法名
- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message{
NSLog(@"方法名:%@",message.name);
NSLog(@"參數(shù)名:%@",message.body);
//方法名
NSString *methods = [NSString stringWithFormat:@"%@:",message.name];
SEL selector = NSSelectorFromString(methods);
//調用方法
if ([self respondsToSelector:selector]) {
[self performSelector:selector withObject:message.body];
}else{
NSLog(@"未實行方法:%@",methods);
}
}
-(void)jsCallOC:(id)body{
NSLog(@"jsCallOC function called");
}