美文网首页iOS高质量博客
iOS OC调用JavaScript

iOS OC调用JavaScript

作者: 像风一样的孩子丶 | 来源:发表于2016-09-30 12:07 被阅读123次

    最近看了一下js与oc的相互调用.

    1.记得之前在webview中使用js.是使用webview的方法进行调用.

    - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
        ...
        NSString *jsStr = [NSString stringWithFormat:@"alert('%@')",@"js调取oc弹框"];
        [webView stringByEvaluatingJavaScriptFromString:jsStr];
        ...
        return YES;
    }
    - (void)webViewDidFinishLoad:(UIWebView *)webView {
        NSString *jsStr = [NSString stringWithFormat:@"alert('%@')",@"js调取oc弹框"]; 
        [webView stringByEvaluatingJavaScriptFromString:jsStr];
    }
    

    注意:上方调取系统弹框会阻塞进程.
    上面是使用js调用oc,当然也可以使用它来执行一些js代码.可以使用其他js代码来改变webview中的某些数据啊都可以的.

    2.使用JavaScriptCore.它是iOS7之后被添加的.
    使用它先添加JavaScriptCore框架.然后导入

    #import <JavaScriptCore/JavaScriptCore.h>  
    

    最后在webview的协议方法中调取就行了.

    - (void)webViewDidFinishLoad:(UIWebView *)webView
    {
        //获取webview中的js内容
        JSContext *context = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
        NSLog(@"%@",context);
        NSString *hiddenHeader = @"window.onload=function(){var head= document.getElementById(\"head\");head.style.display = \"none\"}";
        //准备执行的js代码
        [context evaluateScript:hiddenHeader];
    }
    

    上方代码是使用oc来调用js代码的.
    当然也可以使用js来调用oc.比如我们创建一个js方法"test"来进行调用oc代码.

    - (void)webViewDidFinishLoad:(UIWebView *)webView {
        JSContext *context = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
        //要调用的方法(此方法创建的是js的方法,只不过是用OC写的)
        context[@"test"] = ^() {
            NSArray *args = [JSContext currentArguments];
            for (JSValue *jsVal in args) {
                //打印传来的值
                NSLog(@"%@", jsVal.toString);
            }
        };
        
        //在此处往js方法中传值  --  然后会在上方block回调打印出来值
        NSString *jsValueStr1 = @"test('value1')";
        [context evaluateScript:jsValueStr1];
        NSString *jsValueStr2 = @"test('value2')";
        [context evaluateScript:jsValueStr2];
    }
    

    相关文章

      网友评论

        本文标题:iOS OC调用JavaScript

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