JS和Native交互之 - 运用JavaScriptCore框架进行交互

在iOS 7之后,apple添加了一个新的库JavaScriptCore,用来做JS交互,因此JS与原生OC交互也变得简单了许多。
首先导入JavaScriptCore库, 然后在OC中获取JS的上下文

JSContext *context = [self.webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];

再然后定义好JS需要调用的方法,例如JS要调用share方法:
则可以在UIWebView加载url完成后,在其代理方法中添加要调用的share方法:

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    JSContext *context = [self.webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
//用block定义要被JS调用的方法
NSNumber* (^do_something)(void) = ^(void){
    BOOL singleDog = [programmer isSingle];
    int someData = singleDog?1:-1; 
    return [NSNumber numberWithInt:someData];//数据类型应为Number,此时即为OC向JS传值
};
//在JS中添加了一个方法指针 do_something
context[@"do_something"] = do_something;
or// //定义好JS要调用的方法, share就是调用的share方法名 context[@"share"] = ^() { NSLog(@"+++++++Begin Log+++++++"); NSArray *args = [JSContext currentArguments]; UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"方式二" message:@"这是OC原生的弹出窗" delegate:self cancelButtonTitle:@"收到" otherButtonTitles:nil]; [alertView show]; for (JSValue *jsVal in args) { NSLog(@"%@", jsVal.toString); } NSLog(@"-------End Log-------"); };}

其中相对应的html部分如下:

<html>
    <header>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <script type="text/javascript">

            function secondClick() {
//js调用iOS
                share('分享的标题','分享的内容','图片地址');
            }

        function showAlert(message){
            alert(message);
        }

        </script>
    </header>

    <body>
        <h2> 这里是第二种方式 </h2>
        <br/>
        <br/>
        <button type="button" onclick="secondClick()">Click Me!</button>

    </body>
</html>

JS部分确实要简单的多了。

iOS 调用JS

JSContext *context = [self.webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
NSString *textJS = @"showAlert('这里是JS中alert弹出的message')";
[context evaluateScript:textJS];

阅读更多
上一篇JS和Native交互之 -UIWebView的代理方法
下一篇cocoa pods 之 遇到 Updating local specs repositories
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