项目名称: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文件, 并依据自己的版本创建新项目,将新项目的对应文件复制到根目录下
ZWebView
,方法如下:@Override
public void onInitialize() {
super.onInitialize();
ZWebInstance.init(this);
}
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);
// 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);
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:参数为字符串。
mRequireService = mZWebInstance.create(RequireService.class);
通过使用 mRequireService
提供的方法,调用JS。如下:
mRequireService.callA("我是一个坚挺的消息。。。", "小A你好啊!", time);
使用现有的 void onZWebMessage(IZWebHandler zWebHandler, String cmd, String data, IZMessageController controller);
进行方法解析,并异步返回结果。
参数 cmd
:定义的命令名称。
参数 data
: 定义的参数。
controller
:可进行异步的结果返回。或者利用 controller.parseMessage(this.mParseMessage);
此方法进行方法解析。
框架在 ZWebConfig 中提供了 setExposedName (String exposedName);
方法,可以扩展一个原生的接口协议名称。
然后,利用 mZWebInstance.addJavascriptInterface(object);
进行对象中的方法注入。
CodeCheck代码测试无异常
CloudTest代码测试无异常
病毒安全检测通过
当前版本demo功能与原组件基本无差异
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.
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
1. 开源生态
2. 协作、人、软件
3. 评估模型