JavaScriptCore使用

来源:互联网 发布:jsp和javascript的用途 编辑:程序博客网 时间:2024/05/22 01:57

js 调用 oc

1.自定义协议并继承 JSExport 协议

@protocol MyJSExport <JSExport>  -(void)test;@end

2.实现 MyJSExPort 协议

@interface MyJSObject ()<MyJSExport>@end@implementation MyJSObject    -(void)test{        //do something    }@end

3.在 webViewDidFinishLoad 方法中获取 JSContext 对象(可以把 JSContext 理解为一个字典),并注入 oc 对象

@interface ViewController ()<UIWebViewDelegate>@property (weak, nonatomic) IBOutlet UIWebView *webview;@property (nonatomic, strong) JSContext *context;@end@implementation ViewController-(void)viewDidLoad {    [super viewDidLoad];    _webview.delegate = self;    NSURL *url = [NSURL fileURLWithPath:@"/Users/macmini/Desktop/1.html"];    [_webview loadRequest:[NSURLRequest requestWithURL:url]];}-(void)webViewDidFinishLoad:(UIWebView *)webView{    _context = [self.webview valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];    MyJSObject *jsObject = [MyJSObject new];    _context[@"MyObj"] = jsObject;}@end

4.在 html 中调用 oc 方法

<!DOCTYPE html><html>    <head>        <meta charset="utf-8">        <title>test javascript</title>    </head>    <body>        <div>            <button onclick="MyObj.test()">点击调用OC方法</button>         </div>    </body></html>

oc 调用 js 方法

1、在 Html 定义回调方法

<!DOCTYPE html><html>    <head>        <meta charset="utf-8">        <title>test javascript</title>        <script type="text/javascript">            function test(a) {                alert(a);            }        </script>    </head>    <body>    </body></html>

2.调用 JSContext 的 evaluateScript 方法执行 js 函数

[_context evaluateScript:@"test(123)"];