原生UI定制
说明
- EasyClick 使用WebView支撑HTML的UI方式,并且扩展了JS方法,用于控制EC程序。
- 新建工程时候可以对应的模板,推荐使用Materialize模板,文档网址 http://www.materializecss.cn
- 也可以自己编写精美的HTML页面,更多JS方法的使用请参考模板中的用法
注意
- 使用html模板,layout文件夹会有css,htmljs,subjs,ui.js默认文件
- ui.js会是UI默认执行入口,会编译为字节码
- subjs文件夹存储的js文件会编译为字节码给ui.js调用,其他html无法调用
- htmljs存储的是html调用的js文件,html文件可以正常使用
- css文件存储的是css文件即可
- 如果错误的调用可能导致意外的问题,请遵守该规则使用
多tab标签支持
只要在工程的layout工程下新建一个ui.js文件即可 内容是
function main() {
ui.layout("参数配置", "main.html");
ui.layout("注册使用", "reg.html");
ui.layout("使用说明", "intr.html");
}
main();
脚本如何与JS交互
编写xml视图
- 使用webview加载本地的main.html,tag=web
- 注意:需要layout.attr.xsd和layout.xsd两个文件,创建原生ui项目的layout文件下手动复制到当前项目的layout下
<?xml version="1.0" encoding="UTF-8" ?>
<LinearLayout
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:android="http://schemas.android.com/apk/res/android"
xsi:noNamespaceSchemaLocation="layout.xsd"
android:layout_height="match_parent"
android:layout_width="match_parent">
<WebView android:layout_width="wrap_content"
android:tag="web"
android:layout_height="wrap_content"
android:url="main.html"/>
</LinearLayout>
加载 xml
- 在ui.js中加载xml视图
function main() {
ui.layout("参数配置", "main.xml");
}
main();
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脚本中调用视图
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程序进行交互,并且这些方法只能在网页中调用才行
调用自定义扩展
call 调用扩展函数
- 调用脚本或者ui.js注入进来的扩展函数
- @param funcName 注入的函数名称
- @param data 可以是普通的字符串,也可以是JSON的字符串
- @return
{string}
调用的扩展函数返回的数据
// ui.js中的注入
function main() {
//UI中进行注入新的扩展
ui.registeH5Function("customFunction", function (data) {
logd("h5 call-" + data);
//返回给网页的数据
return new Date().toString()
})
ui.layout("main", "main.html");
}
main();
网页中的调用
<!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>
启动脚本
window.ec.start()
停止脚本
window.ec.stopTask()
setAgentSupportNode 设置代理模式下获取节点方式
- 设置代理模式下获取节点方式
- 该方法仅对代理模式生效
- EC 安卓 11.2.0+
- 该方法在启动代理服务之前调用,使用2和3 可以减少检测的特征
- 1的方式会出现 ruru检测出 AccessibilityManager.isEnabled,2和其他的方式不会出现
- 1的方式节点能力交强,2节点功能较弱,3 就没有节点功能
- @param support 1 类似无障碍一样的方式, 2 shell dump的的方式,3 不开启节点服务
- @return
{boolean}
true true代表成功 false代表失败
function main() {
window.ec.setAgentSupportNode("2");
}
main();
脚本是否正在运行
window.ec.isScriptRunning()
隐藏开始按钮
window.ec.hideStartBtn()
显示开始按钮
window.ec.displayStartBtn()
获取所有配置的JSON字符串
var s = window.ec.getConfigJSON();
alert(s);