uexWidget

2018-10-09 11:14 更新

1、简介

管理当前应用

2、API概览

2.1、方法

startWidget 加载一个widget

uexWidget.startWidget(appId,animiId,funName,info,animDuration)

说明:
在当前widget加载一个子widget
参数:

参数名称参数类型是否必选说明
appIdString子widget的appId
animiIdString子widget载入时的动画id,详见CONSTANT中WindowAnimiID
funNameString方法名,子widget结束时将String型的任意字符回调给该方法,可为空。 注意:只在主窗口中有效,浮动窗口中无效
infoString传给子widget的信息
animDurationString动画持续时长,单位为毫秒,默认200毫秒

平台支持:
Android 2.2+
iOS 6.0+

版本支持:
3.0.0+

示例:

  1. uexWidget.startWidget('12345','1','widgetDidFinish','open a widget',300)

finishWidget 退出一个widget

uexWidget.finishWidget(resultInfo,appId,isWgtBG)

说明:
退出一个widget。

参数:

参数名称参数类型是否必选说明
resultInfoString此widget结束时,传递给opener的信息
appIdString要结束的widget的appId,为空时退出的是当前的widget
isWgtBGNumber结束此widget的方式,0表示销毁该widget,下次再调 用startWidget时,重新打开;1表示把该widget置于后 台,下次再调用startWidget时,不重新打开,操作数据 全部保存。不传或为空时,默认为0。注意传该参数时,必须要传appId参数。

平台支持:
Android2.2+
iOS6.0+
版本支持:
3.0.0+
示例:

  1. uexWidget.finishWidget("finish a widget","12345",0);

removeWidget 删除一个widget

uexWidget.removeWidget(appId)
说明:

删除一个widget。

参数:

参数名称参数类型是否必选说明
appIdStringwidget的appId,主widget不能被删除。

平台支持:

Android2.2+

iOS6.0+

版本支持:

3.0.0+

示例:

  1. uexWidget.removeWidget(“12345”);

checkUpdate 检查更新

uexWidget.checkUpdate()

说明:
检查当前widget是否有更新。
参数:

平台支持:
Android2.2+
iOS6.0+
版本支持:
3.0.0+
示例:

  1. uexWidget.checkUpdate();

loadApp 启动第三方应用(iOS)

uexWidget.loadApp(appInfo)

说明:

根据相关信息启动一个第三方应用 。
假设应用A中有进行此UrlScheme配置,在另一个应用B中,通过引擎的JS方法uexWidget.loadApp('scheme1:');即可打开应用A(注意不要漏掉冒号!)

