WebView与JS交互那些事儿

UIWebView之JS与OC交互(三)

2019-02-25  本文已影响0人  Jc可乐控丶

前言

基于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>
image.png

iOS技术交流群:681732945

上一篇 下一篇

猜你喜欢

热点阅读