js如何调用ios内部oc方法的解决方法

 其他知识   高蒙   阅读(1459)   评论(0)   2016-11-09 19:17:58     


在app中嵌入html5的功能,需要实现能够调用ios内部的录音功能。所以,要写个demo看看js能不能调用到oc方法。通过检测,js完全可以调用ios内部的oc方法。下面是具体的实现代码。

ios代码实现:

1、首先在建立一个UIWebView。

#import "webview.h"  
#import <JavaScriptCore/JavaScriptCore.h>  
  
@implementation webview  
  
-(id)initWithFrame:(CGRect)frame  
{  
    self=[super initWithFrame:frame];  
      
    if( self ){  
        self.webview=[[UIWebView alloc]initWithFrame:CGRectMake(0, 310, self.bounds.size.width, 300)];  
        self.webview.backgroundColor=[UIColor lightGrayColor];  
        NSString *htmlPath=[[NSBundle mainBundle] resourcePath];  
        htmlPath=[htmlPath stringByAppendingPathComponent:@"html/index.html"];  
        NSURL *localURL=[[NSURL alloc]initFileURLWithPath:htmlPath];  
        [self.webview loadRequest:[NSURLRequest requestWithURL:localURL]];  
        [self addSubview:self.webview];  
  
         JSContext *context = [self.webview valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];  
         context[@"log"] = ^() {  
  
            NSLog(@"+++++++Begin Log+++++++");  
            NSArray *args = [JSContext currentArguments];  
  
            for (JSValue *jsVal in args) {  
                NSLog(@"%@", jsVal);  
            }  
  
            JSValue *this = [JSContext currentThis];  
            NSLog(@"this: %@",this);  
            NSLog(@"-------End Log-------");  
  
        };  
    }  
    return self;  
}  
@end

2、在上述代码中,使用javascriptCore.framework,首先使用UIWebview加载一个静态网页,并使用JSContext *context = [self.webview valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];获取该UIWebview的javascript执行环境。

3、在该javascript执行环境中,定义一个js函数,这个函数的执行体完全是 Objective-C代码写的。

    context[@"jakilllog"] = ^() {  
  
        NSLog(@"Begin Log");  
        NSArray *args = [JSContext currentArguments];  
  
        for (JSValue *jsVal in args) {  
            NSLog(@"%@", jsVal);  
        }  
  
        JSValue *this = [JSContext currentThis];  
        NSLog(@"-------End Log-------");  
  
    };

html代码:

<button id="hallo" onclick="buttonClick()"> 点击button</button>
<script>
function buttonClick()  
{  
    jakilllog("hello world"); 
} 
</script>

这个时候点击button就可以看到,在ios下打印的信息了,走到这一步说明js是可以正常调用ios内部oc的方法的。对此我们可以在设置点形参,

return返回ios处理的值等更加复杂的业务逻辑了。是不是很轻松就能实现js与oc的交互问题。





相关文章



我要评论


站长昵称:(*)

输入内容:


评论列表


高蒙

男,程序猿一枚

 

人生要是没有理想, 那跟一条咸鱼有什么分别。


关于我

  http://www.shuchengxian.com

高蒙个人博客是以PHP技术为主的程序员个人博客。博客主要发布php开发中遇到的问题以及解决办法,同时个人博客也分享网站模板素材,jquery插件等方面素材。


站点声明:相关侵权、举报、投诉及建议等,请发E-mail:936594075#qq.com(#替换成@)。

Copyright © 2018, www.shuchengxian.com, All rights reserved. 个人博客皖公网安备 34152302000022号 皖ICP备15015490号

关键词:个人博客,PHP博客,PHP博客程序,高蒙博客,高蒙个人博客,php程序员博客,程序员个人博客