ZWebView

ZWebView for Hybird App,建立移动端和Web的JS桥接框架,主要包含了多种常用协议的约束和定义。Android的WebView使用更方便。

最新介绍

https://www.zyao89.cn/blog/article/5a97fa8b632e353ffd14d44a
可在此网站进行留言。

Github: ZWebView.git

更新说明

  • 1.0.0 创建Android库zweb
  • 1.0.1 更新一些简单问题
  • 1.0.2 添加新注解@ZJson,修复IOC实现方式无法传json参数
  • 1.0.3 添加新注解@ZData,传入字符串,web端接收到的参数格式为 { 'ZData', String }

Web

分为三种方式

  1. Vue插件注入方式(有些问题,不建议使用)

使用Vue时,可导入vue-zweb插件使用。具体参考 vue-zweb

  1. H5标签协议注入方式

可通过在html文件中引入

  1. 普通手动注入方式

Android

引入方式:

Gradle > v3.0

implementation 'com.zyao89.view:zweb:1.0.2'

Gradle < v3.0

compile 'com.zyao89.view:zweb:1.0.2'

安卓也对应采用三种交互方式

对应的3中枚举类型如下:

public enum InjectionMode{    // vue插件方式,引入  vue-zweb.js  例如:    VuePlugin,    // 协议方式:zweb://  例如:    Protocol,    // 普通人工引入     Normal}

基本使用方式:

  • Step1,初始化:
    在自定义的Application中初始化 ZWebView,方法如下:
@Overridepublic void onCreate(){    super.onCreate();    ZWebInstance.init(this);}
  • Step2,构建 ZWebConfig 配置文件,并创建 ZWeb 对象实例。
String MAIN_HTML = "file:///android_asset/index.html";// 1. 创建配置文件,并带入主页 URLZWebConfig config = new ZWebConfig.Builder(ZWebConstant.MAIN_HTML_TEST)    // 注册状态监听    .setOnStateListener(this)    // 注册原生协议UI实现    .setNativeMethodImplement(this)    // 注册一些特殊的实现方法//  .setOnSpecialStateListener(this)    // 选择注入模式    .setInjectionMode(InjectionMode.VuePlugin)    // 自动注入框架脚本JS(建议配置)    .autoInjectFramework()    // 自动注入扩展方法    .autoInjectExtendsJS()    // 添加 assets 中js文件注入//  .addInjectJSAssetsFile("js/test.js")    // 添加 raw 中js文件注入//  .addInjectJSRawFile(R.raw.index_test)    .build();// 2. 创建ZWeb对象实例.mZWebInstance = ZWebInstance.createInstance(config);
  • Step3,传递Activity的生命周期,如下:
// mRootView 为根ViewGroup容器 (必须)@Overrideprotected void onCreate(Bundle savedInstanceState){    //...    mZWebInstance.onActivityCreate(mRootView);    //...}// 分别实现其他生命周期传递@Overridepublic void onBackPressed(){    if (!mZWebInstance.onActivityBack())    {        super.onBackPressed();    }}@Overrideprotected void onPause(){    mZWebInstance.onActivityPause();    super.onPause();}@Overrideprotected void onResume(){    mZWebInstance.onActivityResume();    super.onResume();}@Overrideprotected void onStart(){    mZWebInstance.onActivityStart();    super.onStart();}@Overrideprotected void onStop(){    mZWebInstance.onActivityStop();    super.onStop();}@Overrideprotected void onDestroy(){    mZWebInstance.onActivityDestroy();    super.onDestroy();}

一些内部状态监听实现

以下为实现监听状态接口时,所需要实现的方法。

/*** 框架初始化成功后回调** @param zWebHandler* @param width 宽* @param height 高*/void onZWebCreated(IZWebHandler zWebHandler, int width, int height);/*** 异常(JS如果有异常会在这里回调)** @param zWebHandler* @param errorCode 错误码* @param message 错误信息*/void onZWebException(IZWebHandler zWebHandler, long errorCode, String message);/*** 网络请求处理** @param zWebHandler* @param url         链接* @param method      请求方法* @param data        数据* @param type        返回类型* @param controller*/void onZWebRequire(IZWebHandler zWebHandler, String url, String method, String data, String type, IZRequireController controller);/*** 异步消息请求** @param zWebHandler* @param cmd 命令名称* @param data 数据*/void onZWebMessage(IZWebHandler zWebHandler, String cmd, String data, IZMessageController controller);/*** JS销毁** @param zWebHandler*/void onZWebDestroy(IZWebHandler zWebHandler);/*** JS日志信息回调,可在这里记录或打印** @param zWebHandler* @param type        类型* @param msg         信息*/void onZWebLog(IZWebHandler zWebHandler, String type, String msg);

以上接口部分实现方式可参考 MainActivity.java

IOC实现 js 请求方法封装

