WKwebView借助于WebViewJavascriptBridge与js交互

  1. 设置属性

    @property WKWebViewJavascriptBridge* bridge;
    
  2. 初始化 WebViewJavascriptBridge

    if (_bridge) { return; }
    //打开输出日志
    [WKWebViewJavascriptBridge enableLogging];
     _bridge = [WKWebViewJavascriptBridge     bridgeForWebView:self.wkWebView];
     [_bridge setWebViewDelegate:self];
    //请求加载网页,注意:这里h5加载完,会自动执行一个调用oc的方法
    [self loadExamplePage:self.wkWebView];
    

3.注册监听js动作。将js动作在客户端实现

  - (void)viewDidLoad {
   //监听方法。  js 调用 OC
    [self jsJumpToLogin];
   }

 //跳转到登录 jswv_login
 - (void)jsJumpToLogin{
   // 只要js那边有调用jswv_login  在 代码块中会自动响应我们写的方法
 // 当然方法名俩端一致 。不然监听个什么东西 ??
[_bridge registerHandler:@"jswv_login" handler:^(id data, WVJBResponseCallback responseCallback) {
    
    //注销
    [ChildHttpReq Post:ALogout parm:nil showHud:YES sucess:^(NSDictionary *responseObject) {
        
        if ([responseObject[@"result"] isEqual:@200]) {
            //延迟一秒
            dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
               
                //跳转到登录页
                LoginViewController *loginVC = [LoginViewController new];
                [self.navigationController pushViewController:loginVC animated:NO];
            });
        }
        
    } failure:^(NSError *error) {
        
        NSLog(@"%@",error);
    }];
}];

}

  1. OC 回调js
    // // 主动调用 js方法。让js做动作...
 - (void)chooseAll{
     [_bridge callHandler:@"wvjs_bottomLeftBtn"];
  }
  1. wk 在用WebViewJavascriptBridge这个框架的时候。 会因为初始化慢的问题,有时候交互有用有时候交互又没用。此时应该叫后台的伙伴。在没获取到的时候。再重新获取即可。。。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容