首页 » 其他知识 » js如何调用ios内部oc方法的解决方法

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

高蒙 2016/11/09 19:17 1.9k浏览 0评论 其他知识


在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的交互问题。





相关文章

我有话说

站长昵称:(*)

输入内容:

选个头像:

评论列表

    ...

    高蒙

    男, PHP程序猿

    文章

    487

    标签

    42

    热度

    10w+

    南京, 江苏, 中国

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