HTML5-UI
# 说明
EasyClick 使用WebView支撑HTML的UI方式,并且扩展了JS方法,用于控制EC程序。
新建工程时候可以对应的模板,推荐使用Materialize模板,[文档网址](http://www.materializecss.cn)
也可以自己编写精美的HTML页面,更多JS方法的使用请参考模板中的用法
## WEB UI 推荐
|链接|说明|
|-|-|
|[jQuery WeUI](http://jqweui.com/)| 基于WeUI二开的 |
|[WeUI +](https://gitee.com/yoby/weui/)| 基于Zepto1.2和weui1.13 |
|[WeUI](https://github.com/Tencent/weui/blob/master/README_cn.md)| 微信官方设计团队 |
## 多tab标签支持
只要在工程的layout工程下新建一个ui.js文件即可 内容是
```js
ui.layout("参数配置","main.html");
ui.layout("注册使用","reg.html");
ui.layout("使用说明","intr.html");
```
## 脚本如何与JS交互
编写html视图
使用webview加载本地的main.html
加载 html
在ui.js中加载html视图
```js
ui.layout("参数配置","main.html");
```
main.html 代码
```html
<!doctype html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
</head>
<body style="margin-left: 10px;margin-right: 10px">
我是测试网页
</body>
<script>
//暴露给webview调用
function myalert()
{
alert("fdsafsad");
//存储数据到内存中,给脚本读取
window.ec.putShareData("mymsg","我是网页的临时数据");
}
//暴露给webview调用 带参数
function myalert(msg)
{
alert("我是msg "+msg);
}
</script>
</html>
```
在js/main.js脚本中调用视图
```js
function main() {
//重置变量
ui.resetUIVar();
//读取UI存储到内存中的数据
logd(ui.getShareData("mymsg"))
logd(ui.web)
//使用ui中 tag= web的视图
if (ui.web) {
//myalert 是HTML中暴露的方法
//执行网页中的js方法
ui.web.quickCallJs("myalert();");
ui.web.quickCallJs("myalert('bbbbb');");
}
}
main();
```
# 扩展方法
浏览器扩展的方法,主要用于网页和EC程序进行交互,并且这些方法只能在网页中调用才行
## ui.registeH5Function()
在ui.js中注入扩展函数,供html内调用
@param funcName 注入的函数名称
@param data 可以是普通的字符串,也可以是JSON的字符串
@return {string} 调用的扩展函数返回的数据
```js
// ui.js中的注入
function main() {
//UI中进行注入新的扩展
ui.registeH5Function("customFunction",function(data){
logd("h5 call-> "+data);
//返回给网页的数据
return new Date().toString()
})
ui.layout("main", "main.html");
}
main();
```
## window.ec.call()
网页中调用ui.js中通过ui.registeH5Function()注入的扩展函数
```html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<button onclick="test()">测试扩展函数</button>
<script>
function test(){
//调用ui.js注入进来的扩展
let d =window.ec.call('customFunction',JSON.stringify({'action':'android.settings.SETTINGS'}));
console.log("ddd "+d )
}
</script>
</body>
</html>
```
## 启动脚本
```js
window.ec.start()
```
## 停止脚本
```js
window.ec.stopTask()
```
## 隐藏开始按钮
```js
window.ec.hideStartBtn()
```
## 显示开始按钮
```js
window.ec.displayStartBtn()
```
## 获取所有配置的JSON字符串
```js
var s= window.ec.getConfigJSON();
alert(s);
```
## 从配置文件获取单个配置的字符串
```js
var s= window.ec.getConfig("name");
alert(s);
```
## 保存单个配置到配置文件
```js
var s= window.ec.saveConfig("name","123");
alert(s);
```
## 保存数据到存储区
这个数据是保存在内存中的
```js
window.ec.putShareData("name","123");
```
## 从存储区读取数据
这个数据是在内存中的
```js
var d = window.ec.getShareData("name");
alert(d);
```
## 清空存储区数据
这个数据是在内存中的
```js
var d = window.ec.clearAllShareData();
alert(d);
```
## 打开EC的系统设置
```js
window.ec.openECSystemSetting()
```
## 保存EC的系统参数
设置EC的系统参数
@param params map形式例如 {"running_mode":"无障碍"},
{
"running_mode":"无障碍",
"auto_start_service":"是",
"log_float_window":"否",
"ctrl_float_window":"否"
"service_start_run_script":"否"
}
参数解释有:
- running_mode : 无障碍,代理两种
- auto_start_service : 开机启动服务 值有 是,否 两种
- log_float_window : 日志悬浮窗展示 值有 是,否 两种
- ctrl_float_window : 启停控制悬浮窗展示 值有 是,否 两种
- service_start_run_script : 服务被重启后自动重新运行 值有 是,否 两种
- home_key_start_stop : 三击HOME启停脚本 值有 是,否 两种 *
@return 布尔型 true 是 false 否
```javascript
var m = {
"running_mode":"无障碍",
"auto_start_service":"是",
"log_float_window":"否",
"ctrl_float_window":"否"
};
window.ec.setECSystemConfig(JSON.stringify(m));
```
## window.ec.logd()
显示日志消息
```js
window.ec.logd("我是日志");
```
## 显示Toast消息
```js
window.ec.toast("我是toast消息") ;
```
## 显示日志消息窗口
```js
window.ec.showLogWindow();
```
## 关闭日志消息窗口
```js
window.ec.closeLogWindow();
```
## 显示启停控制窗口
```js
window.ec.showCtrlWindow();
```
## 关闭启停控制窗口
```js
window.ec.closeCtrlWindow();
```
## 打开其他应用程序 openActivity
```js
//打开浏览器下载测试
var m ={
"action":"android.intent.action.VIEW",
"uri":"https://imtt.dd.qq.com/16891/apk/55259F8EF9824AF1BF80106B0E00BCD1.apk?"
};
var x = window.ec.openActivity(JSON.stringify(m));
window.ec.logd("x "+x);
var map={
"uri":"xx://xx/live/6701887916223941379",
};
window.ec.openActivity(JSON.stringify(map));
```
# 服务状态
## 是否是无障碍服务模式
```js
var s = window.ec.isAccMode();
alert(s);
```
## 是否是代理服务模式
```js
var s = window.ec.isAgentMode();
alert(s);
```
## 无障碍服务是否已经启动
```js
var s = window.ec.isAccServiceOk();
alert(s);
```
## 代理服务是否已经启动
```js
var s = window.ec.isAgentServiceOk();
alert(s);
```
## 启动服务环境
```js
var s = window.ec.startEnv();
alert(s);
```
# 悬浮窗
## window.ec.hasFloatViewPermission()是否有悬浮窗权限
```js
var s = window.ec.hasFloatViewPermission();
alert(s);
```
## window.ec.requestFloatViewPermission()
请求悬浮窗权限
```js
//参数是超时时间,单位是秒
var s = window.ec.requestFloatViewPermission(10);
alert(s);
```
## window.ec.showFloatView()
展示浮窗
```js
var m = {
"path": "main.html",
"tag": "tag",
"titleBg": "#888888",
"x": 10,
"y": 10,
"w": 100,
"h": 200
};
var xd =window.ec.showFloatView(JSON.stringify(m));
alert(xd);
```
## window.ec.closeFloatView()
关闭浮窗
```js
var m = {
"path": "main.html",
"tag": "tag",
"titleBg": "#888888",
"x": 10,
"y": 10,
"w": 100,
"h": 200
};
var xd =window.ec.showFloatView(JSON.stringify(m));
setTimeout(function() {
window.ec.closeFloatView("tag");
},3000);
alert(xd);
```
## window.ec.closeAllFloatView()
关闭所有浮窗,不包含日志悬浮窗
```js
var m = {
"path": "main.html",
"tag": "tag",
"titleBg": "#888888",
"x": 10,
"y": 10,
"w": 100,
"h": 200
};
var xd =window.ec.showFloatView(JSON.stringify(m));
setTimeout(function() {
window.ec.closeAllFloatView();
},3000);
alert(xd);
```
# 定时任务
## window.ec.startJob()
开启一个定时脚本任务
@param tag 任务的唯一标示,不能为空,脚本中可以使用readConfigString("jobTaskTag")获取当前tag值,判断是那个任务过来执行的
@param execTime 定时时间格式: 2020-04-17 192000,或者直接是秒数字,例如 3,代表3秒后
@param cancelBeforeRunning
@return 整型 jobid
```js
var time="2020-04-17 09:00:00";
var id =window.ec.startJob("task1",time,true);
alert("job id "+id);
```
## window.ec.getAllJobTag()
获取所有定时任务TAG
```js
var t =window.ec.getAllJobTag();
alert("job tags "+t);
```
## window.ec.cancelAllJob()
取消所有定时任务
```js
var t =window.ec.cancelAllJob();
alert("job cancel "+t);
```
## window.ec.cancelJob()
取消指定TAG定时任务
```js
//参数task1 是创建定时任务的tag值
var t =window.ec.cancelJob("task1");
alert("job cancel "+t);
```