美文网首页WebView与JS交互那些事儿
UIWebView之JS与OC交互(三)

UIWebView之JS与OC交互(三)

作者: Jc可乐控丶 | 来源:发表于2019-02-25 17:38 被阅读0次

    前言

    基于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

    相关文章

      网友评论

        本文标题:UIWebView之JS与OC交互(三)

        本文链接:https://www.haomeiwen.com/subject/qtggyqtx.html