美文网首页
UIWebView 和 JS 相互调用

UIWebView 和 JS 相互调用

作者: aaa000 | 来源:发表于2017-04-27 09:38 被阅读135次

使用JSContext 实现 UIWebView 和 JS 相互调用

  1. 要使用JSContext 必须在工程中加入JavaScriptCore.framework 依赖库
    在使用的位置导入#import <JavaScriptCore/JavaScriptCore.h>

2.创建一个 protocol 文件 遵循<JSExport>协议 声明一些JS将会调用的function

B0CDC2CB-BE49-4B67-8D8D-4AF25D87A703.png

3.UIWebView 加载link 设置代理并且 实现代理内部的方法(……)

4.在加载UIWebView的控制器中 实现刚才创建的协议 并且实现协议中的方法
eg:@interface ViewController ()<UIWebViewDelegate,JSObjcDelegate>

-(void)onAdReady{
    NSLog(@"%s",__func__);
}
-(void)textFunction2{
    NSLog(@"%s",__func__);
}
  1. OC 调用 JS function
    方式1 : [webView stringByEvaluatingJavaScriptFromString:@"funcName()"];

      方式2 : 在WebView 的代理中
    
       ```- (void)webViewDidFinishLoad:(UIWebView *)webView
       {
             //获取 js中的上下文
             self.jsContext = [self.secondWebView      
                  valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
               //给JS中调用OC方法的对象赋值
               self.jsContext[@"yilian"] = self;
               self.jsContext.exceptionHandler = ^(JSContext *context, JSValue *exceptionValue) {
               context.exception = exceptionValue;
               NSLog(@"异常信息:%@", exceptionValue);
                   };      
             //获取js中方法的名称
             JSValue *JSfunc =self.jsContext[@"funcName"];
             //js 执行方法
             [JSfunc callWithArguments:nil];  
            }```
    
  2. js 调用OC 中的 function

    - (void)webViewDidFinishLoad:(UIWebView *)webView{
      //获取 js中的上下文
          self.jsContext = [self.secondWebView       
        valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
        //给JS中调用OC方法的对象赋值
         self.jsContext[@"yilian"] = self;
           self.jsContext.exceptionHandler = ^(JSContext *context, JSValue *exceptionValue) {
            context.exception = exceptionValue;
             NSLog(@"异常信息:%@", exceptionValue);
            };
          //获取js中方法的名称
          JSValue *JSfunc =self.jsContext[@"funcName"];
          //js 执行方法
         [JSfunc callWithArguments:nil];
 }

1.给调用对象赋值
2.在协议中声明 js 需要调用的方法
3.在控制器中遵循 协议并且实现协议中的方法

相关文章

网友评论

      本文标题:UIWebView 和 JS 相互调用

      本文链接:https://www.haomeiwen.com/subject/lalgzttx.html