前言
基于UIWebView的JS与OC交互(一)之JSExport
基于UIWebView的JS与OC交互(二)之拦截URL
基于UIWebView的JS与OC交互(三)之Block
基于WKWebView的JS与OC交互
本篇文章继续介绍JS与OC交互,使用方式Block方式。
Demo
正文
注意事项:
1、需要移动端与H5商定调用id;
2、需要移动端与H5商定id调用的方法名称;
3、主要规避block中的内存泄漏问题;
4、此方法适用于UIWebView。
代码如下:
在ViewController.m文件中
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
[self blockMethod];
}
//方法三:js调用oc本地方法,Block方式
- (void)blockMethod
{
__weak ViewController *vc = self;
JSContext *context=[webPageView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
/**注意循环引用问题*/
//调用id:test
context[@"test"] = ^(id str)
{
NSArray *values = [JSContext currentArguments];
for (JSValue *value in values)
{
//本地方法名称:showAlert1
if ([[value toString] isEqualToString:@"showAlert1"])
{
[vc showAlert1];
}
}
};
}
- (void)showAlert1
{
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"提示" message:@"Block之JS调用本地方法" delegate:nil cancelButtonTitle:@"ok" otherButtonTitles:nil, nil];
[alert show];
}
HTML文件写法如下:
<div>
<input type="button" value="方式三:Block" onclick="show1()">
</div>
<script type="text/javascript">
function show1(){
//test:调用id
//showAlert1:oc本地方法名
test('showAlert1');
}
</script>
iOS技术交流群:681732945