2 Star 7 Fork 1

CHINASOFT2_OHOS / ZWebView

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

ZWebView

项目介绍

项目名称:ZWebView

所属系列:OpenHarmony的第三方组件适配移植

功能:建立移动端和Web的JS桥接框架,实现通过容器WebView实现移动端与js的互调功能。

基线版本:master分支

项目移植状态:主功能完成

调用差异:无

开发版本:sdk6,DevEco Studio 2.2 Beta1

效果演示

输入图片说明

安装教程

1.在项目根目录下的build.gradle文件中,

allprojects {
   repositories {
       maven {
           url 'https://s01.oss.sonatype.org/content/repositories/releases/'
       }
   }
}

2.在entry模块的build.gradle文件中,

dependencies {
   implementation('com.gitee.chinasoft_ohos:zwebview:1.0.0')
   ......  
}

在sdk6,DevEco Studio 2.2 Beta1下项目可直接运行 如无法运行,删除项目.gradle,.idea,build,gradle,build.gradle文件, 并依据自己的版本创建新项目,将新项目的对应文件复制到根目录下

使用说明

  • Step1,初始化: 在自定义的AbilityPackage中初始化 ZWebView,方法如下:
@Override
public void onInitialize() {
    super.onInitialize();
    ZWebInstance.init(this);
}
  • Step2,构建 ZWebConfig 配置文件,并创建 ZWeb 对象实例。
String MAIN_HTML = "xxx.html";

// 1. 创建配置文件,并带入主页 URL
ZWebConfig config = new ZWebConfig.Builder(ZWebConstant.MAIN_HTML)
    // 注册状态监听
    .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 为根ComponentContainer容器 (必须)
@Override
protected void onStart(Intent intent){
    //...
    mRootView = new StackLayout(this);
    mRootView.setLayoutConfig(new ComponentContainer.LayoutConfig(
                ComponentContainer.LayoutConfig.MATCH_PARENT,
                ComponentContainer.LayoutConfig.MATCH_PARENT));
    groupView.addComponent(mRootView);

    super.setUIContent(groupView);    
    //...
}

@Override
public void onBackPressed(){
    if (!mZWebInstance.onActivityBack()){
        super.onBackPressed();
    }
}

// 分别实现其他生命周期传递
@Override
protected void onActive() {
   mZWebInstance.onActivityResume();
   super.onActive();
}

@Override
protected void onInactive() {
    mZWebInstance.onActivityPause();
    super.onInactive();
}

@Override
protected void onBackground() {
    mZWebInstance.onActivityStop();
    super.onBackground();
}

@Override
protected void onStop() {
    mZWebInstance.onActivityDestroy();
    super.onStop();
}
  • 一些内部状态监听实现

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

/**
* 框架初始化成功后回调
*
* @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);
  • 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. 框架在 ZWebConfig 中提供了 setExposedName (String exposedName); 方法,可以扩展一个原生的接口协议名称。

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

测试信息

CodeCheck代码测试无异常

CloudTest代码测试无异常

病毒安全检测通过

当前版本demo功能与原组件基本无差异

版本迭代

  • 1.0.0

版权和许可信息

Copyright 2017 Zyao89

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

空文件

简介

移动端和Web的JS桥接框架 展开 收起
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
Java
1
https://gitee.com/chinasoft2_ohos/ZWebView.git
git@gitee.com:chinasoft2_ohos/ZWebView.git
chinasoft2_ohos
ZWebView
ZWebView
master

搜索帮助