zoukankan      html  css  js  c++  java
  • WebViewJavascriptBridge详细使用

    前言

    WebViewJavascriptBridge是支持到iOS6之前的版本的,用于支持native的iOS与javascript交互。如果需要支持到iOS6之前的app,使用它是很不错的。本篇讲讲WebViewJavascriptBridge的基本原理及详细讲讲如何去使用,包括iOS端的使用和JS端的使用。

    经过多番百度、Google,发现WebViewJavascriptBridge的资源讲解不是翻译官方文档就是直接说官方提供的demo。但是笔者在写这个demo时也遇到了不少问题,也想看看大家是怎么使用的,特别是JS端,弄了好久都没有回调,原来是因为log。

    写下本篇文章,希望大家少走弯路吧!

    本Demo效果图

    image

    iOS与H5交互的方案

    纵观所有iOS与H5交互的方案,有以下几种:

    • 第一种:有很多的app直接使用在webview的代理中通过拦截的方式与native进行交互,通常是通过拦截url scheme判断是否是我们需要拦截处理的url及其所对应的要处理的功能是什么。任意版本都支持。
    • 第二种:iOS7之后出了JavaScriptCore.framework用于与JS交互,但是不支持iOS6,对于还需要支持iOS6的app,就不能考虑这个了。若需要了解,看最后的推荐阅读。
    • 第三种:WebViewJavascriptBridge开源库使用,本质上,它也是通过webview的代理拦截scheme,然后注入相应的JS。
    • 第四种:react-native,这个没玩过(与前三种不同)。

    本篇文章专讲讲WebViewJavascriptBridge。

     

    WebViewJavascriptBridge的基本原理

    我们看看WebViewJavascriptBridge.m中Webview代理拦截的代码:

    在拦截后,通过先通过-isBridgeLoadedURL:方法判断URL是否是需要bridge的URL,若是,则通过injectJavascriptFile方法注入JS;否则判断URL是否是队列消息,若是,则执行查询命令JS并刷新消息队列;最后,URL被识别为未知的消息。

    JS端如何使用

    下面是本demo的HTML完整代码:

    在JS端,嵌入步骤是:

    • 第一步:将下面的代码放在JS中:

    这段代码是固定的,必须要放到js中。

    • 第二步:在下面的方法体里写相关JS代码:

    JS如何调用iOS代码

    通过bridge.callHandler来调用:

    其中,各参数说明如下:

    JS端加入WebViewJavascriptBridge代码注意事项

    如果在下面的函数体内有任何错误,都不会有打印日志,也不会有任何回调:

    因此,如果遇到什么也没有输出,说明你写错了。另外,上面有demo中,log函数是自定义的,不是系统的,因此如果没有加入这个函数的定义,调用它也会导致不能交互。

    iOS端如何使用

    • 第一步:开启日志
    • 第二步:给ObjC与JS建立桥梁
    • 第三步:注册HandleName,用于给JS端调用iOS端
    • 第四步:直接调用JS端注册的HandleName

    源代码

    大家可以到GITHUB下载源代码,喜欢就随手给个Star:WebViewJavascriptBridgeDemo

    最后

    由于很多朋友不太会使用这个库,再加上群里的小伙伴们经常问这个问题,因此决定写一篇文章来教大家如何去使用。其实在此之前,笔者也没有使用过这个东西。

    使用这个库有什么缺点?最明显的就是要固定加入相关代码,而且JS代码要放在固定的函数内添加。那么安卓端是否也支持这样呢?如果不支持,那么H5端要分别判断ios、安卓?由于没有在公司使用过,因此只能带着这些疑问,究竟是否通用。

    如果大家在公司使用过,那么一定了解安卓是否兼容。还请大家给笔者在评论中说说!谢谢!

    推荐阅读

  • 相关阅读:
    php多态
    ssl certificate problem: self signed certificate in certificate chain
    test plugin
    open specific port on ubuntu
    junit vs testng
    jersey rest service
    toast master
    use curl to test java webservice
    update folder access
    elk
  • 原文地址:https://www.cnblogs.com/jiang-xiao-yan/p/5345755.html
Copyright © 2011-2022 走看看