美文网首页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