iOSWebViewJavascriptBridge初步尝试与图文详细讲解

本文详细介绍了如何在iOS中使用WebViewJavascriptBridge进行iOS与JavaScript的交互,包括开启日志、建立桥梁、注册处理方法以及直接调用JS端的方法。示例代码展示了Objective-C如何调用JS以及JS如何调用Objective-C,帮助开发者理解两者之间的通信流程。
摘要由CSDN通过智能技术生成

iOS WebViewJavascriptBridge初步尝试与图文详细讲解 - 那一抹风情 - 博客园

iOS端如何使用

  • 第一步:开启日志
  • // 开启日志,方便调试
  • [WebViewJavascriptBridge enableLogging];
  • 第二步:给ObjC与JS建立桥梁
  • // 给哪个webview建立JS与OjbC的沟通桥梁
  • self.bridge = [WebViewJavascriptBridge bridgeForWebView:webView];
  • // 设置代理,如果不需要实现,可以不设置
  • [ self . bridge  setWebViewDelegate :self ] ;
  • 第三步:注册HandleName,用于给JS端调用iOS端
  • // JS主动调用OjbC的方法
  • // 这是JS会调用getUserIdFromObjC方法,这是OC注册给JS调用的
  • // JS需要回调,当然JS也可以传参数过来。data就是JS所传的参数,不一定需要传
  • // OC端通过responseCallback回调JS端,JS就可以得到所需要的数据
  • [ self . bridge  registerHandler : @"getUserIdFromObjC"  handler : ^ ( id  data ,  WVJBResponseCallback  responseCallback )  {
  •      NSLog ( @"js call getUserIdFromObjC, data from js is %@" ,  data ) ;
  •      if  ( responseCallback )  {
  •        // 反馈给JS
  •        responseCallback ( @ { @"userId" :  @"123456" } ) ;
  •      }
  • 第四步: OC 直接调用JS端注册的HandleName
  • [self.bridge callHandler:@"getUserInfos" data:@{@"name": @"标哥"} responseCallback:^(id responseData) {
  •      NSLog ( @"from js: %@" ,  responseData ) ;
  • } ] ;
  • js代码截取片段
  • 解释:这段代码是必须的,申明交互直接拷贝即可,处理交互部分,需要改动,关键就是和oc端协商的方法名,以及js内部需要的处理逻辑。
  • <!-- 申明交互 -->
        function setupWebViewJavascriptBridge(callback) {
             if  (window.WebViewJavascriptBridge) {  return  callback(WebViewJavascriptBridge); }
             if  (window.WVJBCallbacks) {  return  window.WVJBCallbacks.push(callback); }
            window.WVJBCallbacks  =  [callback];
             var  WVJBIframe = document.createElement( ' iframe ' );
            WVJBIframe.style.display  ' none ' ;
            WVJBIframe.src  ' https://__bridge_loaded__ ' ;
            document.documentElement.appendChild(WVJBIframe);
            setTimeout(function() { document.documentElement.removeChild(WVJBIframe) },  0 )
        }
         <!-- 处理交互  方法名要和ios内定义的对应-->
        setupWebViewJavascriptBridge(function(bridge) {
             <!--处理 oc 调用 js -->
            bridge.registerHandler( ' registerAction ' , function(data, responseCallback) {
                 // 处理oc给的传参
                alert( ' oc请求js  传值参数是: ' + data)                               
                 var  responseData = {  ' result ' : ' handle success '  }
                 // 处理完,回调传值给oc
                responseCallback(responseData)
            })
             var  callbackButton = document.getElementById( ' buttons ' ).appendChild(document.createElement( ' button ' ))
            callbackButton.innerHTML  ' 点击我,我会调用oc的方法 '
            callbackButton.onclick  =  function(e) {
                e.preventDefault()                                 
                 <!--处理 js 调用 oc -->
                bridge.callHandler( ' loginAction ' , { ' userId ' : ' zhangsan ' , ' name ' ' 章三 ' }, function(response) {
                      // 处理oc过来的回调
                     alert( ' 收到oc过来的回调: ' + response)
                })
            }
        })
使用案例和截图: 

 

WKWebView:window.webkit.messageHandlers.openBrowserWithLoan.postMessage(['https://www.baidu.com';]);    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值