参数:

  1. appInfo:(String类型) 必选 第三方应用的[URLSchemes](http://newdocx.appcan.cn/newdocx/docx?type=1505_1291#type=”URLSCHEME” urlScheme管理(仅iOS) "此属性可以通过AppCan平台生成的ipa包里的Info.plist文件中找到")

平台支持:

iOS6.0+

版本支持:

3.0.0+

示例:

  1. var appInfo = "http://www.baidu.com";
  2. uexWidget.loadApp(appInfo);

startApp 启动第三方应用(Android)

uexWidget.startApp(startMode,mainInfo,addInfo,optInfo,extra)
说明:
根据相关信息启动一个第三方应用。
参数:

参数名称参数类型是否必选说明
startModeString启动方式,0表示通过包名和类名启动,1表示通过Action启动。
optInfoString附加参数,键值对,{key:value}格式多个用英文”,”隔开,如:”{‘key1’:’value1’},{‘key2’:’value1’}”。

startMode为0

参数名称参数类型是否必选说明
mainInfoString包名
addInfoString类名,为空时启动应用入口类
extraStringjson格式如下:
  1. {
  2. "data": "http://www.baidu.com",
  3. "isNewTask": "0"
  4. }

各字段含义如下:

参数是否必须说明
datadata属性
isNewTask启动第三方Activity时,值为0,不使用NEW_TASK,值不为0,使用NEW_TASK,默认使用NEW_TASK

startMode为1

参数名称参数类型是否必选说明
mainInfoStringaction
addInfoStringcategory或data,json格式如下:
  1. {
  2. "category": [
  3. "android.intent.category.WID",
  4. "android.intent.category.WID1"
  5. ],
  6. "data": {
  7. "mimeType": "image/png",
  8. "scheme": "sip"
  9. }
  10. }

各字段含义如下:

参数是否必须说明
categorycategory属性
datadata属性
mineTypemineType属性
schemescheme属性

注意事项:
如果通过包名类名启动AppCan应用,而且需要监听onLoadByOtherApp回调方法,则addInfo为必选。调用方法如下:
若包名为com.appcan.develop(开发者在使用时只需要更换包名即可),则调用代码如下:

  1. var packageName = "com.appcan.develop";
  2. var className = "org.zywx.wbpalmstar.engine.EBrowserActivity";
  3. var optInfo = "{'key1':'value1'},{'key2':'value1'}";
  4. uexWidget.startApp(0,packageName,className,optInfo);

平台支持:
Android2.2+

版本支持:
3.0.0+

示例:
1.要启动的AndroidManifest.xml文件如下:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3. package="com.dongjf.mytest"//com.dongjf.mytest即为包名
  4. android:versionCode="1"
  5. android:versionName="1.0" >
  6. <uses-sdk
  7. android:minSdkVersion="11"
  8. android:targetSdkVersion="18" />
  9. <application
  10. android:allowBackup="true"
  11. android:label="@string/app_name"
  12. android:theme="@style/AppTheme" >
  13. <activity
  14. android:name="MainActivity"
  15. android:label="@string/app_name"
  16. android:icon="@drawable/icon1"
  17. android:windowSoftInputMode="stateHidden|adjustResize"
  18. >
  19. <intent-filter>
  20. <action android:name="android.intent.action.MAIN" ></action>
  21. <category android:name="android.intent.category.LAUNCHER" ></category>
  22. </intent-filter>
  23. <intent-filter>
  24. <action android:name="com.djf.test.main" ></action>
  25. <category android:name="android.intent.category.DEFAULT" ></category>
  26. </intent-filter>
  27. </activity>
  28. <activity android:name="com.dongjf.mytest.SecondActivity">
  29. //通过包名启动,<intent-filter>标签非必须
  30. <intent-filter>
  31. <action android:name="com.djf.test.second" ></action>
  32. //通过action启动时,category DEFAULT属性必须,否则无法调起
  33. <category android:name="android.intent.category.DEFAULT" ></category>
  34. <data android:scheme="tel"></data>
  35. </intent-filter>
  36. </activity>
  37. <activity android:name="com.dongjf.mytest.ThirdActivity">
  38. <intent-filter>
  39. <action android:name="com.djf.test.second" ></action>
  40. <category android:name="android.intent.category.DEFAULT" ></category>
  41. <category android:name="android.intent.category.WID" ></category>
  42. <category android:name="android.intent.category.WID1" ></category>
  43. <data android:scheme="sip" android:mimeType="image/png"></data>
  44. </intent-filter>
  45. </activity>
  46. <activity android:name="com.dongjf.mytest.ForthActivity">
  47. <intent-filter>
  48. <action android:name="com.djf.test.second" ></action>
  49. <category android:name="android.intent.category.WID" ></category>
  50. <category android:name="android.intent.category.DEFAULT" ></category>
  51. <data android:mimeType="text/html"></data>
  52. </intent-filter>
  53. </activity>
  54. </application>
  55. </manifest>

2.启动该应用对应界面示例如下:

  1. <!DOCTYPE HTML>
  2. <HTML>
  3. <head>
  4. <meta charset="utf-8">
  5. <meta name="viewport" content="target-densitydpi=device-dpi, width=device-width, initial-scale=1, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
  6. <style>
  7. input{
  8. margin:.4em;
  9. font-size: 1.2em !important;
  10. }
  11. input[type="text"]{
  12. color: black;
  13. }
  14. p{
  15. font-size: 14px !important;
  16. }
  17. </style>
  18. <script type="text/javascript">
  19. function startAppP(mode){
  20. var main,add,opt;
  21. main = "com.dongjf.mytest";
  22. switch(mode){
  23. case 0:
  24. uexWidget.startApp(0, main);//启动应用的入口主类
  25. break;
  26. case 1:
  27. add = "com.dongjf.mytest.SecondActivity";
  28. uexWidget.startApp(0, main, add);//启动应用的SecondActivity类
  29. break;
  30. case 2:
  31. add = "com.dongjf.mytest.ThirdActivity";
  32. opt = "{'key1': 'value1'},{'key2': 'value2'}";
  33. uexWidget.startApp(0, main, add, opt);//启动应用的ThirdActivity类
  34. break;
  35. }
  36. }
  37. function startAppA(mode){
  38. var main,add,opt;
  39. switch(mode){
  40. case 0:
  41. main = "com.djf.test.main";
  42. uexWidget.startApp(1, main);//启动应用的MainActivity类
  43. break;
  44. case 1:
  45. main = "com.djf.test.second";
  46. add = '{"data":{"scheme":"tel"}}';
  47. uexWidget.startApp(1, main, add);//启动应用的SecondActivity类
  48. break;
  49. case 2:
  50. main = "com.djf.test.second";
  51. add = '{"data":{"mimeType":"text/html"}}';
  52. opt = "{'key1': 'value1'},{'key2': 'value2'}";
  53. uexWidget.startApp(1, main, add, opt);//启动应用的ForthActivity类
  54. break;
  55. case 3:
  56. main = "com.djf.test.second";
  57. add = '{"data":{"mimeType":"image/png","scheme":"sip"}}';
  58. opt = "{'key1': 'value1'},{'key2': 'value2'}";
  59. uexWidget.startApp(1, main, add, opt);//启动应用的ThirdActivity类
  60. break;
  61. case 4:
  62. main = "com.djf.test.second";
  63. add = '{"category":["android.intent.category.WID","android.intent.category.WID1"],"data":{"mimeType":"image/png","scheme":"sip"}}';
  64. uexWidget.startApp(1, main, add);//启动应用的ThirdActivity类
  65. break;
  66. }
  67. }
  68. </script>
  69. </head>
  70. <body>
  71. <input class="btn" type="button" value="通过包名启动0" onclick=startAppP(0)>
  72. <input class="btn" type="button" value="通过包名启动1" onclick=startAppP(1)>
  73. <input class="btn" type="button" value="通过包名启动2" onclick=startAppP(2)>
  74. <br><br>
  75. <input class="btn" type="button" value="通过Action启动0" onclick=startAppA(0)>
  76. <input class="btn" type="button" value="通过Action启动1" onclick=startAppA(1)>
  77. <input class="btn" type="button" value="通过Action启动2" onclick=startAppA(2)>
  78. <input class="btn" type="button" value="通过Action启动3" onclick=startAppA(3)>
  79. <input class="btn" type="button" value="通过Action启动4" onclick=startAppA(4)>
  80. </body>
  81. </html>

3.指定用QQ浏览器打开链接:

  1. var optInfo = "{'key1':'value1'},{'key2':'value1'}";
  2. var extra='{data:"http://www.appcan.cn/"}';
  3. uexWidget.startApp(0, "com.tencent.mtt","com.tencent.mtt.MainActivity",optInfo,extra);

4.指定用 系统浏览器(android) 打开链接:

  1. var value;
  2. appcan.ready(function() {
  3. value = uexWidgetOne.platformName;
  4. function openth() {
  5. if (value == "android") {
  6. uexWidget.startApp("1", "android.intent.action.VIEW", '{"data":{"mimeType":"text/html","scheme":"http://www.appcan.cn"}}');
  7. } else {
  8. uexWidget.loadApp("http://www.appcan.cn", null, null);
  9. }
  10. }
  11. })

getOpenerInfo 获取widget的相关信息

uexWidget.getOpenerInfo();
说明:
获取打开者传入此widget的相关信息。即调用startWidget时传入的info参数值。
参数:

平台支持:
Android2.2+
iOS6.0+
版本支持:
3.0.0+
示例:

  1. uexWidget.getOpenerInfo();

installApp 安装apk

uexWidget.installApp(appPath)

说明:

根据安装包所在路径安装一个apk。

参数:

参数名称参数类型是否必选说明
appPathStringapk所在路径

平台支持:
Android2.2+
版本支持:
3.0.0+
示例:

  1. var path = "res://pay.apk";
  2. uexWidget.installApp(path);

getPushInfo 获取推送消息

uexWidget.getPushInfo();
说明:

获取推送消息,上报消息到管理后台

参数:

参数名称参数类型是否必选说明
typeString想要获取的推送消息内容类型,0:具体的推送内容,1:包含推送标题等其他推送消息的JSON字符串,默认值为0

平台支持:

Android2.2+
iOS6.0+

版本支持:
3.0.0+

示例:

  1. uexWidget.getPushInfo();

setPushNotifyCallback 设置Push消息到达时的回调函数

uexWidget.setPushNotifyCallback(cbFunction)
说明:

如果应用开启了推送功能,那么当有消息推送进来时,平台将调用指定的cbFunction函数通知页面。

参数:

参数名称参数类型是否必选说明
cbFunctionString回调函数方法名,有回调参数,必选,即cbFunction(type),type:string类型,表示应用的状态,0 未启动,1 启动/后台, 2 启动/前台

平台支持:
Android2.2+
iOS6.0+
版本支持:
3.0.0+
示例:

  1. uexWidget.setPushNotifyCallback('pushCallback');
  2. function pushCallback(){
  3. alert("收到推送消息");
  4. }

setPushInfo 设置推送用户信息

uexWidget.setPushInfo(uId,uNickName)

说明:

设置推送用户信息

参数:

参数名称参数类型是否必选说明
uIdString用户ID
uNickNameString用户昵称

平台支持:

Android2.2+
iOS6.0+

版本支持:

3.0.0+

示例:

  1. uexWidget.setPushInfo('user10001','姓名');

setPushState 设置推送服务的状态

uexWidget.setPushState(state)

说明:

设置推送服务的状态

参数:

参数名称参数类型是否必选说明
stateNumber推送服务状态0-关闭 1-开启

平台支持:

Android2.2+
iOS6.0+

版本支持:

3.0.0+

示例:

  1. uexWidget.setPushState(0);

getPushState 获取推送服务的状态

uexWidget.getPushState();

说明:

获取推送服务的状态

参数:

平台支持:

Android2.2+
iOS6.0+

版本支持:

3.0.0+

示例:

  1. uexWidget.getPushState();

isAppInstalled 是否安装某第三方应用

uexWidget.isAppInstalled(json)

说明:

是否安装某第三方应用

  • 在iOS9.0+的系统上,只有在URLScheme白名单内的应用才会被正确的检测是否安装。检测在URLScheme白名单外的应用会一律返回未安装的结果。

参数:

  1. var json = {
  2. appData://(必选) 第三方应用数据,android平台为第三方应用包名;iOS平台为 Scheme Url
  3. }

返回值:

在3.4+引擎下此方法具有Boolean类型返回值:当应用已安装时会返回true,当应用未安装或者调用接口的参数错误时会返回false

平台支持:

Android2.2+
iOS6.0+

版本支持:

3.0.0+

示例:

  1. var param1 = {
  2. appData:'com.tencent.mobileqq'//判断手机上是否安装qq应用
  3. };
  4. var data1 = JSON.stringify(param1);
  5. uexWidget.isAppInstalled(data1);

closeLoading 关闭loading图

uexWidget.closeLoading()

说明:

关闭启动图。用于应用启动期间需要做页面跳转等逻辑。需要在config.xml 添加 <removeloading>true</removeloading>配置。 添加之后引擎不会关闭启动图,由前端调用此接口关闭,超时(时间为3秒)之后引擎才会关闭启动图。

参数:

平台支持:

iOS 7.0+
Android2.2+

版本支持:

iOS 3.4.1+
Android 3.2.0+

示例:

  1. uexWidget.closeLoading();

moveToBack 运行到后台,不退出程序

uexWidget.moveToBack()

说明:

程序将会在后台运行,不退出。只支持Android。

参数:

平台支持:

Android2.2+

版本支持:

3.2.2+

示例:

  1. uexWidget.moveToBack();

reloadWidgetByAppId 根据appId重载widget

uexWidget.reloadWidgetByAppId(appId);

说明

在子widget更新完成时调用可加载更新的html、js、css

参数

  1. appId:子widget对应的appId(必选)

平台支持

Android 2.2+
iOS 5.1.1+

版本支持

3.1.0+

示例

  1. uexWidget.reloadWidgetByAppId(sdk2015);

setKeyboardMode 设置键盘模式

uexWidget.setKeyboardMode(json)
说明
仅支持安卓平台,此设置在线云端打包已支持配置。选择键盘模式-“压缩模式”页面随键盘平移而平移(可解决键盘遮盖输入框),“平移模式”仅键盘平移,页面不移动。
参数:

  1. var json = {
  2. mode://(必选) Number类型 0:压缩模式 1:平移模式
  3. }

平台支持:

Android2.2+

版本支持:

3.2.0+

示例:

  1. var json = {
  2. mode:0
  3. };
  4. var data1 = JSON.stringify(json);
  5. uexWidget.setKeyboardMode(data1);

getMBaaSHost 获取MBaaS主机内容

uexWidget.getMBaaSHost()

说明:

获取MBaaS主机内容

参数:

平台支持:

Android2.2+
iOS6.0+

版本支持:

3.3.1+

示例:

  1. uexWidget.getMBaaSHost()

2.2 回调方法

cbStartWidget 加载widget完成时的回调方法

uexWidget.cbStartWidget(opId,dataType,data)

参数:

参数名称参数类型是否必选说明
opIdNumber操作ID,在此函数中不起作用,可忽略
dataTypeNumber参数类型
dataNumber0-成功 1-失败

平台支持:

Android2.2+
iOS6.0+

版本支持:
3.0.0+

示例:

  1. uexWidget.cbStartWidget=function(opId,dataType,data){
  2. alert('opid:'+opId+',dataType:'+dataType+',data:'+data);
  3. }

cbRemoveWidget 删除widget完成时的回调方法

uexWidget.cbRemoveWidget(opId,dataType,data)

参数:

参数名称参数类型是否必选说明
opIdNumber操作ID,在此函数中不起作用,可忽略
dataTypeNumber参数类型
dataNumber0-成功 1-失败

平台支持:

Android2.2+
iOS6.0+

版本支持:
3.0.0+

示例:

  1. uexWidget.cbRemoveWidget=function(opId,dataType,data){
  2. alert('opid:'+opId+',dataType:'+dataType+',data:'+data);
  3. }

cbCheckUpdate 检查更新完成时的回调方法

uexWidget.cbCheckUpdate(opId,dataType,data)

参数:

参数名称参数类型是否必选说明
opIdNumber操作ID,在此函数中不起作用,可忽略
dataTypeNumber参数类型
dataString检查结果 json格式
  1. var data={
  2. result:,//0- 需要更新 1- 不需要更新 2- 错误
  3. }

平台支持:

Android2.2+
iOS6.0+

版本支持:

3.0.0+
示例:

  1. uexWidget.cbCheckUpdate=function(opId,dataType,data){
  2. alert('opid:'+opId+',dataType:'+dataType+',data:'+data);
  3. }

cbGetOpenerInfo 获取widget相关信息的回调方法

uexWidget.cbGetOpenerInfo(opId,dataType,data)

参数:

参数名称参数类型是否必选说明
opIdNumber操作ID,在此函数中不起作用,可忽略
dataTypeNumber参数类型
dataString返回的数据 本widget的打开者通过startWidget函数打开本widget时传入的info参数值

平台支持:

Android2.2+
iOS6.0+

版本支持:

3.0.0+

示例:

  1. uexWidget.cbGetOpenerInfo=function(opId,dataType,data){
  2. alert('opid:'+opId+',dataType:'+dataType+',data:'+data);
  3. }

cbGetPushInfo 获取推送消息的回调方法

uexWidget.cbGetPushInfo(opId,dataType,data)

参数:

参数名称参数类型是否必选说明
opIdNumber操作ID,在此函数中不起作用,可忽略
dataTypeNumber参数类型
dataString返回的数据 json格式字符串
  1. 根据iOS平台推送的特殊性,推送服务器发出的推送的json格式为
  2. var data={
  3. aps{
  4. alert:,//推送消息的标题
  5. badge:,//应用图标上显示的通知数
  6. sound:,//收到推送消息的声音文件
  7. userInfo:,//推送收到的数据
  8. }
  9. }

平台支持:

Android2.2+
iOS6.0+

版本支持:

3.0.0+
示例:

  1. uexWidget.cbGetPushInfo=function(opId,dataType,data){
  2. alert('opid:'+opId+',dataType:'+dataType+',data:'+data);
  3. }

cbGetPushState 获取推送状态的回调方法

uexWidget.cbGetPushState(opId,dataType,data)

参数:

参数名称参数类型是否必选说明
opIdNumber操作ID,在此函数中不起作用,可忽略
dataTypeNumber参数类型
dataNumber0-关闭 1-开启

平台支持:

Android2.2+

iOS6.0+

版本支持:

3.0.0+
示例:

  1. uexWidget.cbGetPushState=function(opId,dataType,data){
  2. alert('opid:'+opId+',dataType:'+dataType+',data:'+data);
  3. }

cbIsAppInstalled 是否安装某第三方应用的回调方法

uexWidget.cbIsAppInstalled(json);

参数:

  1. var json = {
  2. installed://返回结果,0-已安装;1-未安装。
  3. }

平台支持:

Android 2.2+
iOS 6.0+

版本支持:

3.0.0+

示例:

  1. uexWidget.cbIsAppInstalled = function(info){
  2. var result = JSON.parse(info);
  3. if(result.installed == 0){
  4. alert('installed');
  5. }else{
  6. alert('not installed');
  7. }
  8. }

cbStartApp 启动第三方应用的回调方法

启动第三方应用的回调方法,该方法在未成功调用第三方应用时回调。

uexWidget.cbStartApp(info);

参数:

参数名称参数类型是否必选说明
infoString回调信息内容

平台支持:

Android 2.2+

版本支持:

3.0.0+

示例:

  1. uexWidget.cbStartApp = function(info){
  2. alert(info);
  3. }

cbGetMBaaSHost 获取MBaaS主机内容的回调方法

uexWidget.cbGetMBaaSHost(opId,dataType,data)

参数:

参数名称参数类型是否必选说明
opIdNumber操作ID,在此函数中不起作用,可忽略
dataTypeNumber参数类型
dataString返回的MBaaS主机内容

平台支持:

Android2.2+

iOS6.0+

版本支持:

3.3.1+

示例:

  1. uexWidget.cbGetMBaaSHost=function(opId,dataType,data){
  2. alert('opid:'+opId+',dataType:'+dataType+',data:'+data);
  3. }

2.3 监听方法

  • 所有的监听方法都得在root页面进行监听

onLoadByOtherApp 被第三方应用调起的监听方法

uexWidget.onLoadByOtherApp(jsonData)

参数:

  1. jsonData:(String类型) 必选 传递的数据,json格式为:{"key1":"value1","key2":"value2","key3":"value3","key4":"value4"}

版本支持:
3.0.0+
示例:

  1. 第三方应用调用appcan应用示例代码:
  2. Android调用方式:
  3. Intent intent = new Intent(Intent.ACTION_MAIN);
  4. intent.addCategory(Intent.CATEGORY_LAUNCHER);
  5. ComponentName cn = new ComponentName("org.zywx.wbpalmstar.widgetone.uex11352778", "org.zywx.wbpalmstar.engine.EBrowserActivity");
  6. //其中"org.zywx.wbpalmstar.widgetone.uex11352778"为appcan应用的包名
  7. intent.setComponent(cn);
  8. Bundle bd=new Bundle();
  9. bd.putString("key1","value1");
  10. bd.putString("key2","value2");
  11. bd.putString("key3","value3");
  12. bd.putString("key4","value4");
  13. intent.putExtras(bd);
  14. startActivity(intent);
  15. iOS调用方式:
  16. NSString * url = @"AppCanPlugin://AppCan?k1=v1&k2=v2&k3=v3&k4=v4";
  17. //AppCanPlugin是appcan应用的scheme
  18. [[UIApplication sharedApplication] openURL:[NSURL URLWithString:url]];
  1. 应用入口页面注册监听代码:
  2. function onLoadByOtherApp(jsonData){
  3. alert(jsonData);
  4. }

onSuspend 程序挂起的监听方法

uexWidget.onSuspend()

参数:

平台支持:

Android 2.2+
iOS 6.0+

版本支持:

3.0.0+

示例:

  1. uexWidget.onSuspend = function(){
  2. alert("程序挂起");
  3. }

onResume 程序恢复的监听方法

uexWidget.onResume()

参数:

平台支持:

Android 2.2+

iOS 6.0+

版本支持:

3.0.0+

示例:

  1. uexWidget.onResume = function(){
  2. alert("程序恢复");
  3. }
以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号