  1. 定义调用JS的方法接口
public interface RequireService{    @ZMethod("a") // callReceiver    boolean callA(@ZKey("KeyA") String a, @ZKey("KeyB") String b, @ZKey("Time") long time);    @ZFunction("init")    boolean init(@ZKey("A") String a, @ZKey("B") String b, @ZKey("C") int c);    @ZMethod(ZMethodName.ON_READY)    void initParam(@ZKey("Msg") String msg, @ZKey("Skin") int skin, @ZKey("Color") int color);    @ZFunction(ZFunctionName.REFRESH)    void refresh();    @ZFunction("newInit")    boolean newInit(@ZJson String oJson);    @ZFunction("newInit2")    boolean newInit2(@ZData String str);}

各种注解介绍:

@ZFunction("方法名称"): 用于调用JS中 ZWebSDK.extends('方法名称', function(oData){}); 扩展方法的调用。

@ZMethod("监听名称"):用于JS中 ZWebSDK.on('监听名称', function(oData){}); 注册监听的方法调用。

@ZKey("参数名称"):JS中Object参数键值名称。

@ZCmd("cmd名称"):用于 onZWebMessage 方法回调中,cmd参数的映射。具体使用方法可以参考Demo。(针对Message做映射解析时使用)。

@ZJson:JS中Object参数的字符串(json)。

@ZData:参数为字符串。

  1. 创建接口服务对象实例,并进行调用
mRequireService = mZWebInstance.create(RequireService.class);

通过使用 mRequireService 提供的方法,调用JS。如下:

mRequireService.callA("我是一个坚挺的消息。。。", "小A你好啊!", time);

JS调用原生提供的方法

  1. 使用现有的 void onZWebMessage(IZWebHandler zWebHandler, String cmd, String data, IZMessageController controller); 进行方法解析,并异步返回结果。

    参数 cmd :定义的命令名称。

    参数 data: 定义的参数。

    controller :可进行异步的结果返回。或者利用 controller.parseMessage(this.mParseMessage); 此方法进行方法解析。

  2. 使用原生 @JavascriptInterface 注解的方法进行扩展。

    框架在 ZWebConfig 中提供了 setExposedName (String exposedName); 方法,可以扩展一个原生的接口协议名称。

    然后,利用 mZWebInstance.addJavascriptInterface(object); 进行对象中的方法注入。

iOS

暂无

Author Blog

zyao89.cn


作者:Zyao89;转载请保留此行,谢谢;
原文网站:https://www.zyao89.cn
祝你好运,谢谢支持

更多相关文章

  1. Android热插拔事件处理流程--Vold
  2. android包Android(安卓)"java.lang.NoClassDefFoundError:*"报错
  3. Android(安卓)Robotium小结
  4. 【Android单元测试系列】真正的异步单元测试
  5. Android之生成桌面快捷方式(二)
  6. android使用notifyDataSetChanged()方法,adapter的数据更新了,但是
  7. Win7 64位 Android(安卓)SDK下载和更新失败的解决方法
  8. 浅谈Java中Collections.sort对List排序的两种方法
  9. Python list sort方法的具体使用

随机推荐

  1. Android(安卓)5.1源代码与Nexus设备工厂
  2. RatingBar
  3. Edittext 设置
  4. Android抽屉(SlidingDrawer --类似androi
  5. android timed gpio (linux 3.0.0) 受时
  6. 各种Layout用到的一些重要的属性
  7. layout_alignParentBottom失效
  8. Android纠正Activity横竖屏切换的生命周
  9. 转:Android(安卓)发送短信的方法
  10. Android界面布局开发使用的标签介绍