panchengyong
10 days ago b2d3f7caf927e5b83ec52efb74f1f818dbb15236
commit | author | age
bc5e1e 1 function UIWrapper() {
X 2
3 }
4
5 var ui = new UIWrapper();
6
7
8 /**
9  * 显示Toast信息
10  * @param msg 信息
11  */
12 UIWrapper.prototype.toast = function (msg) {
13     if (uiWrapper == null) {
14         return null;
15     }
16     uiWrapper.toast(msg);
17 };
18 /**
19  * 读取IEC包中的res文件夹某个文件资源,并变成android的Bitmap对象返回
20  * @param path res文件夹中的资源文件路径
b2d3f7 21  * @return {null|Bitmap} 图像对象或者null
bc5e1e 22  */
X 23 UIWrapper.prototype.resResAsBitmap = function (path) {
24     if (uiWrapper == null) {
25         return null;
26     }
27     return uiWrapper.resResAsBitmap(path);
28 };
29 /**
30  * 读取IEC包中的res文件夹某个文件资源,并变成android的Drawable对象返回
31  * @param path res文件夹中的资源文件路径
b2d3f7 32  * @return {null|Drawable} 图像对象或者null
bc5e1e 33  */
X 34 UIWrapper.prototype.resResAsDrawable = function (path) {
35     if (uiWrapper == null) {
36         return null;
37     }
38     return uiWrapper.resResAsDrawable(path);
39 };
40
41
42 /**
43  * 调试日志打印
44  * @param msg 打印的消息
45  */
46 UIWrapper.prototype.logd = function (msg) {
47     if (uiWrapper == null) {
48         return null;
49     }
50     uiWrapper.logd(msg);
51 };
52
53
54 /**
55  * 脚本是否处于暂停中
56  * 适配 EC 10.0.0+
57  * @return {boolean} true 代表脚本处于暂停中
58  */
59 UIWrapper.prototype.isScriptPause = function () {
60     if (uiWrapper == null) {
61         return false;
62     }
63     return uiWrapper.isScriptPause();
64 }
65
66 /**
67  * 显示脚本暂停控制悬浮窗
68  * 适配EC 10.0.0+
69  */
70 UIWrapper.prototype.showScriptCtrlFloatView = function () {
71     uiWrapper.showScriptCtrlFloatView();
72 }
73
74 /**
75  * 关闭脚本暂停控制悬浮窗
76  * 适配EC 10.0.0+
77  */
78 UIWrapper.prototype.closeScriptCtrlFloatView = function () {
79     uiWrapper.closeScriptCtrlFloatView();
80 }
81
82 /**
83  * 设置脚本暂停或者继续
84  * 适配 EC 10.0.0+
85  * @param pause true 代表暂停脚本,false代表继续
86  * @param timeout 自动恢复时间单位毫秒,0 代表不自动恢复,等待外部交互后恢复,大于0代表到了时间自动恢复运行
87  * @return {boolean} true 代表脚本处于暂停中,false 代表继续运行中
88  */
89 UIWrapper.prototype.setScriptPause = function (pause, timeout) {
90     if (uiWrapper == null) {
91         return false;
92     }
93     uiWrapper.setScriptPause(pause, timeout);
94     return uiWrapper.isScriptPause();
95 }
96
97 /**
98  * 创建一个布局并设置到当前的页面中
99  * @param name tab标签的名称
100  * @param content 可以是layout文件夹中的文件名称,也可以直接是xml文件的内容
b2d3f7 101  * @return {boolean} true代表成功, false代表失败
bc5e1e 102  */
X 103 UIWrapper.prototype.layout = function (name, content) {
104     if (uiWrapper == null) {
105         return null;
106     }
107     var r = uiWrapper.layout(name, content);
108     this.setUIvar();
109     return r;
110 };
111
112
113 /**
114  * 解析布局并返回
115  * @param content 可以是layout文件夹中的文件名称,也可以直接是xml文件的内容
b2d3f7 116  * @return {null|View} android的View对象,解析有问题就是null
bc5e1e 117  */
X 118 UIWrapper.prototype.parseView = function (content) {
119     if (uiWrapper == null) {
120         return null;
121     }
122     return uiWrapper.parseView(content);
123 };
124
125
126 /**
127  * 通过tag查找到一个视图
128  * @param tag 标签值
b2d3f7 129  * @return {null|View} android原生的View对象
bc5e1e 130  */
X 131 UIWrapper.prototype.findViewByTag = function (tag) {
132     if (uiWrapper == null) {
133         return null;
134     }
135     return uiWrapper.findViewByTag(tag);
136 };
137 /**
138  * 设置事件
139  * @param view 要设置事件的视图,可以是事件的tag值
140  * @param eventType 时间类型: click:点击,checkedChange:单选和多选按钮的选中状态改变事件,itemClick:列表的项目点击,itemSelected:列表的项目选中
141  * @param eventCallback 事件回调函数
b2d3f7 142  * @return {boolean} true代表设置成功, false代表设置失败
bc5e1e 143  */
X 144 UIWrapper.prototype.setEvent = function (view, eventType, eventCallback) {
145     if (uiWrapper == null || view == null) {
146         return false;
147     }
148     if (typeof view == 'string') {
149         view = this.findViewByTag(view);
150     }
151     if (eventType === "click") {
152         return uiWrapper.setClickEvent(view, eventCallback);
153     }
154     if (eventType === "checkedChange") {
155         return uiWrapper.setCheckedChangeEvent(view, eventCallback);
156     }
157     if (eventType === "itemClick") {
158         return uiWrapper.setItemClickEvent(view, eventCallback);
159     }
160     if (eventType === "itemSelected") {
161         return uiWrapper.setItemSelectedEvent(view, eventCallback);
162     }
163     return false;
164 };
165
166
167 UIWrapper.prototype.setUIvar = function () {
168     this.resetUIVar();
169 }
170 /**
171  * 存储数据到存储区中,脚本可以使用
172  * @param key 键
173  * @param value 值
b2d3f7 174  * @return {boolean} true成功 false失败
bc5e1e 175  */
X 176 UIWrapper.prototype.putShareData = function (key, value) {
177     return uiWrapper.putShareData2(key, value);
178 }
179 /**
180  * 从存储区获取在UI模块存储的数据
181  * @param key 键
b2d3f7 182  * @return {null|*} 存储的数据
bc5e1e 183  */
X 184 UIWrapper.prototype.getShareData = function (key) {
185     return uiWrapper.getShareData2(key);
186 }
187
188 /**
189  * 清理所有存储区的数据
b2d3f7 190  * @return {boolean} true 或者 false
bc5e1e 191  */
X 192 UIWrapper.prototype.clearAllShareData = function () {
193     return uiWrapper.clearAllShareData();
194 }
195 /**
196  * 将所有的tag转换成UI的对象直接调用
197  */
198 UIWrapper.prototype.resetUIVar = function () {
199     if (this.getActivity() == null) {
200         return null;
201     }
202     var tags = uiWrapper.findAllTags();
203     if (tags == null || tags == "") {
204         return null;
205     }
206     tags = JSON.parse(tags);
207     if (tags != null) {
208         for (var i = 0; i < tags.length; i++) {
209             ui[tags[i]] = this.findViewByTag(tags[i]);
210         }
211     }
212 };
213
214 /**
215  * 取得当前的activity对象
b2d3f7 216  * @return {null|Activity} 对象或者null
bc5e1e 217  */
X 218 UIWrapper.prototype.getActivity = function () {
219     if (uiWrapper == null) {
220         return null;
221     }
222     return uiWrapper.getActivity();
223 };
b2d3f7 224 /**
P 225  *
226  * @return {null|Context}
227  */
bc5e1e 228 UIWrapper.prototype.getContext = function () {
X 229     if (uiWrapper == null) {
230         return null;
231     }
232     return uiWrapper.getContext();
233 };
234 /**
235  * 取得当前的Handler对象
b2d3f7 236  * @return {null|Handler} 对象或者null
bc5e1e 237  */
X 238 UIWrapper.prototype.getHandler = function () {
239     if (uiWrapper == null) {
240         return null;
241     }
242     return uiWrapper.getHandler();
243 };
244
245 /**
246  * 取得当前的根视图对象,因为有可能是多标签的页面,返回的有可能是个集合
b2d3f7 247  * @return {null|View[]} 对象列表
bc5e1e 248  */
X 249 UIWrapper.prototype.getRootView = function () {
250     if (uiWrapper == null) {
251         return null;
252     }
253     var ls = uiWrapper.getRootView();
254     if (ls == null) {
255         return null;
256     }
257     var r = [];
258     for (var i = 0; i < ls.size(); i++) {
259         var va = ls.get(i);
260         r.push(va);
261     }
262     return r;
263 };
264
265 /**
266  * 启动脚本
b2d3f7 267  * @return {boolean} true代表成功  false代表失败
bc5e1e 268  */
X 269 UIWrapper.prototype.start = function () {
270     if (uiWrapper == null) {
271         return null;
272     }
273     return uiWrapper.start();
274 };
275
276 /**
277  * 是否有浮窗权限
b2d3f7 278  * @return {boolean} true代表有权限 false代表无权限
bc5e1e 279  */
X 280 UIWrapper.prototype.hasFloatViewPermission = function () {
281     if (uiWrapper == null) {
282         return null;
283     }
284     return uiWrapper.hasFloatViewPermission();
285 };
286
287
288 /**
289  * 异步请求浮窗权限
290  * @param timeout 超时时间
291  * @param callback 回调函数
b2d3f7 292  * @return {boolean} true代表有权限 false代表无权限
bc5e1e 293  */
X 294 UIWrapper.prototype.requestFloatViewPermissionAsync = function (timeout, callback) {
295     if (uiWrapper == null) {
296         return null;
297     }
298     return uiWrapper.requestFloatViewPermissionAsync(timeout, callback);
299 };
300 /**
301  * 取得所有UI配置
b2d3f7 302  * @return {null|string} JSON字符串
bc5e1e 303  */
X 304 UIWrapper.prototype.getConfigJSON = function () {
305     if (uiWrapper == null) {
306         return null;
307     }
308     return uiWrapper.getConfigJSON();
309 };
310 /**
311  * 取得单个UI配置项
312  * @param key 配置的key
b2d3f7 313  * @return {null|string} 字符串
bc5e1e 314  */
X 315 UIWrapper.prototype.getConfig = function (key) {
316     if (uiWrapper == null) {
317         return null;
318     }
319     return uiWrapper.getConfig(key);
320 };
321 /**
322  * 打开EC的系统设置
b2d3f7 323  * @return {boolean} true代表成功 false代表失败
bc5e1e 324  */
X 325 UIWrapper.prototype.openECSystemSetting = function () {
326     if (uiWrapper == null) {
327         return null;
328     }
329     return uiWrapper.openECSystemSetting();
330 };
331 /**
332  * 保存UI参数值
333  * @param key UI的key
334  * @param value UI的值
b2d3f7 335  * @return {boolean} true代表成功 false代表失败
bc5e1e 336  */
X 337 UIWrapper.prototype.saveConfig = function (key, value) {
338     if (uiWrapper == null) {
339         return null;
340     }
341     return uiWrapper.saveConfig(key, value);
342 };
343 /**
344  * 移出所有保存的UI参数值
b2d3f7 345  * @return {boolean} true代表成功 false代表失败
bc5e1e 346  */
X 347 UIWrapper.prototype.removeAllUIConfig = function () {
348     if (uiWrapper == null) {
349         return null;
350     }
351     return uiWrapper.removeAllUIConfig();
352 };
353
354
355 /**
356  * 根据设置的tag,保存所有配置
b2d3f7 357  * @return {boolean} true 保存成功,false 保存失败
bc5e1e 358  */
X 359 UIWrapper.prototype.saveAllConfig = function () {
360     if (uiWrapper == null) {
361         return false;
362     }
363     return uiWrapper.saveAllConfig();
364 };
365 /**
366  * 设置视图的值
367  * @param tagOrView 视图的tag或者视图对象
368  * @param value 值,字符串或者是布尔型
b2d3f7 369  * @return {boolean} true代表成功 false代表失败
bc5e1e 370  */
X 371 UIWrapper.prototype.setViewValue = function (tagOrView, value) {
372     if (uiWrapper == null) {
373         return;
374     }
375     return uiWrapper.setViewValue(tagOrView, value);
376 }
377 /**
378  * 取得视图的值
379  * @param tagOrView 视图的tag或者视图对象
b2d3f7 380  * @return {null|boolean|string|number|*} 字符串或者布尔型
bc5e1e 381  */
X 382 UIWrapper.prototype.getViewValue = function (tagOrView) {
383     if (uiWrapper == null) {
384         return null;
385     }
386     var x = uiWrapper.getViewValue(tagOrView);
387     try {
388         x = JSON.parse(x);
389         var type = x["type"] + "";
390         var value = x["value"] + "";
391         if (type === "string") {
392         } else if (type === "boolean") {
393             if (value === "true") {
394                 return true;
395             } else {
396                 return false;
397             }
398         } else if (type === "int") {
399             return parseInt(value);
400         } else if (type === "float") {
401             return parseFloat(value);
402         }
403         return value;
404     } catch (e) {
405
406     }
407     return null;
408
409 };
410
411
412 /**
413  * 是否是无障碍运行模式
b2d3f7 414  * @return {boolean} true 是 false 否
bc5e1e 415  */
X 416 UIWrapper.prototype.isAccMode = function () {
417     if (uiWrapper == null) {
418         return null;
419     }
420     return uiWrapper.isAccMode();
421 };
422 /**
423  * 是否是代理运行模式
b2d3f7 424  * @return {boolean} true 是 false 否
bc5e1e 425  */
X 426 UIWrapper.prototype.isAgentMode = function () {
427     if (uiWrapper == null) {
428         return null;
429     }
430     return uiWrapper.isAgentMode();
431 };
432 /**
433  * 自动化服务是否正常
b2d3f7 434  * @return {boolean} true 是 false 否
bc5e1e 435  */
X 436 UIWrapper.prototype.isServiceOk = function () {
437     if (uiWrapper == null) {
438         return null;
439     }
440     return uiWrapper.isServiceOk();
441 };
442 /**
443  * 设置运行模式
444  * @param mode 1 代表是代理模式  2 代表无障碍模式
b2d3f7 445  * @return {boolean} true 是 false 否
bc5e1e 446  */
X 447 UIWrapper.prototype.setRunningMode = function (mode) {
448     if (uiWrapper == null) {
449         return null;
450     }
451     return uiWrapper.setRunningMode(mode);
452 };
453 /**
454  * 设置EC的系统参数
455  * @param params  map形式例如 {"running_mode":"无障碍"},<br/>
456  * {<br/>
457  *     "node_service":"需要",<br/>
458  *     "proxy_service":"不需要",<br/>
459  *     "running_mode":"无障碍",<br/>
460  *     "auto_start_service":"是",<br/>
461  *     "daemon_service":"是",<br/>
462  *      "volume_start_tc":"否",<br/>
463  *      "log_float_window":"否",<br/>
464  *      "ctrl_float_window":"否"<br/>
465  * }<br/>
466  *  参数解释有:<br/>
467  *  node_service : 是否需要启动节点获取服务 值有 需要,不需要两种
468  *  proxy_service : 是否需要启动底层代理服务 值有 需要,不需要两种
469  *  running_mode : 手势执行服务 值有 无障碍,代理两种
470  *  auto_start_service : 开机启动服务 值有 是,否 两种
471  *  daemon_service : 守护服务 值有 是,否 两种
472  *  volume_start_tc : 音量键启停 值有 是,否 两种
473  *  log_float_window : 日志悬浮窗展示 值有 是,否 两种
474  *  ctrl_float_window : 启停控制悬浮窗展示 值有 是,否 两种
475  *
b2d3f7 476  * @return {boolean} true 是 false 否
bc5e1e 477  */
X 478 UIWrapper.prototype.setECSystemConfig = function (params) {
479     if (uiWrapper == null) {
480         return null;
481     }
482     return uiWrapper.setECSystemConfig(JSON.stringify(params));
483 };
484
485
486 /**
487  * 启动环境
b2d3f7 488  * @return {boolean} true代表启动成功,false代表启动失败
bc5e1e 489  */
X 490 UIWrapper.prototype.startEnv = function () {
491     if (uiWrapper == null) {
492         return null;
493     }
494     return uiWrapper.startEnv();
495 };
496
497
498 /**
b2d3f7 499  * 设置代理模式下获取节点方式
P 500  * 该方法仅对代理模式生效
501  * 该方法在启动代理服务之前调用,使用2和3 可以减少检测的特征
502  * 1的方式会出现 ruru检测出 AccessibilityManager.isEnabled,2和其他的方式不会出现
503  * 1的方式节点能力交强,2节点功能较弱,0和3 就没有节点功能
504  * @param support 1 类似无障碍一样的方式, 2 shell dump的的方式,3或者0 不开启节点服务
505  * @return {boolean} true
506  */
507 UIWrapper.prototype.setAgentSupportNode = function (support) {
508     if (uiWrapper == null) {
509         return null;
510     }
511     return uiWrapper.setAgentSupportNode(support+"");
512 };
513
514
515 /**
bc5e1e 516  * 开启一个定时任务
X 517  * @param tag
518  * @param execTime 定时时间格式: 2020-04-17 19:20:00,或者直接是秒数字,例如 3,代表3秒后
519  * @param cancelBeforeRunning 是否取消之前的任务
b2d3f7 520  * @return {number} jobid
bc5e1e 521  */
X 522 UIWrapper.prototype.startJob = function (tag, execTime, cancelBeforeRunning) {
523     if (uiWrapper == null) {
524         return null;
525     }
526     return uiWrapper.startJob(tag, execTime, cancelBeforeRunning);
527 };
528 /**
529  * 取消所有的定时任务
b2d3f7 530  * @return {boolean} true代表成功,false代表失败
bc5e1e 531  */
X 532 UIWrapper.prototype.cancelAllJob = function () {
533     if (uiWrapper == null) {
534         return null;
535     }
536     return uiWrapper.cancelAllJob();
537 };
538 /**
539  * 取消指定标签的任务
540  * @param tag 标签
b2d3f7 541  * @return {boolean} true代表成功,false代表失败
bc5e1e 542  */
X 543 UIWrapper.prototype.cancelJob = function (tag) {
544     if (uiWrapper == null) {
545         return null;
546     }
547     return uiWrapper.cancelJob(tag);
548 };
549 /**
550  * 获取所有定时任务TAG
b2d3f7 551  * @return {null|string} JSON字符串
bc5e1e 552  */
X 553 UIWrapper.prototype.getAllJobTag = function () {
554     if (uiWrapper == null) {
555         return null;
556     }
557     return uiWrapper.getAllJobTag();
558 };
559 /**
560  * 停止当前运行的测试任务
b2d3f7 561  * @return {boolean} true代表成功,false代表失败
bc5e1e 562  */
X 563 UIWrapper.prototype.stopTask = function () {
564     if (uiWrapper == null) {
565         return null;
566     }
567     return uiWrapper.stopTask();
568 };
569 /**
570  * 显示日志浮窗
b2d3f7 571  * @return {boolean} true代表成功,false代表失败
bc5e1e 572  */
X 573 UIWrapper.prototype.showLogWindow = function () {
574     if (uiWrapper == null) {
575         return null;
576     }
577     return uiWrapper.showLogWindow();
578 };
579
580
581 /**
582  * 关闭日志浮窗
b2d3f7 583  * @return {boolean} true代表成功,false代表失败
bc5e1e 584  */
X 585 UIWrapper.prototype.closeLogWindow = function () {
586     if (uiWrapper == null) {
587         return null;
588     }
589     return uiWrapper.closeLogWindow();
590 };
591
592
593 /**
594  * 新增启停浮窗按钮
595  * @param tag 按钮的标签
596  * @param icon 按钮的图标路径,工程中的res/文件下的图片,例如填写 res/a.png
597  * @param width 按钮的宽度,单位是dp,系统按钮是36
598  * @param height 按钮的高度,单位是dp,系统按钮是36
599  * @param index 按钮的加入索引,-1代表往后添加,0代表的是加入到第一位
600  * @param onClickListener 按钮的点击回调
b2d3f7 601  * @return {boolean} true代表成功,false代表失败
bc5e1e 602  */
X 603 UIWrapper.prototype.addCtrlView = function (tag, icon, width, height, index, onClickListener) {
604     if (uiWrapper == null) {
605         return null;
606     }
607     return uiWrapper.addCtrlView(tag, icon, width, height, index, onClickListener);
608 };
609
610
611 /**
612  * 更新启停浮窗按钮
613  * @param tag 按钮的标签
614  * @param icon 按钮的图标路径,工程中的res/文件下的图片,例如填写 res/a.png
615  * @param onClickListener 按钮的点击回调
b2d3f7 616  * @return {boolean} true代表成功,false代表失败
bc5e1e 617  */
X 618 UIWrapper.prototype.updateCtrlView = function (tag, icon, onClickListener) {
619     if (uiWrapper == null) {
620         return null;
621     }
622     return uiWrapper.updateCtrlView(tag, icon, onClickListener);
623 };
624
625 /**
626  * 删除启停浮窗按钮
627  * @param tag 按钮的标签,默认都有main_page_ctrl: 主页,log_window_ctrl:日志窗口控制,script_status_ctrl:脚本启停,log_close_ctrl: 日志框关闭
b2d3f7 628  * @return {boolean} true代表成功,false代表失败
bc5e1e 629  */
X 630 UIWrapper.prototype.removeCtrlView = function (tag) {
631     if (uiWrapper == null) {
632         return null;
633     }
634     return uiWrapper.removeCtrlView(tag);
635 };
636
637 /**
638  * 删除所有启停浮窗按钮
b2d3f7 639  * @return {boolean} true代表成功,false代表失败
bc5e1e 640  */
X 641 UIWrapper.prototype.removeAllCtrlView = function () {
642     if (uiWrapper == null) {
643         return null;
644     }
645     return uiWrapper.removeAllCtrlView();
646 };
647 /**
648  * 重置启停浮窗按钮
b2d3f7 649  * @return {boolean} true代表成功,false代表失败
bc5e1e 650  */
X 651 UIWrapper.prototype.resetDefaultCtrlView = function () {
652     if (uiWrapper == null) {
653         return null;
654     }
655     return uiWrapper.resetDefaultCtrlView();
656 };
657
658 /**
659  * 显示启停浮窗
b2d3f7 660  * @return {boolean} true代表成功,false代表失败
bc5e1e 661  */
X 662 UIWrapper.prototype.showCtrlWindow = function () {
663     if (uiWrapper == null) {
664         return null;
665     }
666     return uiWrapper.showCtrlWindow();
667 };
668 /**
669  * 关闭启停浮窗
b2d3f7 670  * @return {boolean} true代表成功,false代表失败
bc5e1e 671  */
X 672 UIWrapper.prototype.closeCtrlWindow = function () {
673     if (uiWrapper == null) {
674         return null;
675     }
676     return uiWrapper.closeCtrlWindow();
677 };
678
679 /**
680  * 异步启动环境
681  * @param callback
682  */
683 UIWrapper.prototype.startEnvAsync = function (callback) {
684     if (uiWrapper == null) {
685         return;
686     }
687     uiWrapper.startEnvAsync(callback);
688 };
689
690 /**
691  * 监听UI所在的activity事件
692  * @param eventType 事件类型,分别为:onResume:Activity恢复时, onPause: Activity暂停时, onStop:Activity停止时, onDestroy:Activity销毁时
693  * @param callback 回调函数
694  */
695 UIWrapper.prototype.onActivityEvent = function (eventType, callback) {
696     if (uiWrapper == null) {
697         return;
698     }
699     if ("onActivityResult" == eventType) {
700         uiWrapper.setActivityResultEvent(eventType, callback);
701     } else {
702         uiWrapper.setActivityEvent(eventType, callback);
703     }
704
705 };
706
707
708 /**
709  * 打开一个activity,通过map参数
710  * @param map 例如{"action":""},key的固定只有
711  * action,
712  * uri,pkg,className,flag,其他的都是参数了
b2d3f7 713  * @return {boolean} true 代表成功,false 代表失败
bc5e1e 714  */
X 715 UIWrapper.prototype.openActivity = function (map) {
716     if (uiWrapper == null) {
717         return;
718     }
719     map = JSON.stringify(map);
720     return uiWrapper.openActivity(map);
721 };
722
723 /**
724  * alert,弹窗
725  * @param map 例如{"title":""},key的固定只有
726  * title 标题
727  * msg: 消息
728  * cancelText: 取消按钮文字
729  * okText: 确定按钮文字
730  * cancelable: 是否可取消
731  * @param okBtnCallback 点击确认按钮的回调
732  * @param cancelBtnCallback 点击取消按钮的回调
733  * @param dismissListener 对话框消失的回调
b2d3f7 734  * @return {boolean} true 代表成功,false 代表失败
bc5e1e 735  */
X 736 UIWrapper.prototype.alert = function (map, okBtnCallback, cancelBtnCallback, dismissListener) {
737     if (uiWrapper == null) {
738         return;
739     }
740     map = JSON.stringify(map);
741     return uiWrapper.alert(map, okBtnCallback, cancelBtnCallback, dismissListener);
742 };
743
744 /**
745  * inputDialog 输入框弹窗
746  * @param map 例如{"title":""},key的固定只有
747  * title 标题
748  * msg: 消息
749  * cancelText: 取消按钮文字
750  * okText: 确定按钮文字
751  * cancelable: 是否可取消
752  * @param okBtnCallback 点击确认按钮的回调
753  * @param cancelBtnCallback 点击取消按钮的回调
754  * @param dismissListener 对话框消失的回调
b2d3f7 755  * @return {boolean} true 代表成功,false 代表失败
bc5e1e 756  */
X 757 UIWrapper.prototype.inputDialog = function (map, okBtnCallback, cancelBtnCallback, dismissListener) {
758     if (uiWrapper == null) {
759         return;
760     }
761     map = JSON.stringify(map);
762     return uiWrapper.inputDialog(map, okBtnCallback, cancelBtnCallback, dismissListener);
763 };
764
765 /**
766  * 自定义对话框
767  *  @param params 例如{"cancelable":""},key的固定只有
768  * fullScreen 是否全屏
769  * cancelable: 是否可取消
770  * @param view 原生的视图
771  * @param onViewBind 视图绑定时候回调函数
772  * @param dismissListener 对话框消失的回调
b2d3f7 773  * @return {boolean} true 代表成功,false 代表失败
bc5e1e 774  */
X 775 UIWrapper.prototype.customDialog = function (params, view, onViewBind, dismissListener) {
776     if (uiWrapper == null) {
777         return;
778     }
779     return uiWrapper.customDialog(JSON.stringify(params), view, onViewBind, dismissListener);
780 };
781
782 /**
783  * 在主线程进行运行函数,相当于 getHandler.post
784  * @param delayTime 延迟时间,单位毫秒,如果是0就是理解执行
785  * @param callback 回调
786  */
787 UIWrapper.prototype.run = function (delayTime, callback) {
788     if (uiWrapper == null) {
789         return;
790     }
791     return uiWrapper.run(delayTime, callback);
792 };
793
794 /**
795  * 向网页中注入一个JS函数,H5可以调用该函数,以实现脚本和HTML的互通扩展
796  * @param funcName 注入的函数名称
797  * @param callback 回调
b2d3f7 798  * @return {boolean} true 代表成功,false 代表失败
bc5e1e 799  */
X 800 UIWrapper.prototype.registeH5Function = function (funcName, callback) {
801     if (uiWrapper == null) {
802         return;
803     }
804     return uiWrapper.registeH5Function(funcName, callback);
805 };
806
807
808 /**
809  * 取消向网页中注入一个JS函数
810  * @param funcName 注入的函数名称
b2d3f7 811  * @return {boolean} true 代表成功,false 代表失败
bc5e1e 812  */
X 813 UIWrapper.prototype.unregisteH5Function = function (funcName) {
814     if (uiWrapper == null) {
815         return;
816     }
817     return uiWrapper.unregisteH5Function(funcName);
818 };
819
820
821 /**
822  * 设置加载网页的webview组件组件类型,默认是X5浏览器
823  * @param type 1:系统自带的webview, 2:X5浏览器
b2d3f7 824  * @return {boolean} true 代表成功,false 代表失败
bc5e1e 825  */
X 826 UIWrapper.prototype.setWebViewType = function (type) {
827     if (uiWrapper == null) {
828         return;
829     }
830     return uiWrapper.setWebViewType(type);
831 };
832
833 /**
834  * 脚本是否正在运行
b2d3f7 835  * @return {boolean} true 代表成功,false 代表失败
bc5e1e 836  */
X 837 UIWrapper.prototype.isScriptRunning = function () {
838     if (uiWrapper == null) {
839         return;
840     }
841     return uiWrapper.isScriptRunning();
842 };
843
844