utsApiJson.json 855.0 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148
{
  "getApp": {
    "name": "## getApp() @getapp",
    "description": "`getApp()` 函数用于获取当前应用实例,可通过应用实例调用 App.uvue methods 中定义的方法。",
    "compatibility": "### getApp  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n",
    "param": "",
    "returnValue": "### 返回值  兼容性 \n\n| 类型 |\n| :- |\n| any |\n \n",
    "tutorial": "\n### 参见\n\n- [参见uni-app相关文档](https://uniapp.dcloud.net.cn/tutorial/page.html#getapp)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=getApp&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=getApp&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=getApp&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=getApp&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=getApp&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=getApp)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=getApp&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.global.getApp)",
    "example": "### 示例 \n> [hello uni-app x](https://gitcode.net/dcloud/hello-uni-app-x/-/blob/dev/pages/API/get-app/get-app.uvue) \n ::: preview https://hellouniappx.dcloud.net.cn/web/#/pages/API/get-app/get-app\n>Template\n```vue\n<template>\r\n  <!-- #ifdef APP -->\r\n  <scroll-view style=\"flex: 1; padding-bottom: 20px\">\r\n  <!-- #endif -->\r\n    <view>\r\n      <page-head title=\"getApp\"></page-head>\r\n      <view class=\"uni-padding-wrap\">\r\n        <button @click=\"getGlobalData\">get globalData</button>\r\n        <template v-if=\"originGlobalData.str.length\">\r\n          <text class=\"uni-common-mt bold\">初始的 globalData:</text>\r\n          <text class=\"uni-common-mt\">globalData string: {{ originGlobalData.str }}</text>\r\n          <text class=\"uni-common-mt\">globalData number: {{ originGlobalData.num }}</text>\r\n          <text class=\"uni-common-mt\">globalData boolean: {{ originGlobalData.bool }}</text>\r\n          <text class=\"uni-common-mt\">globalData object: {{ originGlobalData.obj }}</text>\r\n          <text class=\"uni-common-mt\">globalData null: {{ originGlobalData.null }}</text>\r\n          <text class=\"uni-common-mt\">globalData array: {{ originGlobalData.arr }}</text>\r\n          <text class=\"uni-common-mt\">globalData Set: {{ originGlobalData.mySet }}</text>\r\n          <text class=\"uni-common-mt\">globalData Map: {{ originGlobalData.myMap }}</text>\r\n          <text class=\"uni-common-mt\">globalData func 返回值: {{ originGlobalDataFuncRes }}</text>\r\n        </template>\r\n        <button @click=\"setGlobalData\" class=\"uni-common-mt\">\r\n          set globalData\r\n        </button>\r\n        <template v-if=\"newGlobalData.bool\">\r\n          <text class=\"uni-common-mt bold\">更新后的 globalData:</text>\r\n          <text class=\"uni-common-mt\">globalData string: {{ newGlobalData.str }}</text>\r\n          <text class=\"uni-common-mt\">globalData number: {{ newGlobalData.num }}</text>\r\n          <text class=\"uni-common-mt\">globalData boolean: {{ newGlobalData.bool }}</text>\r\n          <text class=\"uni-common-mt\">globalData object: {{ newGlobalData.obj }}</text>\r\n          <text class=\"uni-common-mt\">globalData null: {{ newGlobalData.null }}</text>\r\n          <text class=\"uni-common-mt\">globalData array: {{ newGlobalData.arr }}</text>\r\n          <text class=\"uni-common-mt\">globalData Set: {{ newGlobalData.mySet }}</text>\r\n          <text class=\"uni-common-mt\">globalData Map: {{ newGlobalData.myMap }}</text>\r\n          <text class=\"uni-common-mt\">globalData func 返回值: {{ newGlobalDataFuncRes }}</text>\r\n        </template>\r\n        <text class=\"uni-common-mt\">点击按钮调用 App.uvue methods</text>\r\n        <text class=\"uni-common-mt\">increasetLifeCycleNum 方法</text>\r\n        <button class=\"uni-common-mt\" @click=\"_increasetLifeCycleNum\">\r\n          increase lifeCycleNum\r\n        </button>\r\n        <text class=\"uni-common-mt\">lifeCycleNum: {{ lifeCycleNum }}</text>\r\n      </view>\r\n    </view>\r\n  <!-- #ifdef APP -->\r\n  </scroll-view>\r\n  <!-- #endif -->\r\n</template>\r\n\r\n\r\n\r\n<style>\r\n  .bold {\r\n    font-weight: bold;\r\n  }\r\n\r\n  .hr {\r\n    border-bottom: 1px solid #ccc;\r\n  }\r\n</style>\n\n```\n>Script\n```uts\n\r\n  import { state, setLifeCycleNum } from '@/store/index.uts'\r\n\r\n  type MyGlobalData = {\r\n    str : string,\r\n    num : number,\r\n    bool : boolean,\r\n    obj : UTSJSONObject,\r\n    null : string | null,\r\n    arr : number[],\r\n    mySet : string[],\r\n    myMap : UTSJSONObject,\r\n    func : () => string\r\n  }\r\n\r\n  export default {\r\n    data() {\r\n      return {\r\n        originGlobalData: {\r\n          str: '',\r\n          num: 0,\r\n          bool: false,\r\n          obj: {\r\n            str: '',\r\n            num: 0,\r\n            bool: false\r\n          } as UTSJSONObject,\r\n          null: null,\r\n          arr: [] as number[],\r\n          mySet: [] as string[],\r\n          myMap: {},\r\n          func: () : string => ''\r\n        } as MyGlobalData,\r\n        originGlobalDataFuncRes: '',\r\n        newGlobalData: {\r\n          str: '',\r\n          num: 0,\r\n          bool: false,\r\n          obj: {\r\n            str: '',\r\n            num: 0,\r\n            bool: false\r\n          } as UTSJSONObject,\r\n          null: null,\r\n          arr: [] as number[],\r\n          mySet: [] as string[],\r\n          myMap: {},\r\n          func: () : string => ''\r\n        } as MyGlobalData,\r\n        newGlobalDataFuncRes: '',\r\n        lifeCycleNum: 0,\r\n      }\r\n    },\r\n    onReady() {\r\n      this.lifeCycleNum = state.lifeCycleNum\r\n    },\r\n    methods: {\r\n      getGlobalData() {\r\n        const app = getApp()\r\n\r\n        this.originGlobalData.str = app.globalData.str\r\n        this.originGlobalData.num = app.globalData.num\r\n        this.originGlobalData.bool = app.globalData.bool\r\n        this.originGlobalData.obj = app.globalData.obj\r\n        this.originGlobalData.null = app.globalData.null\r\n        this.originGlobalData.arr = app.globalData.arr\r\n        app.globalData.mySet.forEach((value : string) => {\r\n          this.originGlobalData.mySet.push(value)\r\n        })\r\n        app.globalData.myMap.forEach((value : any, key : string) => {\r\n          this.originGlobalData.myMap[key] = value\r\n        })\r\n        this.originGlobalData.func = app.globalData.func\r\n        this.originGlobalDataFuncRes = this.originGlobalData.func()\r\n      },\r\n      setGlobalData() {\r\n        const app = getApp()\r\n\r\n        app.globalData.str = 'new globalData str'\r\n        app.globalData.num = 100\r\n        app.globalData.bool = true\r\n        app.globalData.obj = {\r\n          str: 'new globalData obj str',\r\n          num: 200,\r\n          bool: true\r\n        }\r\n        app.globalData.null = 'not null'\r\n        app.globalData.arr = [1, 2, 3]\r\n        app.globalData.mySet = new Set(['a', 'b', 'c'])\r\n        app.globalData.myMap = new Map([\r\n          ['a', 1],\r\n          ['b', 2],\r\n          ['c', 3]\r\n        ])\r\n        app.globalData.func = () : string => {\r\n          return 'new globalData func'\r\n        }\r\n\r\n        this.newGlobalData.str = app.globalData.str\r\n        this.newGlobalData.num = app.globalData.num\r\n        this.newGlobalData.bool = app.globalData.bool\r\n        this.newGlobalData.obj = app.globalData.obj\r\n        this.newGlobalData.null = app.globalData.null\r\n        this.newGlobalData.arr = app.globalData.arr\r\n        app.globalData.mySet.forEach((value : string) => {\r\n          this.newGlobalData.mySet.push(value)\r\n        })\r\n        app.globalData.myMap.forEach((value : any, key : string) => {\r\n          this.newGlobalData.myMap[key] = value\r\n        })\r\n        this.newGlobalData.func = app.globalData.func\r\n        this.newGlobalDataFuncRes = this.newGlobalData.func()\r\n      },\r\n      _increasetLifeCycleNum: function () {\r\n        const app = getApp()\r\n        app.increasetLifeCycleNum()\r\n        this.lifeCycleNum = state.lifeCycleNum\r\n      },\r\n      // 自动化测试\r\n      setLifeCycleNum(num : number) {\r\n        setLifeCycleNum(num)\r\n      }\r\n    },\r\n  }\r\n\n```\n:::"
  },
  "getCurrentPages": {
    "name": "## getCurrentPages() @getcurrentpages",
    "description": "`getCurrentPages()` 函数用于获取当前页面栈的实例,以数组形式按栈的顺序给出,数组中的元素为页面实例,第一个元素为首页,最后一个元素为当前页面。",
    "compatibility": "### getCurrentPages  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.9 | 4.11 |\n",
    "param": "",
    "returnValue": "### 返回值  兼容性 \n\n| 类型 |\n| :- |\n| Array\\<[Page](#page-values)\\> |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| route | string | 是 | - | - | 页面的路由地址 |\n@| options | Map\\<string, string \\| null> | 是 | - | - | 页面的路由参数信息,目前web端options类型为Object,后续可能会调整 |\n#### Page 的方法 @page-values \n\n#### $getPageStyle() @$getpagestyle\n获取当前页面样式 \\<br/>包含 pages.json 页面下的 style 节点属性和根节点 globalStyle 属性\n##### $getPageStyle  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.13 | 4.13 | 4.13 |\n\n\n##### 返回值  兼容性 \n\n| 类型 |\n| :- |\n| [UTSJSONObject](/uts/buildin-object-api/utsjsonobject.md) |\n \n\n#### $setPageStyle(style) @$setpagestyle\n设置当前页面样式 \\<br/>支持 pages.json 页面下的 style 节点属性和根节点 globalStyle 属性\n##### $setPageStyle  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.13 | 4.13 | 4.13 |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| style | [UTSJSONObject](/uts/buildin-object-api/utsjsonobject.md) | 是 | - | - | 如果属性名存在,且类型为UTSJSONObject返回对应的结果,不存在返回null | \n\n \n",
    "tutorial": "\n### 参见\n\n- [参见uni-app相关文档](https://uniapp.dcloud.net.cn/tutorial/page.html#getcurrentpages)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=getCurrentPages&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=getCurrentPages&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=getCurrentPages&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=getCurrentPages&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=getCurrentPages&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=getCurrentPages)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=getCurrentPages&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.global.getCurrentPages)",
    "example": "### 示例 \n> [hello uni-app x](https://gitcode.net/dcloud/hello-uni-app-x/-/blob/dev/pages/API/get-current-pages/get-current-pages.uvue) \n ::: preview https://hellouniappx.dcloud.net.cn/web/#/pages/API/get-current-pages/get-current-pages\n>Template\n```vue\n<template>\r\n  <!-- #ifdef APP -->\r\n  <scroll-view class=\"page-scroll-view\">\r\n  <!-- #endif -->\r\n    <page-head title=\"getCurrentPages\"></page-head>\r\n    <view class=\"uni-padding-wrap\">\r\n      <button @click=\"_getCurrentPages\">getCurrentPages</button>\r\n      <view v-if=\"pages.length\" style=\"padding: 15px 0px\">\r\n        <text>当前页面栈中 {{ pages.length }} 个页面,列表如下:</text>\r\n        <template v-for=\"(page, index) in pages\" :key=\"page.route\">\r\n          <text style=\"margin-top: 5px\">index: {{ index }}, route: {{ page.route }}</text>\r\n        </template>\r\n      </view>\r\n    </view>\r\n\r\n    <page-head title=\"currentPageStyle\"></page-head>\r\n    <template v-for=\"(item, index) in PageStyleArray\">\r\n      <view class=\"page-style-item\" v-if=\"currentPageStyle[item.key]!=null\" :key=\"index\">\r\n        <view class=\"item-text\">\r\n          <text class=\"item-text-key\">{{item.key}}:</text>\r\n          <text class=\"item-text-value\">{{currentPageStyle[item.key]}}</text>\r\n        </view>\r\n        <view class=\"set-value\" v-if=\"item.type == 'boolean'\">\r\n          <switch :checked=\"currentPageStyle.getBoolean(item.key)\"\r\n            @change=\"switchChange(item.key, $event as UniSwitchChangeEvent)\">\r\n          </switch>\r\n        </view>\r\n        <view class=\"set-value\" v-else-if=\"item.type == 'number'\">\r\n          <slider :value=\"currentPageStyle.getNumber(item.key)\" :show-value=\"true\"\r\n            @change=\"sliderChange(item.key, $event as UniSliderChangeEvent)\" />\r\n        </view>\r\n        <view class=\"set-value\" v-else-if=\"item.type == 'string'\">\r\n          <radio-group class=\"radio-set-value\" @change=\"radioChange(item.key, $event as RadioGroupChangeEvent)\">\n            <radio class=\"radio-value\" v-for=\"(item2, index2) in item.value\" :key=\"index2\" :value=\"item2\" >{{item2}}</radio>\n          </radio-group>\r\n        </view>\r\n      </view>\r\n    </template>\r\n  <!-- #ifdef APP -->\r\n  </scroll-view>\r\n  <!-- #endif -->\r\n</template>\r\n\r\n\r\n\r\n<style>\r\n  .page {\r\n    flex: 1;\r\n    padding: 10px;\r\n  }\r\n\r\n  .page-style {\r\n    margin-top: 15px;\r\n  }\r\n\r\n  .page-style-item {\r\n    padding: 10px;\r\n    margin-top: 10px;\r\n    background-color: #ffffff;\r\n    border-radius: 5px;\r\n  }\r\n\r\n  .item-text {\r\n    flex-direction: row;\r\n  }\r\n\r\n  .item-text-key {\r\n    font-weight: bold;\r\n  }\r\n\r\n  .item-text-value {\r\n    margin-left: 5px;\r\n  }\r\n\r\n  .set-value {\r\n    margin-top: 10px;\r\n  }\r\n\r\n  .radio-set-value {\r\n    flex-direction: row;\r\n  }\r\n\r\n  .radio-value {\n    margin-left: 10px;\n  }\r\n</style>\n\n```\n>Script\n```uts\n\r\n  import { PageStyleItem, PageStyleArray } from './page-style.uts';\r\n\r\n  class Page {\r\n    constructor(public route : string) {\r\n    }\r\n  }\r\n\r\n  export default {\r\n    data() {\r\n      return {\r\n        checked: false,\r\n        pages: [] as Page[],\r\n        PageStyleArray: PageStyleArray as PageStyleItem[],\r\n        currentPageStyle: {} as UTSJSONObject,\r\n      }\r\n    },\r\n    computed: {\r\n      pageStyleText() : string {\r\n        return JSON.stringify(this.currentPageStyle)\r\n      }\r\n    },\r\n    onLoad() {\r\n      this.getPageStyle();\r\n    },\r\n    onPullDownRefresh() {\r\n      setTimeout(() => {\r\n        uni.stopPullDownRefresh()\r\n      }, 2000)\r\n    },\r\n    methods: {\r\n      startPullDownRefresh() {\r\n        uni.startPullDownRefresh()\r\n      },\r\n      _getCurrentPages: function () {\r\n        this.pages.length = 0\r\n        const pages = getCurrentPages()\r\n        this.pages.push(new Page(pages[0].route))\r\n        if (this.pages[0].route.includes('/tabBar/')) {\r\n          this.checked = true\r\n        }\r\n        for (let i = 1; i < pages.length; i++) {\r\n          this.pages.push(new Page(pages[i].route))\r\n          if (pages[i].route.includes('/tabBar/')) {\r\n            this.checked = false\r\n          }\r\n        }\r\n      },\r\n      /// get-set-page-style\r\n      radioChange(key : string, e : RadioGroupChangeEvent) {\r\n        this.setStyleValue(key, e.detail.value);\r\n      },\r\n      sliderChange(key : string, e : UniSliderChangeEvent) {\r\n        this.setStyleValue(key, e.detail.value);\r\n      },\r\n      switchChange(key : string, e : UniSwitchChangeEvent) {\r\n        this.setStyleValue(key, e.detail.value);\r\n      },\r\n      setStyleValue(key : string, value : any) {\r\n        const style = {}\r\n        style[key] = value\r\n        this.setPageStyle(style)\r\n        this.getPageStyle()\r\n      },\r\n      getPageStyle() : UTSJSONObject {\r\n        const pages = getCurrentPages();\r\n        const currentPage = pages[pages.length - 1];\r\n        this.currentPageStyle = currentPage.$getPageStyle()\r\n        return this.currentPageStyle;\r\n      },\r\n      setPageStyle(style : UTSJSONObject) {\r\n        console.log('setPageStyle:', style);\r\n        const pages = getCurrentPages();\r\n        const currentPage = pages[pages.length - 1];\r\n        currentPage.$setPageStyle(style);\r\n      },\r\n      // getCurrentPage(): Page {\r\n      //   const pages = getCurrentPages();\r\n      //   const currentPage = pages[pages.length - 1];\r\n      //   return currentPage;\r\n      // }\r\n    },\r\n  }\r\n\n```\n:::"
  },
  "env": {
    "name": "## env",
    "description": "",
    "param": "### env 的属性值 @env-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| USER_DATA_PATH | string | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"-\",\"3.99\",\"4.11\"]]}' /> | 应用专属存储空间的外置存储空间根目录下的files目录 |\n| CACHE_PATH | string | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"-\",\"3.99\",\"4.11\"]]}' /> | 应用专属存储空间的外置存储空间根目录下的cache目录 |\n| SANDBOX_PATH | string | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"-\",\"3.99\",\"4.11\"]]}' /> | 应用专属存储空间的外置存储空间根目录(caches/files) |\n",
    "compatibility": "",
    "returnValue": "",
    "tutorial": "\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=env&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=env&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=env&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=env&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=env&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=env)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=env&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.base.env)",
    "example": "### 示例 \n> [hello uni-app x](https://gitcode.net/dcloud/hello-uni-app-x/-/blob/dev/pages/API/env/env.uvue) \n ::: preview https://hellouniappx.dcloud.net.cn/web/#/pages/API/env/env\n>Template\n```vue\n<template>\n  <!-- #ifdef APP -->\n  <text>操作日志</text><button size=\"mini\" @click=\"log=''\">清空日志</button>\n  <text style=\"margin: 2px; padding: 2px; border: 1px solid #000000;\">{{ log }}</text>\n  <scroll-view style=\"flex: 1;\">\n  <!-- #endif -->\n    <!-- #ifdef APP -->\n    <button class=\"btnstyle\" type=\"primary\" @tap=\"geAbsPath(sandboxPath)\" id=\"btn-path\">应用外置沙盒目录uni.env.SANDBOX_PATH</button>\n    <button class=\"btnstyle\" type=\"primary\" @tap=\"geAbsPath(cachePath)\" id=\"btn-path\">缓存文件目录uni.env.CACHE_PATH</button>\n    <button class=\"btnstyle\" type=\"primary\" @tap=\"geAbsPath(userPath)\" id=\"btn-path\">用户文件目录uni.env.USER_DATA_PATH</button>\n    <button class=\"btnstyle\" type=\"primary\" @tap=\"geAbsPath(internalSandboxPath)\"\n      id=\"btn-path\">应用内置沙盒目录uni.env.ANDROID_INTERNAL_SANDBOX_PATH</button>\n    <!-- #endif -->\n  <!-- #ifdef APP -->\n  </scroll-view>\n  <!-- #endif -->\n</template>\n\n\n\n<style>\n  .btnstyle {\n    margin: 4px;\n  }\n</style>\n\n```\n>Script\n```uts\n\n  export default {\n\n    data() {\n      return {\n        log: \"\",\n        userPath: uni.env.USER_DATA_PATH,\n        sandboxPath: uni.env.SANDBOX_PATH,\n        cachePath: uni.env.CACHE_PATH,\n        internalSandboxPath: uni.env.ANDROID_INTERNAL_SANDBOX_PATH,\n      }\n    },\n    onLoad() {\n    },\n\n    methods: {\n      geAbsPath(path ?: Any) {\n        // #ifdef APP-ANDROID\n          this.log += UTSAndroid.convert2AbsFullPath(path as String) + '\\n'\n        // #endif\n\n      }\n    }\n  }\n\n```\n:::"
  },
  "$on": {
    "name": "## uni.$on(eventName, callback) @$on",
    "description": "监听自定义事件。事件可以由 uni.$emit 触发。回调函数会接收 uni.$emit 传递的参数。<br/>",
    "compatibility": "### $on  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.91 | 4.11 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| eventName | string | 是 | - | - | - |\n| callback | () => void | 是 | - | - | - | \n",
    "returnValue": "",
    "tutorial": "\n### 参见\n\n- [参见uni-app x相关文档](https://doc.dcloud.net.cn/uni-app-x/api/event-bus.html#on)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=$on&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=$on&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=$on&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=$on&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=$on&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=$on)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=$on&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.base.eventBus.$on)"
  },
  "$once": {
    "name": "## uni.$once(eventName, callback) @$once",
    "description": "监听一个自定义事件。事件只触发一次,在第一次触发之后移除事件监听器。<br/>",
    "compatibility": "### $once  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.91 | 4.11 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| eventName | string | 是 | - | - | - |\n| callback | () => void | 是 | - | - | - | \n",
    "returnValue": "",
    "tutorial": "\n### 参见\n\n- [参见uni-app x相关文档](https://doc.dcloud.net.cn/uni-app-x/api/event-bus.html#once)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=$once&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=$once&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=$once&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=$once&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=$once&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=$once)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=$once&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.base.eventBus.$once)"
  },
  "$off": {
    "name": "## uni.$off(eventName, callback?) @$off",
    "description": "移除自定义事件监听器。如果提供了事件名和回调,则只移除这个回调的监听器。<br/>4.13+ 开始支持第二个参数为可选,如果仅提供事件名,则移除该事件的所有监听器。",
    "compatibility": "### $off  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.91 | 4.11 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| eventName | string | 是 | - | - | - |\n| callback | () => void \\| null | 否 | - | - |  | \n",
    "returnValue": "",
    "tutorial": "\n### 参见\n\n- [参见uni-app x相关文档](https://doc.dcloud.net.cn/uni-app-x/api/event-bus.html#off)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=$off&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=$off&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=$off&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=$off&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=$off&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=$off)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=$off&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.base.eventBus.$off)"
  },
  "$emit": {
    "name": "## uni.$emit(eventName, args?) @$emit",
    "description": "触发自定义事件,附加的参数会传递给事件监听器。<br/>",
    "compatibility": "### $emit  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.91 | 4.11 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| eventName | string | 是 | - | - | - |\n| args | any \\| null | 否 | - | - |  | \n",
    "returnValue": "",
    "tutorial": "\n### 参见\n\n- [参见uni-app x相关文档](https://doc.dcloud.net.cn/uni-app-x/api/event-bus.html#emit)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=$emit&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=$emit&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=$emit&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=$emit&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=$emit&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=$emit)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=$emit&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.base.eventBus.$emit)"
  },
  "eventBus": {
    "example": "## 示例 \n> [hello uni-app x](https://gitcode.net/dcloud/hello-uni-app-x/-/blob/dev/pages/API/event-bus/event-bus.uvue) \n ::: preview https://hellouniappx.dcloud.net.cn/web/#/pages/API/event-bus/event-bus\n>Template\n```vue\n<template>\r\n  <!-- #ifdef APP -->\r\n  <scroll-view class=\"page-scroll-view\">\r\n  <!-- #endif -->\r\n    <view>\r\n      <button @click=\"on\">开始监听</button>\r\n      <button @click=\"once\">监听一次</button>\r\n      <button @click=\"off\">取消监听</button>\n      <!-- <button @click=\"offAll\">取消全部监听</button> -->\r\n      <button @click=\"emit\">触发监听</button>\r\n      <button @click=\"clear\">清空消息</button>\r\n      <view class=\"box\">\r\n        <view>收到的消息:</view>\r\n        <view>\r\n          <view v-for=\"(item, index) in log\" :key=\"index\">{{ item }}</view>\r\n        </view>\r\n      </view>\r\n    </view>\r\n  <!-- #ifdef APP -->\r\n  </scroll-view>\r\n  <!-- #endif -->\r\n</template>\r\n\r\n\r\n\r\n<style>\r\n  .box {\r\n    padding: 10px;\r\n  }\r\n</style>\n\n```\n>Script\n```uts\n\r\n  export default {\r\n    data() {\r\n      return {\r\n        log: [] as string[],\r\n      }\r\n    },\r\n    methods: {\r\n      fn(res : string) {\r\n        this.log.push(res)\r\n      },\n      fn2(res : string) {\n        this.log.push(res)\n      },\r\n      on() {\r\n        uni.$on('test', this.fn)\r\n      },\n      on2() {\n        uni.$on('test', this.fn2)\n      },\r\n      once() {\r\n        uni.$once('test', this.fn)\r\n      },\r\n      off() {\r\n        uni.$off('test', this.fn)\r\n      },\n      offAll() {\n        uni.$off('test')\n      },\r\n      emit() {\r\n        uni.$emit('test', 'msg:' + Date.now())\r\n      },\r\n      clear() {\r\n        this.log.length = 0\r\n      },\r\n    },\r\n  }\r\n\n```\n:::"
  },
  "addInterceptor": {
    "name": "## uni.addInterceptor(name, interceptor) @addinterceptor",
    "description": "添加拦截器",
    "compatibility": "### addInterceptor  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.97 | 4.11 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| name | string | 是 | - | - | 需要拦截的 API 名称 |\n| interceptor | Interceptor | 是 | - | - | 拦截器 | \n",
    "returnValue": "",
    "tutorial": "\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=addInterceptor&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=addInterceptor&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=addInterceptor&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=addInterceptor&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=addInterceptor&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=addInterceptor)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=addInterceptor&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.base.interceptor.addInterceptor)"
  },
  "removeInterceptor": {
    "name": "## uni.removeInterceptor(name, interceptor?) @removeinterceptor",
    "description": "删除拦截器",
    "compatibility": "### removeInterceptor  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.97 | 4.11 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| name | string | 是 | - | - | 需要删除拦截器的 API 名称 |\n| interceptor | Interceptor \\| null | 否 | - | - | 拦截器 | \n",
    "returnValue": "",
    "tutorial": "\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=removeInterceptor&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=removeInterceptor&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=removeInterceptor&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=removeInterceptor&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=removeInterceptor&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=removeInterceptor)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=removeInterceptor&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.base.interceptor.removeInterceptor)"
  },
  "interceptor": {
    "example": "## 示例 \n> [hello uni-app x](https://gitcode.net/dcloud/hello-uni-app-x/-/blob/dev/pages/API/interceptor/interceptor.uvue) \n ::: preview https://hellouniappx.dcloud.net.cn/web/#/pages/API/interceptor/interceptor\n>Template\n```vue\n<template>\r\n  <view style=\"flex: 1\">\r\n    <button @click=\"addInterceptor\">添加路由拦截器</button>\r\n    <button @click=\"removeInterceptor\">移除路由拦截器</button>\r\n    <text>点击下方按钮{{ msg }}</text>\r\n    <button @click=\"navigateTo\">navigatorTo API跳转到测试页面</button>\r\n    <navigator url=\"./page1\"><button class=\"navigatorButton\">\r\n        navigator组件跳转到测试页面\r\n      </button></navigator>\r\n  </view>\r\n</template>\r\n\r\n\n\n```\n>Script\n```uts\n\r\n  const interceptor = {\r\n    invoke: function (options : NavigateToOptions) {\r\n      console.log('拦截 navigateTo 接口传入参数为:', options)\r\n      const url = './page2'\r\n      uni.showToast({\r\n        title: `重定向到页面:${url}`\r\n      })\r\n      options.url = url\r\n    },\r\n    success: function (res : NavigateToSuccess) {\r\n      console.log('拦截 navigateTo 接口 success 返回参数为:', res)\r\n    },\r\n    fail: function (err : NavigateToFail) {\r\n      console.log('拦截 navigateTo 接口 fail 返回参数为:', err)\r\n    },\r\n    complete: function (res : NavigateToComplete) {\r\n      console.log('拦截 navigateTo 接口 complete 返回参数为:', res)\r\n    }\r\n  } as Interceptor\r\n  export default {\r\n    data() {\r\n      return {\r\n        msg: \"会跳转到测试页面1\"\r\n      }\r\n    },\r\n    beforeUnmount() {\r\n      // 移除 navigateTo 所有拦截器\r\n      uni.removeInterceptor('navigateTo')\r\n    },\r\n    methods: {\r\n      addInterceptor() {\r\n        uni.addInterceptor('navigateTo', interceptor)\r\n        uni.showToast({\r\n          title: '页面跳转已拦截'\r\n        })\r\n        this.msg = \",路由被劫持到测试页面2\"\r\n      },\r\n      removeInterceptor() {\r\n        uni.removeInterceptor('navigateTo', interceptor)\r\n        uni.showToast({\r\n          title: '拦截器已移除'\r\n        })\r\n        this.msg = \"会跳转到测试页面1\"\r\n      },\r\n      navigateTo() {\r\n        uni.navigateTo({\r\n          url: './page1',\r\n          success(res) {\r\n            console.log('res:', res)\r\n          },\r\n          fail(err) {\r\n            console.error('err:', err)\r\n          },\r\n          complete(res) {\r\n            console.log('res:', res)\r\n          }\r\n        })\r\n      }\r\n    }\r\n  }\r\n\n```\n:::"
  },
  "getLaunchOptionsSync": {
    "name": "## uni.getLaunchOptionsSync() @getlaunchoptionssync",
    "description": "获取本次启动时的参数。返回值与App.onLaunch的回调参数一致<br/>",
    "compatibility": "### getLaunchOptionsSync  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.91 | 4.11 |\n",
    "param": "",
    "returnValue": "### 返回值  兼容性 \n\n| 类型 |\n| :- |\n| **OnLaunchOptions** |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| path | string | 是 | - | - | - | \n",
    "tutorial": "\n### 参见\n\n- [参见uni-app x相关文档](https://doc.dcloud.net.cn/uni-app-x/api/get-launch-options-sync.html)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=getLaunchOptionsSync&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=getLaunchOptionsSync&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=getLaunchOptionsSync&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=getLaunchOptionsSync&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=getLaunchOptionsSync&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=getLaunchOptionsSync)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=getLaunchOptionsSync&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.base.getLaunchOptionsSync)",
    "example": "### 示例 \n> [hello uni-app x](https://gitcode.net/dcloud/hello-uni-app-x/-/blob/dev/pages/API/get-launch-options-sync/get-launch-options-sync.uvue) \n ::: preview https://hellouniappx.dcloud.net.cn/web/#/pages/API/get-launch-options-sync/get-launch-options-sync\n>Template\n```vue\n<template>\n  <page-head title=\"getLaunchOptionsSync\"></page-head>\n  <view class=\"uni-padding-wrap\">\n    <button @click=\"getLaunchOptionsSync\">getLaunchOptionsSync</button>\n    <view v-if=\"launchOptionsPath.length > 0\" class=\"uni-common-mt\">\n      <text>应用启动路径:</text>\n      <text style=\"margin-top: 5px\">{{ launchOptionsPath }}</text>\n    </view>\n  </view>\n</template>\n\n\n\n```\n>Script\n```uts\n\nexport default {\n  data() {\n    return {\n      checked: false,\n      homePagePath: 'pages/tabBar/component',\n      launchOptionsPath: '',\n    }\n  },\n  methods: {\n    getLaunchOptionsSync() {\n      const launchOptions = uni.getLaunchOptionsSync()\n      this.launchOptionsPath = launchOptions.path\n\n      if (launchOptions.path == this.homePagePath) {\n        this.checked = true\n      }\n    },\n  },\n}\n\n```\n:::"
  },
  "exit": {
    "name": "## uni.exit(options?) @exit",
    "description": "退出当前应用",
    "compatibility": "### exit  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| x | 3.9.0 | x |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | [ExitOptions](#exitoptions-values) \\| null | 否 | - | - | uni.exit参数定义 |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| success | (res: [ExitSuccess](#exitsuccess-values)) => void \\| null | 否 | - | - | uni.exit成功回调函数定义 |\n@| fail | (res: [IExitError](#iexiterror-values)) => void \\| null | 否 | - | - | uni.exit失败回调函数定义 |\n@| complete | (res: any) => void \\| null | 否 | - | - | uni.exit完成回调函数定义 | \n\n##### ExitSuccess 的属性值 @exitsuccess-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errMsg | string | 是 | - | - | - |\n\n##### IExitError 的属性值 @iexiterror-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errCode | 12001 \\| 12002 | 是 | - | - | 错误码<br/>- 12001: 系统不支持<br/>- 12002: 未知错误 |\n| errSubject | string | 是 | - | - | 统一错误主题(模块)名称 |\n| data | any \\| null | 否 | - | - | 错误信息中包含的数据 |\n| cause | [Error](https://uniapp.dcloud.net.cn/tutorial/err-spec.html#unierror) \\| null | 否 | - | - | 源错误信息,可以包含多个错误,详见SourceError |\n| errMsg | string | 是 | - | - | - |\n",
    "returnValue": "",
    "tutorial": "\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=exit&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=exit&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=exit&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=exit&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=exit&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=exit)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=exit&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.base.exit)",
    "example": "### 示例 \n> [hello uni-app x](https://gitcode.net/dcloud/hello-uni-app-x/-/blob/dev/pages/API/exit/exit.uvue) \n ::: preview https://hellouniappx.dcloud.net.cn/web/#/pages/API/exit/exit\n>Template\n```vue\n<template>\n\t<view>\n\t\t<button @tap=\"exitAppClick\">退出应用</button>\n\t</view>\n</template>\n\n\n\n<style>\n\n</style>\n```\n>Script\n```uts\n\n\texport default {\n\t\tmethods: {\n\t\t\texitAppClick:function(){\n\t\t\t\tuni.exit({\n\t\t\t\t\tsuccess:function(res){\n\t\t\t\t\t\tconsole.log(res)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t}\n\n```\n:::"
  },
  "getProvider": {
    "name": "## uni.getProvider(options) @getprovider",
    "description": "获取服务供应商",
    "compatibility": "### getProvider  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| x | 4.11 | 4.18 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | [GetProviderOptions](#getprovideroptions-values) | 是 | - | - |  |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| service | string | 是 | - | - | 服务类型,可取值“payment”<br/>- payment: 支付 (Alipay、Wxpay) |\n@| success | (result: [GetProviderSuccess](#getprovidersuccess-values)) => void \\| null | 否 | - | - | 接口调用成功的回调 |\n@| fail | (result: [UniError](https://uniapp.dcloud.net.cn/tutorial/err-spec.html#unierror)) => void \\| null | 否 | - | - | 接口调用失败的回调函数 |\n@| complete | (result: any) => void \\| null | 否 | - | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n##### GetProviderSuccess 的属性值 @getprovidersuccess-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| service | string | 是 | - | - | 服务类型<br/>- payment: 支付 |\n| provider | Array\\<string\\> | 是 | - | - | 得到的服务供应商 |\n| providers | Array\\<**UniProvider**\\> | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"x\",\"4.18\",\"4.18\"]]}' /> | 得到的服务供应商服务对象 |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| id | string | 是 | - | - | 服务供应商标识 |\n@| description | string | 是 | - | - | 服务供应商描述 |\n@| isAppExist | boolean | 是 | - | - | 判断服务供应商依赖的App是否安装(仅支持微信支付) |\n| errMsg | string | 是 | - | - | 错误信息 |\n",
    "returnValue": "",
    "tutorial": "\n### 参见\n\n- [参见uni-app x相关文档](https://doc.dcloud.net.cn/uni-app-x/api/get-provider.html)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=getProvider&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=getProvider&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=getProvider&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=getProvider&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=getProvider&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=getProvider)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=getProvider&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.base.getProvider)",
    "example": "### 示例 \n> [hello uni-app x](https://gitcode.net/dcloud/hello-uni-app-x/-/blob/dev/pages/API/get-provider/get-provider.uvue) \n >\n> 该 API 不支持 Web,请运行 hello uni-app x 到 App 平台体验 \n```uvue\n<template>\r\n\t<!-- #ifdef APP -->\r\n\t<scroll-view class=\"page-scroll-view\">\r\n\t<!-- #endif -->\r\n\t\t<view class=\"page\">\r\n\t\t\t<page-head :title=\"title\"></page-head>\r\n\t\t\t<view class=\"service-item\" v-for=\"(item, index) in serviceList\" :key=\"index\">\r\n\t\t\t\t<text class=\"service-name\">{{item.name}}:</text>\r\n\t\t\t\t<view class=\"provider-list\">\r\n\t\t\t\t\t<text class=\"provider-item\" v-for=\"(item2, index2) in item.provider\" :key=\"index2\">\r\n\t\t\t\t\t\t{{item2}}\r\n\t\t\t\t\t\t{{item.providerObj.length > 0 ? ':'+ JSON.stringify(item.providerObj[index2]) : '' }}\n\t\t\t\t\t</text>\r\n\t\t\t\t</view>\r\n\t\t\t</view>\r\n\t\t\t<button class=\"btn-get-provider\" type=\"primary\" @click=\"getProviderIds\">getProviderIds</button>\r\n\t\t\t<button class=\"btn-get-provider\" type=\"primary\" @click=\"getProviderObject\">getProviderObject</button>\r\n\t\t</view>\r\n\t<!-- #ifdef APP -->\r\n\t</scroll-view>\r\n\t<!-- #endif -->\r\n</template>\r\n\r\n<script>\r\n\r\n\ttype ProviderItem = {\r\n\t\tservice : string,\r\n\t\tname : string,\r\n\t\tprovider : string[],\r\n\t\tproviderObj : UniProvider[]\r\n\t}\r\n\r\n\r\n\texport default {\r\n\t\tdata() {\r\n\t\t\treturn {\r\n\t\t\t\ttitle: 'provider',\r\n\t\t\t\tflag: false,\r\n\t\t\t\tserviceList: [\r\n\t\t\t\t\t{ service: \"oauth\", name: \"登陆\", provider: [], providerObj: [] },\r\n\t\t\t\t\t{ service: \"share\", name: \"分享\", provider: [], providerObj: [] },\r\n\t\t\t\t\t{ service: \"payment\", name: \"支付\", provider: [], providerObj: [] },\r\n\t\t\t\t\t{ service: \"push\", name: \"推送\", provider: [], providerObj: [] },\r\n\t\t\t\t\t{ service: \"location\", name: \"定位\", provider: [], providerObj: [] }\r\n\t\t\t\t] as ProviderItem[],\r\n\t\t\t\tproviderObjList: [] as UniProvider[]\r\n\t\t\t}\r\n\t\t},\r\n\t\tmethods: {\r\n\t\t\tgetProviderIds() {\r\n\t\t\t\tthis.serviceList.forEach((item : ProviderItem) => {\r\n\t\t\t\t\tlet providerIds = uni.getProviderIds({\r\n\t\t\t\t\t\tservice: item.service\r\n\t\t\t\t\t})\r\n\t\t\t\t\tthis.updateProvider(item.service, providerIds);\r\n\t\t\t\t})\r\n\t\t\t},\r\n\t\t\tupdateProvider(service : string, provider ?: string[] | null) {\r\n\t\t\t\tconst item : ProviderItem | null = this.serviceList.find((item : ProviderItem) : boolean => {\r\n\t\t\t\t\treturn item.service == service\r\n\t\t\t\t});\r\n\t\t\t\tif (item != null && provider != null) {\r\n\t\t\t\t\titem.provider = provider\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tgetProviderObject() {\r\n\t\t\t\tthis.flag = true\r\n\t\t\t\tthis.getProviderIds()\r\n\t\t\t\tlet objList = []\r\n\t\t\t\tthis.serviceList.forEach((value) => {\r\n\t\t\t\t\tvalue.provider.forEach((provider) => {\r\n\t\t\t\t\t\tlet obj = uni.getProviderObject({\r\n\t\t\t\t\t\t\tservice: value.service,\r\n\t\t\t\t\t\t\tprovider: provider\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t\tif (obj != null) {\r\n\t\t\t\t\t\t\tvalue.providerObj.push(obj)\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t})\r\n\t\t\t\t})\r\n\t\t\t}\r\n\t\t},\r\n\t}\r\n</script>\r\n\r\n<style>\r\n\t.page {\r\n\t\tpadding: 15px;\r\n\t}\r\n\r\n\t.service-item {\r\n\t\tmargin-top: 10px;\r\n\t}\r\n\r\n\t.service-name {\r\n\t\tfont-weight: bold;\r\n\t}\r\n\r\n\t.provider-list {\r\n\t\tmargin-left: 32px;\r\n\t}\r\n\r\n\t.provider-item {\r\n\t\tline-height: 1.5;\r\n\t}\r\n\r\n\t.btn-get-provider {\r\n\t\tmargin-top: 30px;\r\n\t}\r\n</style>\n\n```"
  },
  "getPerformance": {
    "name": "## uni.getPerformance() @getperformance",
    "description": "返回一个Performance对象实例<br/>",
    "compatibility": "### getPerformance  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| x | 3.91 | x |\n",
    "param": "",
    "returnValue": "### 返回值  兼容性 \n\n| 类型 |\n| :- |\n| [Performance](#performance-values) |\n\n#### Performance 的方法 @performance-values \n\n#### createObserver(callback) @createobserver\n创建全局性能事件监听器\n##### createObserver  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| callback | (entries: [PerformanceObserverEntryList](#performanceobserverentrylist-values)) => void | 是 | - | - | - | \n\n###### PerformanceObserverEntryList 的方法 @performanceobserverentrylist-values \n\n###### getEntries() @getentries\n该方法返回当前列表中的所有性能数据\n###### getEntries  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n\n###### 返回值  兼容性 \n\n| 类型 |\n| :- |\n| Array\\<**PerformanceEntry**\\> |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| entryType | string | 是 | - | - | 指标类型 |\n@| name | string | 是 | - | - | 指标名称 |\n@| duration | number | 是 | - | - | 耗时 ms。仅对于表示阶段的指标有效。 |\n@| startTime | number | 是 | - | - | 开始时间,不同指标的具体含义会有差异。 |\n@| path | string \\| null | 否 | - | - | 页面路径。仅 render 和 navigation 类型指标有效。 |\n@| referrerPath | string \\| null | 否 | - | - | 页面跳转来源页面路径。仅 route 指标有效。 |\n@| pageId | number \\| null | 否 | - | - | path 对应页面实例 Id(随机生成,不保证递增)。仅 render/navigation 指标有效。 |\n@| referrerPageId | number \\| null | 否 | - | - | referrerPath对应页面实例 Id(随机生成,不保证递增)。仅 route 指标有效。 |\n@| navigationStart | number \\| null | 否 | - | - | 路由真正响应开始时间。仅 navigation 类型指标有效。 |\n@| navigationType | string \\| null | 否 | - | - | 路由详细类型,与路由方法对应。仅 navigation 类型指标有效。 |\n@| initDataRecvTime | number \\| null | 否 | - | - | 首次渲染参数在渲染层收到的时间。仅 firstRender 指标有效。 |\n@| viewLayerRenderEndTime | number \\| null | 否 | - | - | 渲染层执行渲染结束时间。仅 firstRender 指标有效。 | \n\n###### getEntriesByType(entryType) @getentriesbytype\n获取当前列表中所有类型为 \\[entryType]的性能数据\n###### getEntriesByType  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| entryType | string | 是 | - | - | - | \n\n###### 返回值  兼容性 \n\n| 类型 |\n| :- |\n| Array\\<[PerformanceEntry](#performanceentry-values)\\> |\n \n\n###### getEntriesByName(name, entryType) @getentriesbyname\n获取当前列表中所有名称为 \\[name] 且类型为 [entryType]的性能数据\n###### getEntriesByName  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| name | string | 是 | - | - | - |\n| entryType | string | 是 | - | - | - | \n\n###### 返回值  兼容性 \n\n| 类型 |\n| :- |\n| Array\\<[PerformanceEntry](#performanceentry-values)\\> |\n \n\n##### 返回值  兼容性 \n\n| 类型 |\n| :- |\n| [PerformanceObserver](#performanceobserver-values) |\n\n###### PerformanceObserver 的方法 @performanceobserver-values \n\n###### observe(options) @observe\n开始监听\n###### observe  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | **PerformanceObserverOptions** | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| buffered | boolean | 否 | - | - | - |\n@| entryTypes | Array\\<string\\> | 否 | - | - | - |\n@| type | string | 否 | - | - | - | \n\n\n###### disconnect() @disconnect\n停止监听\n###### disconnect  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n\n \n\n#### getEntries() @getentries\n该方法返回当前缓冲区中的所有性能数据\n##### getEntries  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n\n##### 返回值  兼容性 \n\n| 类型 |\n| :- |\n| Array\\<[PerformanceEntry](#performanceentry-values)\\> |\n \n\n#### getEntriesByType(entryType) @getentriesbytype\n获取当前缓冲区中所有类型为 \\[entryType]的性能数据\n##### getEntriesByType  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| entryType | string | 是 | - | - | - | \n\n##### 返回值  兼容性 \n\n| 类型 |\n| :- |\n| Array\\<[PerformanceEntry](#performanceentry-values)\\> |\n \n\n#### getEntriesByName(name, entryType) @getentriesbyname\n获取当前缓冲区中所有名称为 \\[name] 且类型为 [entryType]的性能数据\n##### getEntriesByName  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| name | string | 是 | - | - | - |\n| entryType | string | 是 | - | - | - | \n\n##### 返回值  兼容性 \n\n| 类型 |\n| :- |\n| Array\\<[PerformanceEntry](#performanceentry-values)\\> |\n \n\n#### setBufferSize(size) @setbuffersize\n设置缓冲区大小,默认缓冲 30 条性能数据\n##### setBufferSize  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| size | number | 是 | - | - | - | \n\n \n",
    "tutorial": "\n### 参见\n\n- [参见uni-app x相关文档](https://doc.dcloud.net.cn/uni-app-x/api/getPerformance)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=getPerformance&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=getPerformance&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=getPerformance&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=getPerformance&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=getPerformance&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=getPerformance)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=getPerformance&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.base.get-performance)"
  },
  "navigateTo": {
    "name": "## uni.navigateTo(options) @navigateto",
    "description": "保留当前页面,跳转到应用内的某个页面<br/>",
    "compatibility": "### navigateTo  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | √ | 4.11 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | [NavigateToOptions](#navigatetooptions-values) | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| url | string ([string.PageURIString](/uts/data-type.md#ide-string)) | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"√\",\"4.11\"]]}' /> | 需要跳转的应用内非 tabBar 的页面的路径 , 路径后可以带参数 |\n@| animationType | string \\| null | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"x\",\"4.18\",\"x\"]]}' /> | 窗口显示的动画类型<br/>- auto: 自动选择动画效果<br/>- none: 无动画效果<br/>- slide-in-right: 从右侧横向滑动效果<br/>- slide-in-left: 左侧横向滑动效果<br/>- slide-in-top: 从上侧竖向滑动效果<br/>- slide-in-bottom: 从下侧竖向滑动效果<br/>- fade-in: 从透明到不透明逐渐显示效果<br/>- zoom-out: 从小到大逐渐放大显示效果<br/>- zoom-fade-out: 从小到大逐渐放大并且从透明到不透明逐渐显示效果<br/>- pop-in: 从右侧平移入栈动画效果<br/>- UnionType => 'auto' \\| 'none' \\| 'slide-in-right' \\| 'slide-in-left' \\| 'slide-in-top' \\| 'slide-in-bottom' \\| 'fade-in' \\| 'zoom-out' \\| 'zoom-fade-out' \\| 'pop-in' |\n@| events | any \\| null | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"x\",\"x\"]]}' /> | 页面间通信接口,用于监听被打开页面发送到当前页面的数据 |\n@| success | (result: AsyncApiSuccessResult) => void \\| null | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"√\",\"4.11\"]]}' /> | 接口调用成功的回调函数 |\n@| fail | (result: [NavigateToFail](#navigatetofail-values)) => void \\| null | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"√\",\"4.11\"]]}' /> | 接口调用失败的回调函数 |\n@| complete | (result: [AsyncApiResult](#asyncapiresult-values)) => void \\| null | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"√\",\"4.11\"]]}' /> | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n##### NavigateToFail 的属性值 @navigatetofail-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errCode | number | 是 | - | - | - |\n| errSubject | string | 是 | - | - | 统一错误主题(模块)名称 |\n| data | any \\| null | 否 | - | - | 错误信息中包含的数据 |\n| cause | [Error](https://uniapp.dcloud.net.cn/tutorial/err-spec.html#unierror) \\| null | 否 | - | - | 源错误信息,可以包含多个错误,详见SourceError |\n| errMsg | string | 是 | - | - | - |\n\n##### AsyncApiResult 的属性值 @asyncapiresult-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errMsg | string | 是 | - | - | - |\n",
    "returnValue": "### 返回值  兼容性 \n\n| 类型 | 必备 |\n| :- | :- |\n| Promise \\| null | 否 |\n \n",
    "tutorial": "\n### 参见\n\n- [参见uni-app相关文档](http://uniapp.dcloud.io/api/router?id=navigateto)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=navigateTo&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=navigateTo&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=navigateTo&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=navigateTo&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=navigateTo&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=navigateTo)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=navigateTo&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.page.navigator.navigateTo)"
  },
  "reLaunch": {
    "name": "## uni.reLaunch(options) @relaunch",
    "description": "关闭所有页面,打开到应用内的某个页面<br/>",
    "compatibility": "### reLaunch  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | √ | 4.11 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | [ReLaunchOptions](#relaunchoptions-values) | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| url | string ([string.PageURIString](/uts/data-type.md#ide-string)) | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"√\",\"4.11\"]]}' /> | 需要跳转的应用内页面路径 , 路径后可以带参数。参数与路径之间使用?分隔,参数键与参数值用=相连,不同参数用&分隔;如 'path?key=value&key2=value2',如果跳转的页面路径是 tabBar 页面则不能带参数 |\n@| success | (result: AsyncApiSuccessResult) => void \\| null | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"√\",\"4.11\"]]}' /> | 接口调用成功的回调函数 |\n@| fail | (result: [ReLaunchFail](#relaunchfail-values)) => void \\| null | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"√\",\"4.11\"]]}' /> | 接口调用失败的回调函数 |\n@| complete | (result: [AsyncApiResult](#asyncapiresult-values)) => void \\| null | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"√\",\"4.11\"]]}' /> | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n##### ReLaunchFail 的属性值 @relaunchfail-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errCode | number | 是 | - | - | - |\n| errSubject | string | 是 | - | - | 统一错误主题(模块)名称 |\n| data | any \\| null | 否 | - | - | 错误信息中包含的数据 |\n| cause | [Error](https://uniapp.dcloud.net.cn/tutorial/err-spec.html#unierror) \\| null | 否 | - | - | 源错误信息,可以包含多个错误,详见SourceError |\n| errMsg | string | 是 | - | - | - |\n\n##### AsyncApiResult 的属性值 @asyncapiresult-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errMsg | string | 是 | - | - | - |\n",
    "returnValue": "### 返回值  兼容性 \n\n| 类型 | 必备 |\n| :- | :- |\n| Promise \\| null | 否 |\n \n",
    "tutorial": "\n### 参见\n\n- [参见uni-app相关文档](http://uniapp.dcloud.io/api/router?id=relaunch)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=reLaunch&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=reLaunch&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=reLaunch&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=reLaunch&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=reLaunch&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=reLaunch)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=reLaunch&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.page.navigator.reLaunch)"
  },
  "navigateBack": {
    "name": "## uni.navigateBack(options?) @navigateback",
    "description": "关闭当前页面,返回上一页面或多级页面<br/>",
    "compatibility": "### navigateBack  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | √ | 4.11 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | [NavigateBackOptions](#navigatebackoptions-values) \\| null | 否 | - | - |  |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| delta | number \\| null | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"√\",\"4.11\"]]}' /> | 返回的页面数,如果 delta 大于现有页面数,则返回到首页 |\n@| animationType | string \\| null | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"x\",\"4.18\",\"x\"]]}' /> | 窗口关闭的动画类型<br/>- auto: 自动选择动画效果<br/>- none: 无动画效果<br/>- slide-out-right: 横向向右侧滑出屏幕动画<br/>- slide-out-left: 横向向左侧滑出屏幕动画<br/>- slide-out-top: 竖向向上侧滑出屏幕动画<br/>- slide-out-bottom: 竖向向下侧滑出屏幕动画<br/>- fade-out: 从不透明到透明逐渐隐藏动画<br/>- zoom-in: 从大逐渐缩小关闭动画<br/>- zoom-fade-in: 从大逐渐缩小并且从不透明到透明逐渐隐藏关闭动画<br/>- pop-out: 从右侧平移出栈动画效果<br/>- UnionType => 'auto' \\| 'none' \\| 'slide-out-right' \\| 'slide-out-left' \\| 'slide-out-top' \\| 'slide-out-bottom' \\| 'fade-out' \\| 'zoom-in' \\| 'zoom-fade-in' \\| 'pop-out' |\n@| success | (result: AsyncApiSuccessResult) => void \\| null | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"√\",\"x\"]]}' /> | 接口调用成功的回调函数 |\n@| fail | (result: [NavigateBackFail](#navigatebackfail-values)) => void \\| null | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"√\",\"4.11\"]]}' /> | 接口调用失败的回调函数 |\n@| complete | (result: [AsyncApiResult](#asyncapiresult-values)) => void \\| null | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"√\",\"4.11\"]]}' /> | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n##### NavigateBackFail 的属性值 @navigatebackfail-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errCode | number | 是 | - | - | - |\n| errSubject | string | 是 | - | - | 统一错误主题(模块)名称 |\n| data | any \\| null | 否 | - | - | 错误信息中包含的数据 |\n| cause | [Error](https://uniapp.dcloud.net.cn/tutorial/err-spec.html#unierror) \\| null | 否 | - | - | 源错误信息,可以包含多个错误,详见SourceError |\n| errMsg | string | 是 | - | - | - |\n\n##### AsyncApiResult 的属性值 @asyncapiresult-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errMsg | string | 是 | - | - | - |\n",
    "returnValue": "### 返回值  兼容性 \n\n| 类型 | 必备 |\n| :- | :- |\n| Promise \\| null | 否 |\n \n",
    "tutorial": "\n### 参见\n\n- [参见uni-app相关文档](http://uniapp.dcloud.io/api/router?id=navigateback)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=navigateBack&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=navigateBack&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=navigateBack&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=navigateBack&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=navigateBack&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=navigateBack)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=navigateBack&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.page.navigator.navigateBack)"
  },
  "redirectTo": {
    "name": "## uni.redirectTo(options) @redirectto",
    "description": "关闭当前页面,跳转到应用内的某个页面<br/>",
    "compatibility": "### redirectTo  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | √ | 4.11 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | [RedirectToOptions](#redirecttooptions-values) | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| url | string ([string.PageURIString](/uts/data-type.md#ide-string)) | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"√\",\"4.11\"]]}' /> | 需要跳转的应用内非 tabBar 的页面的路径 , 路径后可以带参数 |\n@| success | (result: AsyncApiSuccessResult) => void \\| null | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"√\",\"4.11\"]]}' /> | 接口调用成功的回调函数 |\n@| fail | (result: [RedirectToFail](#redirecttofail-values)) => void \\| null | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"√\",\"4.11\"]]}' /> | 接口调用失败的回调函数 |\n@| complete | (result: [AsyncApiResult](#asyncapiresult-values)) => void \\| null | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"√\",\"4.11\"]]}' /> | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n##### RedirectToFail 的属性值 @redirecttofail-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errCode | number | 是 | - | - | - |\n| errSubject | string | 是 | - | - | 统一错误主题(模块)名称 |\n| data | any \\| null | 否 | - | - | 错误信息中包含的数据 |\n| cause | [Error](https://uniapp.dcloud.net.cn/tutorial/err-spec.html#unierror) \\| null | 否 | - | - | 源错误信息,可以包含多个错误,详见SourceError |\n| errMsg | string | 是 | - | - | - |\n\n##### AsyncApiResult 的属性值 @asyncapiresult-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errMsg | string | 是 | - | - | - |\n",
    "returnValue": "### 返回值  兼容性 \n\n| 类型 | 必备 |\n| :- | :- |\n| Promise \\| null | 否 |\n \n",
    "tutorial": "\n### 参见\n\n- [参见uni-app相关文档](http://uniapp.dcloud.io/api/router?id=redirectto)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=redirectTo&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=redirectTo&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=redirectTo&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=redirectTo&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=redirectTo&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=redirectTo)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=redirectTo&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.page.navigator.redirectTo)"
  },
  "switchTab": {
    "name": "## uni.switchTab(options) @switchtab",
    "description": "跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面<br/>",
    "compatibility": "### switchTab  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | √ | 4.11 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | [SwitchTabOptions](#switchtaboptions-values) | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| url | string ([string.PageURIString](/uts/data-type.md#ide-string)) | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"√\",\"4.11\"]]}' /> | 需要跳转的 tabBar 页面的路径,路径后不能带参数 |\n@| success | (result: AsyncApiSuccessResult) => void \\| null | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"√\",\"4.11\"]]}' /> | 接口调用成功的回调函数 |\n@| fail | (result: [SwitchTabFail](#switchtabfail-values)) => void \\| null | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"√\",\"4.11\"]]}' /> | 接口调用失败的回调函数 |\n@| complete | (result: [AsyncApiResult](#asyncapiresult-values)) => void \\| null | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"√\",\"4.11\"]]}' /> | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n##### SwitchTabFail 的属性值 @switchtabfail-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errCode | number | 是 | - | - | - |\n| errSubject | string | 是 | - | - | 统一错误主题(模块)名称 |\n| data | any \\| null | 否 | - | - | 错误信息中包含的数据 |\n| cause | [Error](https://uniapp.dcloud.net.cn/tutorial/err-spec.html#unierror) \\| null | 否 | - | - | 源错误信息,可以包含多个错误,详见SourceError |\n| errMsg | string | 是 | - | - | - |\n\n##### AsyncApiResult 的属性值 @asyncapiresult-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errMsg | string | 是 | - | - | - |\n",
    "returnValue": "### 返回值  兼容性 \n\n| 类型 | 必备 |\n| :- | :- |\n| Promise \\| null | 否 |\n \n",
    "tutorial": "\n### 参见\n\n- [参见uni-app相关文档](http://uniapp.dcloud.io/api/router?id=switchtab)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=switchTab&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=switchTab&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=switchTab&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=switchTab&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=switchTab&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=switchTab)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=switchTab&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.page.navigator.switchTab)"
  },
  "navigator": {
    "example": "## 示例 \n> [hello uni-app x](https://gitcode.net/dcloud/hello-uni-app-x/-/blob/dev/pages/API/navigator/navigator.uvue) \n ::: preview https://hellouniappx.dcloud.net.cn/web/#/pages/API/navigator/navigator\n>Template\n```vue\n<template>\r\n  <!-- #ifdef APP -->\r\n  <scroll-view style=\"flex: 1\">\r\n  <!-- #endif -->\r\n    <view>\r\n      <page-head title=\"navigate\"></page-head>\r\n      <view class=\"uni-padding-wrap uni-common-mt uni-common-mb\">\r\n        <view class=\"direction-row\">\r\n          <text class=\"label\">onLoad触发时间戳:</text>\r\n          <text>{{ onLoadTime }}</text>\r\n        </view>\r\n        <view class=\"direction-row\">\r\n          <text class=\"label\">onShow触发时间戳:</text>\r\n          <text>{{ onShowTime }}</text>\r\n        </view>\r\n        <view class=\"direction-row\">\r\n          <text class=\"label\">onReady触发时间戳:</text>\r\n          <text>{{ onReadyTime }}</text>\r\n        </view>\r\n        <view class=\"direction-row\">\r\n          <text class=\"label\">onHide触发时间戳:</text>\r\n          <text>{{ onHideTime }}</text>\r\n        </view>\r\n        <view class=\"direction-row\">\r\n          <text class=\"label\">onBackPress触发时间戳:</text>\r\n          <text>见控制台</text>\r\n        </view>\r\n        <view class=\"direction-row\">\r\n          <text class=\"label\">onUnload触发时间戳:</text>\r\n          <text>见控制台</text>\r\n        </view>\r\n        <view class=\"uni-btn-v\">\r\n          <button @tap=\"navigateTo\" class=\"uni-btn\">\r\n            跳转新页面,并传递数据\r\n          </button>\n          <button @tap=\"navigateBack\" class=\"uni-btn\">返回上一页</button>\r\n          <button @tap=\"redirectTo\" class=\"uni-btn\">在当前页面打开</button>\r\n          <button @tap=\"switchTab\" class=\"uni-btn\">切换到模板选项卡</button>\r\n          <button @tap=\"reLaunch\" class=\"uni-btn\">\r\n            关闭所有页面,打开首页\r\n          </button>\r\n          <button @tap=\"navigateToErrorPage\" class=\"uni-btn\">\r\n            打开不存在的页面\r\n          </button>\n          <button v-for=\"(item, _) in animationTypeList\" @tap=\"navigateToAnimationType(item)\" class=\"uni-btn\">navigateTo动画({{item}})</button>\r\n        </view>\r\n      </view>\r\n    </view>\r\n  <!-- #ifdef APP -->\r\n  </scroll-view>\r\n  <!-- #endif -->\r\n</template>\r\n\r\n\r\n\r\n<style>\r\n  .direction-row {\r\n    flex-direction: row;\r\n  }\r\n\r\n  .label {\r\n    width: 190px;\r\n  }\r\n</style>\n\n```\n>Script\n```uts\n\r\n  import { state, setLifeCycleNum } from '@/store/index.uts'\r\n\r\n  export default {\r\n    data() {\r\n      return {\r\n        onLoadTime: 0,\r\n        onShowTime: 0,\r\n        onReadyTime: 0,\r\n        onHideTime: 0,\n        animationTypeList: [\n          // #ifdef APP-ANDROID\n          'slide-in-right',\n          'slide-in-left',\n          'slide-in-top',\n          'slide-in-bottom',\n          'pop-in',\n          'fade-in',\n          'zoom-out',\n          'zoom-fade-out',\n          'none'\n          // #endif\n        ]\r\n      }\r\n    },\r\n    onLoad() {\r\n      this.onLoadTime = Date.now()\r\n      console.log('onLoad', this.onLoadTime)\r\n    },\r\n    onShow() {\r\n      this.onShowTime = Date.now()\r\n      console.log('onShow', this.onShowTime)\r\n    },\r\n    onReady() {\r\n      this.onReadyTime = Date.now()\r\n      console.log('onReady', this.onReadyTime)\r\n    },\r\n    onHide() {\r\n      this.onHideTime = Date.now()\r\n      console.log('onHide', this.onHideTime)\r\n    },\r\n    onBackPress(options : OnBackPressOptions) : boolean | null {\r\n      console.log('onBackPress', Date.now())\r\n      console.log('onBackPress from', options.from)\r\n      return null\r\n    },\r\n    onUnload() {\r\n      console.log('onUnload', Date.now())\r\n    },\r\n    methods: {\r\n      reLaunch() {\r\n        uni.reLaunch({\r\n          url: '/pages/tabBar/component',\r\n          success(result) {\r\n            console.log('reLaunch success', result.errMsg)\r\n            // 自动化测试\r\n            setLifeCycleNum(state.lifeCycleNum + 1)\r\n          },\r\n          fail(error) {\r\n            console.log('reLaunch fail', error.errMsg)\r\n            // 自动化测试\r\n            setLifeCycleNum(state.lifeCycleNum - 1)\r\n          },\r\n          complete(result) {\r\n            console.log('reLaunch complete', result.errMsg)\r\n            // 自动化测试\r\n            setLifeCycleNum(state.lifeCycleNum + 1)\r\n          },\r\n        })\r\n      },\r\n      navigateTo() {\r\n        uni.navigateTo({\r\n          url: '/pages/API/navigator/new-page/new-page-1?data=Hello',\n          success(result) {\r\n            console.log('navigateTo success', result.errMsg)\r\n            // 自动化测试\r\n            setLifeCycleNum(state.lifeCycleNum + 1)\r\n          },\r\n          fail(error) {\r\n            console.log('navigateTo fail', error.errMsg)\r\n            // 自动化测试\r\n            setLifeCycleNum(state.lifeCycleNum - 1)\r\n          },\r\n          complete(result) {\r\n            console.log('navigateTo complete', result.errMsg)\r\n            // 自动化测试\r\n            setLifeCycleNum(state.lifeCycleNum + 1)\r\n          },\r\n        })\r\n      },\n      navigateToAnimationType(animationType: string) {\r\n        uni.navigateTo({\r\n          url: '/pages/API/navigator/new-page/new-page-1?data=Hello',\n          animationType: animationType,\r\n          success(result) {\r\n            console.log('navigateTo success', result.errMsg)\r\n            // 自动化测试\r\n            setLifeCycleNum(state.lifeCycleNum + 1)\r\n          },\r\n          fail(error) {\r\n            console.log('navigateTo fail', error.errMsg)\r\n            // 自动化测试\r\n            setLifeCycleNum(state.lifeCycleNum - 1)\r\n          },\r\n          complete(result) {\r\n            console.log('navigateTo complete', result.errMsg)\r\n            // 自动化测试\r\n            setLifeCycleNum(state.lifeCycleNum + 1)\r\n          },\r\n        })\r\n      },\r\n      navigateToErrorPage() {\r\n        uni.navigateTo({\r\n          url: '/pages/error-page/error-page',\r\n          success(result) {\r\n            console.log('navigateTo success', result.errMsg)\r\n            // 自动化测试\r\n            setLifeCycleNum(state.lifeCycleNum - 1)\r\n          },\r\n          fail(error) {\r\n            console.log('navigateTo fail', error.errMsg)\r\n            uni.showToast({\r\n              title: error.errMsg,\r\n              icon: 'none',\r\n            })\r\n            // 自动化测试\r\n            setLifeCycleNum(state.lifeCycleNum + 1)\r\n          },\r\n          complete(result) {\r\n            console.log('navigateTo complete', result.errMsg)\r\n            // 自动化测试\r\n            setLifeCycleNum(state.lifeCycleNum + 1)\r\n          },\r\n        })\r\n      },\r\n      navigateToDebounce() {\r\n        uni.navigateTo({\r\n          url: '/pages/API/navigator/new-page/new-page-1?data=debounce',\r\n          success(result) {\r\n            console.log('navigateTo success', result.errMsg)\r\n            // 自动化测试\r\n            setLifeCycleNum(state.lifeCycleNum + 1)\r\n          },\r\n          fail(error) {\r\n            console.log('navigateTo fail', error.errMsg)\r\n            // 自动化测试\r\n            setLifeCycleNum(state.lifeCycleNum - 1)\r\n          },\r\n          complete(result) {\r\n            console.log('navigateTo complete', result.errMsg)\r\n            // 自动化测试\r\n            setLifeCycleNum(state.lifeCycleNum + 1)\r\n          },\r\n        })\r\n        uni.navigateTo({\r\n          url: '/pages/API/navigator/new-page/new-page-1?data=debounce',\r\n          success(result) {\r\n            console.log('navigateTo success', result.errMsg)\r\n            // 自动化测试\r\n            setLifeCycleNum(state.lifeCycleNum - 1)\r\n          },\r\n          fail(error) {\r\n            console.log('navigateTo fail', error.errMsg)\r\n            // 自动化测试\r\n            setLifeCycleNum(state.lifeCycleNum + 1)\r\n          },\r\n          complete(result) {\r\n            console.log('navigateTo complete', result.errMsg)\r\n            // 自动化测试\r\n            setLifeCycleNum(state.lifeCycleNum + 1)\r\n          },\r\n        })\r\n      },\r\n      // 自动化测试\r\n      navigateToRelativePath1() {\r\n        uni.navigateTo({\r\n          url: 'new-page/new-page-1?data=new-page/new-page-1',\r\n          success() {\r\n            setLifeCycleNum(state.lifeCycleNum + 1)\r\n          },\r\n          fail() {\r\n            setLifeCycleNum(state.lifeCycleNum - 1)\r\n          },\r\n          complete() {\r\n            setLifeCycleNum(state.lifeCycleNum + 1)\r\n          },\r\n        })\r\n      },\r\n      // 自动化测试\r\n      navigateToRelativePath2() {\r\n        uni.navigateTo({\r\n          url: './new-page/new-page-1?data=./new-page/new-page-1',\r\n          success() {\r\n            setLifeCycleNum(state.lifeCycleNum + 1)\r\n          },\r\n          fail() {\r\n            setLifeCycleNum(state.lifeCycleNum - 1)\r\n          },\r\n          complete() {\r\n            setLifeCycleNum(state.lifeCycleNum + 1)\r\n          },\r\n        })\r\n      },\r\n      // 自动化测试\r\n      navigateToRelativePath3() {\r\n        uni.navigateTo({\r\n          url: '../navigator/new-page/new-page-1?data=../navigator/new-page/new-page-1',\r\n          success() {\r\n            setLifeCycleNum(state.lifeCycleNum + 1)\r\n          },\r\n          fail() {\r\n            setLifeCycleNum(state.lifeCycleNum - 1)\r\n          },\r\n          complete() {\r\n            setLifeCycleNum(state.lifeCycleNum + 1)\r\n          },\r\n        })\r\n      },\r\n      navigateBack() {\r\n        uni.navigateBack({\r\n          success(result) {\r\n            console.log('navigateBack success', result.errMsg)\r\n            // 自动化测试\r\n            setLifeCycleNum(state.lifeCycleNum + 1)\r\n          },\r\n          fail(error) {\r\n            console.log('navigateBack fail', error.errMsg)\r\n            // 自动化测试\r\n            setLifeCycleNum(state.lifeCycleNum - 1)\r\n          },\r\n          complete(result) {\r\n            console.log('navigateBack complete', result.errMsg)\r\n            // 自动化测试\r\n            setLifeCycleNum(state.lifeCycleNum + 1)\r\n          },\r\n        })\r\n      },\r\n      navigateBackWithDelta1() {\r\n        uni.navigateTo({\r\n          url: '/pages/API/navigator/new-page/new-page-1',\r\n          success() {\r\n            uni.navigateBack({\r\n              delta: 1,\r\n              success(result) {\r\n                console.log('navigateBack success', result.errMsg)\r\n                // 自动化测试\r\n                setLifeCycleNum(state.lifeCycleNum + 1)\r\n              },\r\n              fail(error) {\r\n                console.log('navigateBack fail', error.errMsg)\r\n                // 自动化测试\r\n                setLifeCycleNum(state.lifeCycleNum - 1)\r\n              },\r\n              complete(result) {\r\n                console.log('navigateBack complete', result.errMsg)\r\n                // 自动化测试\r\n                setLifeCycleNum(state.lifeCycleNum + 1)\r\n              },\r\n            })\r\n          },\r\n        })\r\n      },\r\n      navigateBackWithDelta100() {\r\n        uni.navigateTo({\r\n          url: '/pages/API/navigator/new-page/new-page-1',\r\n          success() {\r\n            uni.navigateBack({\r\n              delta: 100,\r\n              success(result) {\r\n                console.log('navigateBack success', result.errMsg)\r\n                // 自动化测试\r\n                setLifeCycleNum(state.lifeCycleNum + 1)\r\n              },\r\n              fail(error) {\r\n                console.log('navigateBack fail', error.errMsg)\r\n                // 自动化测试\r\n                setLifeCycleNum(state.lifeCycleNum - 1)\r\n              },\r\n              complete(result) {\r\n                console.log('navigateBack complete', result.errMsg)\r\n                // 自动化测试\r\n                setLifeCycleNum(state.lifeCycleNum + 1)\r\n              },\r\n            })\r\n          },\r\n        })\r\n      },\r\n      redirectTo() {\r\n        uni.redirectTo({\r\n          url: '/pages/API/navigator/new-page/new-page-1?data=Hello',\r\n          success(result) {\r\n            console.log('redirectTo success', result.errMsg)\r\n            // 自动化测试\r\n            setLifeCycleNum(state.lifeCycleNum + 1)\r\n          },\r\n          fail(error) {\r\n            console.log('redirectTo fail', error.errMsg)\r\n            // 自动化测试\r\n            setLifeCycleNum(state.lifeCycleNum - 1)\r\n          },\r\n          complete(result) {\r\n            console.log('redirectTo complete', result.errMsg)\r\n            // 自动化测试\r\n            setLifeCycleNum(state.lifeCycleNum + 1)\r\n          },\r\n        })\r\n      },\r\n      switchTab() {\r\n        uni.switchTab({\r\n          url: '/pages/tabBar/template',\r\n          success(result) {\r\n            console.log('switchTab success', result.errMsg)\r\n            // 自动化测试\r\n            setLifeCycleNum(state.lifeCycleNum + 1)\r\n          },\r\n          fail(error) {\r\n            console.log('switchTab fail', error.errMsg)\r\n            // 自动化测试\r\n            setLifeCycleNum(state.lifeCycleNum - 1)\r\n          },\r\n          complete(result) {\r\n            console.log('switchTab complete', result.errMsg)\r\n            // 自动化测试\r\n            setLifeCycleNum(state.lifeCycleNum + 1)\r\n          },\r\n        })\r\n      },\r\n      // 自动化测试\r\n      getLifeCycleNum() : number {\r\n        return state.lifeCycleNum\r\n      },\r\n      // 自动化测试\r\n      setLifeCycleNum(num : number) {\r\n        setLifeCycleNum(num)\r\n      },\r\n    },\r\n  }\r\n\n```\n:::"
  },
  "setNavigationBarColor": {
    "name": "## uni.setNavigationBarColor(options) @setnavigationbarcolor",
    "description": "设置导航条、状态栏颜色<br/>",
    "compatibility": "### setNavigationBarColor  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | √ | 4.11 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | [SetNavigationBarColorOptions](#setnavigationbarcoloroptions-values) | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| frontColor | \"#ffffff\" \\| \"#000000\" | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"√\",\"4.11\"]]}' /> | 前景颜色值,包括按钮、标题、状态栏的颜色,仅支持 #ffffff 和 #000000 |\n@| backgroundColor | [string.ColorString](/uts/data-type.md#ide-string) | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"√\",\"4.11\"]]}' /> | 背景颜色值,有效值为十六进制颜色 |\n@| success | (result: AsyncApiSuccessResult) => void | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"√\",\"4.11\"]]}' /> | 接口调用成功的回调函数 |\n@| fail | (error: [SetNavigationBarColorFail](#setnavigationbarcolorfail-values)) => void | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"√\",\"4.11\"]]}' /> | 接口调用失败的回调函数 |\n@| complete | (res: [AsyncApiResult](#asyncapiresult-values)) => void | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"√\",\"4.11\"]]}' /> | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n##### SetNavigationBarColorFail 的属性值 @setnavigationbarcolorfail-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errCode | number | 是 | - | - | - |\n| errSubject | string | 是 | - | - | 统一错误主题(模块)名称 |\n| data | any \\| null | 否 | - | - | 错误信息中包含的数据 |\n| cause | [Error](https://uniapp.dcloud.net.cn/tutorial/err-spec.html#unierror) \\| null | 否 | - | - | 源错误信息,可以包含多个错误,详见SourceError |\n| errMsg | string | 是 | - | - | - |\n\n##### AsyncApiResult 的属性值 @asyncapiresult-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errMsg | string | 是 | - | - | - |\n",
    "returnValue": "### 返回值  兼容性 \n\n| 类型 | 必备 |\n| :- | :- |\n| Promise \\| null | 否 |\n \n",
    "tutorial": "\n### 参见\n\n- [参见uni-app x相关文档](https://doc.dcloud.net.cn/uni-app-x/api/set-navigation-bar-color.html)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=setNavigationBarColor&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=setNavigationBarColor&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=setNavigationBarColor&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=setNavigationBarColor&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=setNavigationBarColor&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=setNavigationBarColor)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=setNavigationBarColor&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.page.setNavigationBarColor)",
    "example": "### 示例 \n> [hello uni-app x](https://gitcode.net/dcloud/hello-uni-app-x/-/blob/dev/pages/API/set-navigation-bar-color/set-navigation-bar-color.uvue) \n ::: preview https://hellouniappx.dcloud.net.cn/web/#/pages/API/set-navigation-bar-color/set-navigation-bar-color\n>Template\n```vue\n<template>\r\n  <page-head title=\"setNavigationBarColor\"></page-head>\r\n  <view class=\"uni-padding-wrap uni-common-mt\">\r\n    <button @tap=\"setNavigationBarColor1\" class=\"uni-btn\">\r\n      设置导航条背景绿色,标题白色\r\n    </button>\r\n    <button @tap=\"setNavigationBarColor2\" class=\"uni-btn\">\r\n      设置导航条背景红色,标题黑色\r\n    </button>\r\n    <button @tap=\"goNavbarLite\" class=\"uni-btn\">\r\n      跳转自定义导航栏页面\r\n    </button>\r\n  </view>\r\n</template>\r\n\r\n\n\n```\n>Script\n```uts\n\r\n  import { state, setLifeCycleNum } from '@/store/index.uts'\r\n\r\n  export default {\r\n    methods: {\r\n      setNavigationBarColor1() {\r\n        uni.setNavigationBarColor({\r\n          frontColor: '#ffffff',\r\n          backgroundColor: '#00ff00',\r\n          success: () => {\r\n            console.log('setNavigationBarColor success')\r\n            this.setLifeCycleNum(state.lifeCycleNum + 1)\r\n          },\r\n          fail: () => {\r\n            console.log('setNavigationBarColor fail')\r\n            this.setLifeCycleNum(state.lifeCycleNum - 1)\r\n          },\r\n          complete: () => {\r\n            console.log('setNavigationBarColor complete')\r\n            this.setLifeCycleNum(state.lifeCycleNum + 1)\r\n          }\r\n        })\r\n      },\r\n      setNavigationBarColor2() {\r\n        uni.setNavigationBarColor({\r\n          frontColor: '#000000',\r\n          backgroundColor: '#ff0000',\r\n          success: () => {\r\n            console.log('setNavigationBarColor success')\r\n            this.setLifeCycleNum(state.lifeCycleNum + 1)\r\n          },\r\n          fail: () => {\r\n            console.log('setNavigationBarColor fail')\r\n            this.setLifeCycleNum(state.lifeCycleNum - 1)\r\n          },\r\n          complete: () => {\r\n            console.log('setNavigationBarColor complete')\r\n            this.setLifeCycleNum(state.lifeCycleNum + 1)\r\n          }\r\n        })\r\n      },\r\n      // 自动化测试\r\n      getLifeCycleNum() : number {\r\n        return state.lifeCycleNum\r\n      },\r\n      // 自动化测试\r\n      setLifeCycleNum(num : number) {\r\n        setLifeCycleNum(num)\r\n      },\r\n      goNavbarLite() {\r\n        uni.navigateTo({\r\n          url: '/pages/template/navbar-lite/navbar-lite'\r\n        })\r\n      }\r\n    },\r\n  }\r\n\n```\n:::"
  },
  "setNavigationBarTitle": {
    "name": "## uni.setNavigationBarTitle(options) @setnavigationbartitle",
    "description": "动态设置当前页面的标题<br/>",
    "compatibility": "### setNavigationBarTitle  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.97 | 4.11 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | [SetNavigationBarTitleOptions](#setnavigationbartitleoptions-values) | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| title | string | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.97\",\"4.11\"]]}' /> | 页面标题 |\n@| success | (result: AsyncApiSuccessResult) => void | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.97\",\"4.11\"]]}' /> | 接口调用成功的回调函数 |\n@| fail | (error: [SetNavigationBarTitleFail](#setnavigationbartitlefail-values)) => void | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.97\",\"4.11\"]]}' /> | 接口调用失败的回调函数 |\n@| complete | (res: [AsyncApiResult](#asyncapiresult-values)) => void | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.97\",\"4.11\"]]}' /> | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n##### SetNavigationBarTitleFail 的属性值 @setnavigationbartitlefail-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errCode | number | 是 | - | - | - |\n| errSubject | string | 是 | - | - | 统一错误主题(模块)名称 |\n| data | any \\| null | 否 | - | - | 错误信息中包含的数据 |\n| cause | [Error](https://uniapp.dcloud.net.cn/tutorial/err-spec.html#unierror) \\| null | 否 | - | - | 源错误信息,可以包含多个错误,详见SourceError |\n| errMsg | string | 是 | - | - | - |\n\n##### AsyncApiResult 的属性值 @asyncapiresult-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errMsg | string | 是 | - | - | - |\n",
    "returnValue": "### 返回值  兼容性 \n\n| 类型 | 必备 |\n| :- | :- |\n| Promise \\| null | 否 |\n \n",
    "tutorial": "\n### 参见\n\n- [参见uni-app x相关文档](https://doc.dcloud.net.cn/uni-app-x/api/set-navigation-bar-title.html)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=setNavigationBarTitle&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=setNavigationBarTitle&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=setNavigationBarTitle&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=setNavigationBarTitle&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=setNavigationBarTitle&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=setNavigationBarTitle)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=setNavigationBarTitle&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.page.setNavigationBarTitle)",
    "example": "### 示例 \n> [hello uni-app x](https://gitcode.net/dcloud/hello-uni-app-x/-/blob/dev/pages/API/set-navigation-bar-title/set-navigation-bar-title.uvue) \n ::: preview https://hellouniappx.dcloud.net.cn/web/#/pages/API/set-navigation-bar-title/set-navigation-bar-title\n>Template\n```vue\n<template>\n  <page-head title=\"setNavigationBarTitle\"></page-head>\n  <view class=\"uni-padding-wrap uni-common-mt\">\n    <button @tap=\"setNavigationBarNewTitle\" class=\"uni-btn\">\n      设置当前页面标题为: {{ newTitle }}\n    </button>\n    <button @tap=\"setNavigationBarLongTitle\" class=\"uni-btn\">\n      设置超长标题\n    </button>\n  </view>\n</template>\n\n\n\n```\n>Script\n```uts\n\n  import { state, setLifeCycleNum } from '@/store/index.uts'\n\n  export default {\n    data() {\n      return {\n        newTitle: 'new title',\n        longTitle: 'long title long title long title long title long title long title long title long title long title long title'\n      }\n    },\n    methods: {\n      setNavigationBarNewTitle() {\n        uni.setNavigationBarTitle({\n          title: this.newTitle,\n          success: () => {\n            console.log('setNavigationBarTitle success')\n            this.setLifeCycleNum(state.lifeCycleNum + 1)\n          },\n          fail: () => {\n            console.log('setNavigationBarTitle fail')\n            this.setLifeCycleNum(state.lifeCycleNum - 1)\n          },\n          complete: () => {\n            console.log('setNavigationBarTitle complete')\n            this.setLifeCycleNum(state.lifeCycleNum + 1)\n          }\n        })\n      },\n      setNavigationBarLongTitle() {\n        uni.setNavigationBarTitle({\n          title: this.longTitle,\n          success() {\n            console.log('setNavigationBarTitle success')\n          },\n          fail() {\n            console.log('setNavigationBarTitle fail')\n          },\n          complete() {\n            console.log('setNavigationBarTitle complete')\n          }\n        })\n      },\n      // 自动化测试\n      getLifeCycleNum() : number {\n        return state.lifeCycleNum\n      },\n      // 自动化测试\n      setLifeCycleNum(num : number) {\n        setLifeCycleNum(num)\n      }\n    },\n  }\n\n```\n:::"
  },
  "showTabBar": {
    "name": "## uni.showTabBar(options?) @showtabbar",
    "description": "显示 tabBar<br/>",
    "compatibility": "### showTabBar  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.91 | 4.11 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | [ShowTabBarOptions](#showtabbaroptions-values) \\| null | 否 | - | - |  |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| animation | boolean | 否 | - | - | 是否需要动画效果 |\n@| success | (result: AsyncApiSuccessResult) => void | 否 | - | - | 接口调用成功的回调函数 |\n@| fail | (result: [SetTabBarFail](#settabbarfail-values)) => void | 否 | - | - | 接口调用失败的回调函数 |\n@| complete | (result: [AsyncApiResult](#asyncapiresult-values)) => void | 否 | - | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n##### SetTabBarFail 的属性值 @settabbarfail-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errCode | 100 \\| 200 | 是 | - | - | 错误码<br/>- 100: TabBar 不存在<br/>- 200: 参数错误 |\n| errSubject | string | 是 | - | - | 统一错误主题(模块)名称 |\n| data | any \\| null | 否 | - | - | 错误信息中包含的数据 |\n| cause | [Error](https://uniapp.dcloud.net.cn/tutorial/err-spec.html#unierror) \\| null | 否 | - | - | 源错误信息,可以包含多个错误,详见SourceError |\n| errMsg | string | 是 | - | - | - |\n\n##### AsyncApiResult 的属性值 @asyncapiresult-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errMsg | string | 是 | - | - | - |\n",
    "returnValue": "### 返回值  兼容性 \n\n| 类型 | 必备 |\n| :- | :- |\n| Promise \\| null | 否 |\n \n",
    "tutorial": "\n### 参见\n\n- [参见uni-app x相关文档](https://doc.dcloud.net.cn/uni-app-x/api/set-tabbar.html#showtabbar)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=showTabBar&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=showTabBar&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=showTabBar&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=showTabBar&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=showTabBar&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=showTabBar)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=showTabBar&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.page.setTabBar.showTabBar)"
  },
  "hideTabBar": {
    "name": "## uni.hideTabBar(options?) @hidetabbar",
    "description": "隐藏 tabBar<br/>",
    "compatibility": "### hideTabBar  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.91 | 4.11 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | [HideTabBarOptions](#hidetabbaroptions-values) \\| null | 否 | - | - |  |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| animation | boolean | 否 | - | - | 是否需要动画效果 |\n@| success | (result: AsyncApiSuccessResult) => void | 否 | - | - | 接口调用成功的回调函数 |\n@| fail | (result: [SetTabBarFail](#settabbarfail-values)) => void | 否 | - | - | 接口调用失败的回调函数 |\n@| complete | (result: [AsyncApiResult](#asyncapiresult-values)) => void | 否 | - | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n##### SetTabBarFail 的属性值 @settabbarfail-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errCode | 100 \\| 200 | 是 | - | - | 错误码<br/>- 100: TabBar 不存在<br/>- 200: 参数错误 |\n| errSubject | string | 是 | - | - | 统一错误主题(模块)名称 |\n| data | any \\| null | 否 | - | - | 错误信息中包含的数据 |\n| cause | [Error](https://uniapp.dcloud.net.cn/tutorial/err-spec.html#unierror) \\| null | 否 | - | - | 源错误信息,可以包含多个错误,详见SourceError |\n| errMsg | string | 是 | - | - | - |\n\n##### AsyncApiResult 的属性值 @asyncapiresult-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errMsg | string | 是 | - | - | - |\n",
    "returnValue": "### 返回值  兼容性 \n\n| 类型 | 必备 |\n| :- | :- |\n| Promise \\| null | 否 |\n \n",
    "tutorial": "\n### 参见\n\n- [参见uni-app x相关文档](https://doc.dcloud.net.cn/uni-app-x/api/set-tabbar.html#hidetabbar)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=hideTabBar&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=hideTabBar&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=hideTabBar&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=hideTabBar&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=hideTabBar&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=hideTabBar)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=hideTabBar&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.page.setTabBar.hideTabBar)"
  },
  "showTabBarRedDot": {
    "name": "## uni.showTabBarRedDot(options) @showtabbarreddot",
    "description": "显示 tabBar 某一项的右上角的红点<br/>",
    "compatibility": "### showTabBarRedDot  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.91 | 4.11 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | [ShowTabBarRedDotOptions](#showtabbarreddotoptions-values) | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| index | number | 是 | - | - | tabBar的哪一项,从左边算起,索引从0开始 |\n@| success | (result: AsyncApiSuccessResult) => void | 否 | - | - | 接口调用成功的回调函数 |\n@| fail | (result: [SetTabBarFail](#settabbarfail-values)) => void | 否 | - | - | 接口调用失败的回调函数 |\n@| complete | (result: [AsyncApiResult](#asyncapiresult-values)) => void | 否 | - | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n##### SetTabBarFail 的属性值 @settabbarfail-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errCode | 100 \\| 200 | 是 | - | - | 错误码<br/>- 100: TabBar 不存在<br/>- 200: 参数错误 |\n| errSubject | string | 是 | - | - | 统一错误主题(模块)名称 |\n| data | any \\| null | 否 | - | - | 错误信息中包含的数据 |\n| cause | [Error](https://uniapp.dcloud.net.cn/tutorial/err-spec.html#unierror) \\| null | 否 | - | - | 源错误信息,可以包含多个错误,详见SourceError |\n| errMsg | string | 是 | - | - | - |\n\n##### AsyncApiResult 的属性值 @asyncapiresult-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errMsg | string | 是 | - | - | - |\n",
    "returnValue": "### 返回值  兼容性 \n\n| 类型 | 必备 |\n| :- | :- |\n| Promise \\| null | 否 |\n \n",
    "tutorial": "\n### 参见\n\n- [参见uni-app x相关文档](https://doc.dcloud.net.cn/uni-app-x/api/set-tabbar.html#showtabbarreddot)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=showTabBarRedDot&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=showTabBarRedDot&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=showTabBarRedDot&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=showTabBarRedDot&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=showTabBarRedDot&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=showTabBarRedDot)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=showTabBarRedDot&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.page.setTabBar.showTabBarRedDot)"
  },
  "hideTabBarRedDot": {
    "name": "## uni.hideTabBarRedDot(options) @hidetabbarreddot",
    "description": "隐藏 tabBar 某一项的右上角的红点<br/>",
    "compatibility": "### hideTabBarRedDot  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.91 | 4.11 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | [HideTabBarRedDotOptions](#hidetabbarreddotoptions-values) | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| index | number | 是 | - | - | tabBar的哪一项,从左边算起,索引从0开始 |\n@| success | (result: AsyncApiSuccessResult) => void | 否 | - | - | 接口调用成功的回调函数 |\n@| fail | (result: [SetTabBarFail](#settabbarfail-values)) => void | 否 | - | - | 接口调用失败的回调函数 |\n@| complete | (result: [AsyncApiResult](#asyncapiresult-values)) => void | 否 | - | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n##### SetTabBarFail 的属性值 @settabbarfail-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errCode | 100 \\| 200 | 是 | - | - | 错误码<br/>- 100: TabBar 不存在<br/>- 200: 参数错误 |\n| errSubject | string | 是 | - | - | 统一错误主题(模块)名称 |\n| data | any \\| null | 否 | - | - | 错误信息中包含的数据 |\n| cause | [Error](https://uniapp.dcloud.net.cn/tutorial/err-spec.html#unierror) \\| null | 否 | - | - | 源错误信息,可以包含多个错误,详见SourceError |\n| errMsg | string | 是 | - | - | - |\n\n##### AsyncApiResult 的属性值 @asyncapiresult-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errMsg | string | 是 | - | - | - |\n",
    "returnValue": "### 返回值  兼容性 \n\n| 类型 | 必备 |\n| :- | :- |\n| Promise \\| null | 否 |\n \n",
    "tutorial": "\n### 参见\n\n- [参见uni-app x相关文档](https://doc.dcloud.net.cn/uni-app-x/api/set-tabbar.html#hidetabbarreddot)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=hideTabBarRedDot&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=hideTabBarRedDot&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=hideTabBarRedDot&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=hideTabBarRedDot&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=hideTabBarRedDot&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=hideTabBarRedDot)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=hideTabBarRedDot&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.page.setTabBar.hideTabBarRedDot)"
  },
  "setTabBarBadge": {
    "name": "## uni.setTabBarBadge(options) @settabbarbadge",
    "description": "为 tabBar 某一项的右上角添加文本<br/>",
    "compatibility": "### setTabBarBadge  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.91 | 4.11 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | [SetTabBarBadgeOptions](#settabbarbadgeoptions-values) | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| index | number | 是 | - | - | tabBar的哪一项,从左边算起,索引从0开始 |\n@| text | string | 是 | - | - | 显示的文本,不超过 3 个半角字符 |\n@| success | (result: AsyncApiSuccessResult) => void | 否 | - | - | 接口调用成功的回调函数 |\n@| fail | (result: [SetTabBarFail](#settabbarfail-values)) => void | 否 | - | - | 接口调用失败的回调函数 |\n@| complete | (result: [AsyncApiResult](#asyncapiresult-values)) => void | 否 | - | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n##### SetTabBarFail 的属性值 @settabbarfail-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errCode | 100 \\| 200 | 是 | - | - | 错误码<br/>- 100: TabBar 不存在<br/>- 200: 参数错误 |\n| errSubject | string | 是 | - | - | 统一错误主题(模块)名称 |\n| data | any \\| null | 否 | - | - | 错误信息中包含的数据 |\n| cause | [Error](https://uniapp.dcloud.net.cn/tutorial/err-spec.html#unierror) \\| null | 否 | - | - | 源错误信息,可以包含多个错误,详见SourceError |\n| errMsg | string | 是 | - | - | - |\n\n##### AsyncApiResult 的属性值 @asyncapiresult-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errMsg | string | 是 | - | - | - |\n",
    "returnValue": "### 返回值  兼容性 \n\n| 类型 | 必备 |\n| :- | :- |\n| Promise \\| null | 否 |\n \n",
    "tutorial": "\n### 参见\n\n- [参见uni-app x相关文档](https://doc.dcloud.net.cn/uni-app-x/api/set-tabbar.html#settabbarbadge)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=setTabBarBadge&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=setTabBarBadge&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=setTabBarBadge&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=setTabBarBadge&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=setTabBarBadge&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=setTabBarBadge)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=setTabBarBadge&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.page.setTabBar.setTabBarBadge)"
  },
  "removeTabBarBadge": {
    "name": "## uni.removeTabBarBadge(options) @removetabbarbadge",
    "description": "移除 tabBar 某一项右上角的文本<br/>",
    "compatibility": "### removeTabBarBadge  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.91 | 4.11 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | [RemoveTabBarBadgeOptions](#removetabbarbadgeoptions-values) | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| index | number | 是 | - | - | tabBar的哪一项,从左边算起,索引从0开始 |\n@| success | (result: AsyncApiSuccessResult) => void | 否 | - | - | 接口调用成功的回调函数 |\n@| fail | (result: [SetTabBarFail](#settabbarfail-values)) => void | 否 | - | - | 接口调用失败的回调函数 |\n@| complete | (result: [AsyncApiResult](#asyncapiresult-values)) => void | 否 | - | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n##### SetTabBarFail 的属性值 @settabbarfail-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errCode | 100 \\| 200 | 是 | - | - | 错误码<br/>- 100: TabBar 不存在<br/>- 200: 参数错误 |\n| errSubject | string | 是 | - | - | 统一错误主题(模块)名称 |\n| data | any \\| null | 否 | - | - | 错误信息中包含的数据 |\n| cause | [Error](https://uniapp.dcloud.net.cn/tutorial/err-spec.html#unierror) \\| null | 否 | - | - | 源错误信息,可以包含多个错误,详见SourceError |\n| errMsg | string | 是 | - | - | - |\n\n##### AsyncApiResult 的属性值 @asyncapiresult-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errMsg | string | 是 | - | - | - |\n",
    "returnValue": "### 返回值  兼容性 \n\n| 类型 | 必备 |\n| :- | :- |\n| Promise \\| null | 否 |\n \n",
    "tutorial": "\n### 参见\n\n- [参见uni-app x相关文档](https://doc.dcloud.net.cn/uni-app-x/api/set-tabbar.html#removetabbarbadge)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=removeTabBarBadge&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=removeTabBarBadge&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=removeTabBarBadge&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=removeTabBarBadge&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=removeTabBarBadge&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=removeTabBarBadge)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=removeTabBarBadge&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.page.setTabBar.removeTabBarBadge)"
  },
  "setTabBarStyle": {
    "name": "## uni.setTabBarStyle(options) @settabbarstyle",
    "description": "动态设置 tabBar 的整体样式<br/>",
    "compatibility": "### setTabBarStyle  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.91 | 4.11 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | [SetTabBarStyleOptions](#settabbarstyleoptions-values) | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| color | string ([string.ColorString](/uts/data-type.md#ide-string)) | 否 | - | - | tab 上的文字默认颜色 |\n@| selectedColor | string ([string.ColorString](/uts/data-type.md#ide-string)) | 否 | - | - | tab 上的文字选中时的颜色 |\n@| backgroundColor | string ([string.ColorString](/uts/data-type.md#ide-string)) | 否 | - | - | tab 的背景色 |\n@| backgroundImage | string | 否 | - | - | 图片背景 |\n@| backgroundRepeat | \"repeat\" \\| \"repeat-x\" \\| \"repeat-y\" \\| \"no-repeat\" | 否 | - | - | 背景图平铺方式<br/>- repeat: 背景图片在垂直方向和水平方向平铺<br/>- repeat-x: 背景图片在水平方向平铺,垂直方向拉伸<br/>- repeat-y: 背景图片在垂直方向平铺,水平方向拉伸<br/>- no-repeat: 背景图片在垂直方向和水平方向都拉伸 |\n@| borderColor | string ([string.ColorString](/uts/data-type.md#ide-string)) | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.23\",\"4.23\",\"4.23\"]]}' /> | tabbar上边框的颜色(优先级高于 borderStyle) |\n@| borderStyle | \"black\" \\| \"white\" | 否 | - | - | tabbar上边框的颜色 |\n@| success | (result: AsyncApiSuccessResult) => void | 否 | - | - | 接口调用成功的回调函数 |\n@| fail | (result: [SetTabBarFail](#settabbarfail-values)) => void | 否 | - | - | 接口调用失败的回调函数 |\n@| complete | (result: [AsyncApiResult](#asyncapiresult-values)) => void | 否 | - | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n##### SetTabBarFail 的属性值 @settabbarfail-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errCode | 100 \\| 200 | 是 | - | - | 错误码<br/>- 100: TabBar 不存在<br/>- 200: 参数错误 |\n| errSubject | string | 是 | - | - | 统一错误主题(模块)名称 |\n| data | any \\| null | 否 | - | - | 错误信息中包含的数据 |\n| cause | [Error](https://uniapp.dcloud.net.cn/tutorial/err-spec.html#unierror) \\| null | 否 | - | - | 源错误信息,可以包含多个错误,详见SourceError |\n| errMsg | string | 是 | - | - | - |\n\n##### AsyncApiResult 的属性值 @asyncapiresult-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errMsg | string | 是 | - | - | - |\n",
    "returnValue": "### 返回值  兼容性 \n\n| 类型 | 必备 |\n| :- | :- |\n| Promise \\| null | 否 |\n \n",
    "tutorial": "\n### 参见\n\n- [参见uni-app x相关文档](https://doc.dcloud.net.cn/uni-app-x/api/set-tabbar.html#settabbarstyle)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=setTabBarStyle&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=setTabBarStyle&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=setTabBarStyle&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=setTabBarStyle&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=setTabBarStyle&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=setTabBarStyle)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=setTabBarStyle&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.page.setTabBar.setTabBarStyle)"
  },
  "setTabBarItem": {
    "name": "## uni.setTabBarItem(options) @settabbaritem",
    "description": "动态设置 tabBar 某一项的内容<br/>",
    "compatibility": "### setTabBarItem  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.91 | 4.11 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | [SetTabBarItemOptions](#settabbaritemoptions-values) | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| index | number | 是 | - | - | tabBar 的哪一项,从左边算起,索引从0开始 |\n@| text | string | 否 | - | - | tab 上按钮文字 |\n@| iconPath | string | 否 | - | - | 图片路径 |\n@| selectedIconPath | string | 否 | - | - | 选中时的图片路径 |\n@| pagePath | string | 否 | - | - | 页面绝对路径 |\n@| iconfont | **SetTabBarItemIconFontOptions** | 否 | - | - | 字体图标,优先级高于 iconPath |\n@@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@@| :- | :- | :- | :- |  :-: | :- |\n@@| text | string | 是 | - | - | 字库 Unicode 码 |\n@@| selectedText | string | 是 | - | - | 选中后字库 Unicode 码 |\n@@| fontSize | string | 否 | - | - | 字体图标字号(px) |\n@@| color | string | 否 | - | - | 字体图标颜色 |\n@@| selectedColor | string | 否 | - | - | 字体图标选中颜色 |\n@| visible | boolean | 否 | - | - | tab 是否显示 |\n@| success | (result: AsyncApiSuccessResult) => void | 否 | - | - | 接口调用成功的回调函数 |\n@| fail | (result: [SetTabBarFail](#settabbarfail-values)) => void | 否 | - | - | 接口调用失败的回调函数 |\n@| complete | (result: [AsyncApiResult](#asyncapiresult-values)) => void | 否 | - | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n##### SetTabBarFail 的属性值 @settabbarfail-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errCode | 100 \\| 200 | 是 | - | - | 错误码<br/>- 100: TabBar 不存在<br/>- 200: 参数错误 |\n| errSubject | string | 是 | - | - | 统一错误主题(模块)名称 |\n| data | any \\| null | 否 | - | - | 错误信息中包含的数据 |\n| cause | [Error](https://uniapp.dcloud.net.cn/tutorial/err-spec.html#unierror) \\| null | 否 | - | - | 源错误信息,可以包含多个错误,详见SourceError |\n| errMsg | string | 是 | - | - | - |\n\n##### AsyncApiResult 的属性值 @asyncapiresult-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errMsg | string | 是 | - | - | - |\n",
    "returnValue": "### 返回值  兼容性 \n\n| 类型 | 必备 |\n| :- | :- |\n| Promise \\| null | 否 |\n \n",
    "tutorial": "\n### 参见\n\n- [参见uni-app x相关文档](https://doc.dcloud.net.cn/uni-app-x/api/set-tabbar.html#settabbaritem)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=setTabBarItem&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=setTabBarItem&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=setTabBarItem&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=setTabBarItem&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=setTabBarItem&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=setTabBarItem)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=setTabBarItem&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.page.setTabBar.setTabBarItem)"
  },
  "startPullDownRefresh": {
    "name": "## uni.startPullDownRefresh(options?) @startpulldownrefresh",
    "description": "开始下拉刷新<br/>",
    "compatibility": "### startPullDownRefresh  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.91 | 4.11 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | [StartPullDownRefreshOptions](#startpulldownrefreshoptions-values) \\| null | 否 | - | - |  |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| success | (result: AsyncApiSuccessResult) => void | 否 | - | - | 接口调用成功的回调函数 |\n@| fail | (result: [StartPullDownRefreshFail](#startpulldownrefreshfail-values)) => void | 否 | - | - | 接口调用失败的回调函数 |\n@| complete | (result: [AsyncApiResult](#asyncapiresult-values)) => void | 否 | - | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n##### StartPullDownRefreshFail 的属性值 @startpulldownrefreshfail-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errCode | number | 是 | - | - | 下拉刷新错误码<br/>- 4: 框架内部异常 |\n| errSubject | string | 是 | - | - | 统一错误主题(模块)名称 |\n| data | any \\| null | 否 | - | - | 错误信息中包含的数据 |\n| cause | [Error](https://uniapp.dcloud.net.cn/tutorial/err-spec.html#unierror) \\| null | 否 | - | - | 源错误信息,可以包含多个错误,详见SourceError |\n| errMsg | string | 是 | - | - | - |\n\n##### AsyncApiResult 的属性值 @asyncapiresult-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errMsg | string | 是 | - | - | - |\n",
    "returnValue": "### 返回值  兼容性 \n\n| 类型 | 必备 |\n| :- | :- |\n| Promise \\| null | 否 |\n \n",
    "tutorial": "\n### 参见\n\n- [参见uni-app相关文档](https://uniapp.dcloud.io/uni-app-x/api/pull-down-refresh.html#startpulldownrefresh)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=startPullDownRefresh&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=startPullDownRefresh&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=startPullDownRefresh&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=startPullDownRefresh&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=startPullDownRefresh&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=startPullDownRefresh)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=startPullDownRefresh&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.page.pullDownRefresh.startPullDownRefresh)"
  },
  "stopPullDownRefresh": {
    "name": "## uni.stopPullDownRefresh() @stoppulldownrefresh",
    "description": "停止当前页面下拉刷新<br/>",
    "compatibility": "### stopPullDownRefresh  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.91 | 4.11 |\n",
    "param": "",
    "returnValue": "",
    "tutorial": "\n### 参见\n\n- [参见uni-app x相关文档](https://doc.dcloud.net.cn/uni-app-x/api/pull-down-refresh.html#stoppulldownrefresh)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=stopPullDownRefresh&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=stopPullDownRefresh&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=stopPullDownRefresh&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=stopPullDownRefresh&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=stopPullDownRefresh&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=stopPullDownRefresh)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=stopPullDownRefresh&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.page.pullDownRefresh.stopPullDownRefresh)"
  },
  "pullDownRefresh": {
    "example": "## 示例 \n> [hello uni-app x](https://gitcode.net/dcloud/hello-uni-app-x/-/blob/dev/pages/API/pull-down-refresh/pull-down-refresh.uvue) \n ::: preview https://hellouniappx.dcloud.net.cn/web/#/pages/API/pull-down-refresh/pull-down-refresh\n>Template\n```vue\n<template>\r\n  <!-- #ifdef APP -->\r\n  <scroll-view style=\"flex: 1;\">\r\n  <!-- #endif -->\r\n    <!-- 实际开发中,长列表应该使用list-view -->\r\n    <view class=\"uni-padding-wrap uni-common-mt\">\r\n      <text class=\"text\" v-for=\"(num,index) in data\" :key=\"index\">list - {{num}}</text>\r\n      <view v-if=\"showLoadMore\">{{loadMoreText}}</view>\r\n    </view>\r\n  <!-- #ifdef APP -->\r\n  </scroll-view>\r\n  <!-- #endif -->\r\n</template>\r\n\r\n\r\n<style>\r\n  .text {\r\n    margin: 6px 0;\r\n    width: 100%;\r\n    background-color: #fff;\r\n    height: 52px;\r\n    line-height: 52px;\r\n    text-align: center;\r\n    color: #555;\r\n    border-radius: 4px;\r\n  }\r\n</style>\n\n```\n>Script\n```uts\n\r\n  export default {\r\n    data() {\r\n      return {\r\n        data: [] as Array<number>,\r\n        loadMoreText: \"加载中...\",\r\n        showLoadMore: false,\r\n        max: 0,\n        pulldownRefreshTriggered: false\r\n      }\r\n    },\r\n    onReady() {\r\n      uni.startPullDownRefresh();\r\n      this.initData();\r\n    },\r\n    onReachBottom() {\r\n      console.log(\"onReachBottom\");\r\n      if (this.max > 40) {\r\n        this.loadMoreText = \"没有更多数据了!\"\r\n        return;\r\n      }\r\n      this.showLoadMore = true;\r\n      setTimeout(() => {\r\n        this.setListData();\r\n      }, 300);\r\n    },\r\n    onPullDownRefresh() {\r\n      console.log('onPullDownRefresh');\n      this.pulldownRefreshTriggered = true\r\n      this.initData();\r\n    },\r\n    methods: {\r\n      initData() {\r\n        setTimeout(() => {\r\n          this.max = 0;\r\n          this.data = [];\r\n          let data : Array<number> = [];\r\n          this.max += 20;\r\n          for (let i : number = this.max - 19; i < this.max + 1; i++) {\r\n            data.push(i)\r\n          }\r\n          this.data = this.data.concat(data);\r\n          uni.stopPullDownRefresh();\r\n        }, 1000);\r\n      },\r\n      setListData() {\r\n        let data : Array<number> = [];\r\n        this.max += 10;\r\n        for (let i : number = this.max - 9; i < this.max + 1; i++) {\r\n          data.push(i)\r\n        }\r\n        this.data = this.data.concat(data);\r\n      }\r\n    }\r\n  }\r\n\n```\n:::"
  },
  "pageScrollTo": {
    "name": "## uni.pageScrollTo(options) @pagescrollto",
    "description": "将页面滚动到目标位置<br/>",
    "compatibility": "### pageScrollTo  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.91 | 4.11 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | [PageScrollToOptions](#pagescrolltooptions-values) | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| scrollTop | number \\| null | 否 | - | - | 滚动到页面的目标位置 |\n@| selector | string \\| null | 否 | - | - | 选择器 |\n@| offsetTop | number \\| null | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.91\",\"4.11\"]]}' /> | 偏移距离,可以滚动到 selector 加偏移距离的位置 |\n@| duration | number \\| null | 否 | - | - | 滚动动画的时长 |\n@| success | (result: AsyncApiSuccessResult) => void \\| null | 否 | - | - | 接口调用成功的回调函数 |\n@| fail | (result: [PageScrollToFail](#pagescrolltofail-values)) => void \\| null | 否 | - | - | 接口调用失败的回调函数 |\n@| complete | (result: [AsyncApiResult](#asyncapiresult-values)) => void \\| null | 否 | - | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n##### PageScrollToFail 的属性值 @pagescrolltofail-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errCode | number | 是 | - | - | - |\n| errSubject | string | 是 | - | - | 统一错误主题(模块)名称 |\n| data | any \\| null | 否 | - | - | 错误信息中包含的数据 |\n| cause | [Error](https://uniapp.dcloud.net.cn/tutorial/err-spec.html#unierror) \\| null | 否 | - | - | 源错误信息,可以包含多个错误,详见SourceError |\n| errMsg | string | 是 | - | - | - |\n\n##### AsyncApiResult 的属性值 @asyncapiresult-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errMsg | string | 是 | - | - | - |\n",
    "returnValue": "### 返回值  兼容性 \n\n| 类型 | 必备 |\n| :- | :- |\n| Promise \\| null | 否 |\n \n",
    "tutorial": "\n### 参见\n\n- [参见uni-app x相关文档](https://doc.dcloud.net.cn/uni-app-x/api/page-scroll-to.html)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=pageScrollTo&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=pageScrollTo&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=pageScrollTo&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=pageScrollTo&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=pageScrollTo&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=pageScrollTo)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=pageScrollTo&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.page.pageScrollTo)",
    "example": "### 示例 \n> [hello uni-app x](https://gitcode.net/dcloud/hello-uni-app-x/-/blob/dev/pages/API/page-scroll-to/page-scroll-to.uvue) \n ::: preview https://hellouniappx.dcloud.net.cn/web/#/pages/API/page-scroll-to/page-scroll-to\n>Template\n```vue\n<template>\n  <!-- #ifdef APP -->\n  <scroll-view style=\"flex: 1\" scroll-with-animation=\"true\">\n  <!-- #endif -->\n    <view class=\"uni-padding-wrap\">\n      <page-head :title=\"title\"></page-head>\n      <button type=\"default\" class=\"btn-scrollTo\" @click=\"scrollTo\">\n        scrollTo\n      </button>\n      <button type=\"default\" class=\"btn-scrollToElement\" @click=\"scrollToElement\">\n        scrollToElement\n      </button>\n      <view class=\"uni-list\" v-for=\"(_, index) in 10\" :key=\"index\">\n        <view class=\"uni-list-cell list-item\">{{ index }}</view>\n      </view>\n      <view class=\"custom-element\">scrollTo-custom-element</view>\n      <view class=\"uni-list\" v-for=\"(_, index2) in 10\" :key=\"index2\">\n        <view class=\"uni-list-cell list-item\">{{ index2 }}</view>\n      </view>\n    </view>\n  <!-- #ifdef APP -->\n  </scroll-view>\n  <!-- #endif -->\n</template>\n\n\n\n<style>\n  .list-item {\n    height: 100px;\n    padding-left: 30px;\n  }\n</style>\n\n```\n>Script\n```uts\n\n  export default {\n    data() {\n      return {\n        title: 'pageScrollTo',\n      }\n    },\n    methods: {\n      scrollTo() {\n        uni.pageScrollTo({\n          scrollTop: 100,\n          duration: 300,\n          success: () => {\n            console.log('success')\n          },\n        })\n      },\n      scrollToElement() {\n        uni.pageScrollTo({\n          selector: '.custom-element',\n          duration: 300,\n          success: () => {\n            console.log('success')\n          },\n        })\n      },\n    },\n  }\n\n```\n:::"
  },
  "onTabBarMidButtonTap": {
    "name": "## uni.onTabBarMidButtonTap(options) @ontabbarmidbuttontap",
    "description": "监听中间按钮的点击事件<br/>",
    "compatibility": "### onTabBarMidButtonTap  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | x | x |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | () => void | 是 | - | - | - | \n",
    "returnValue": "",
    "tutorial": "\n### 参见\n\n- [参见uni-app x相关文档](https://doc.dcloud.net.cn/uni-app-x/api/on-tab-bar-mid-button-tap.html)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=onTabBarMidButtonTap&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=onTabBarMidButtonTap&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=onTabBarMidButtonTap&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=onTabBarMidButtonTap&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=onTabBarMidButtonTap&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=onTabBarMidButtonTap)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=onTabBarMidButtonTap&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.page.onTabBarMidButtonTap)"
  },
  "getElementById": {
    "name": "## uni.getElementById(id) @getelementbyid",
    "description": "返回一个匹配特定 ID 的元素, 如果不存在,返回 null。\\<br/>如果需要获取指定的节点类型,需要使用 as 进行类型转换。\\<br/>ID 区分大小写,且应该是唯一的。如果存在多个匹配的元素,则返回第一个匹配的元素。<br/>",
    "compatibility": "### getElementById  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.91 | 4.11 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| id | [string.IDString](/uts/data-type.md#ide-string) \\| string | 是 | - | - | - | \n",
    "returnValue": "### 返回值  兼容性 \n\n| 类型 | 必备 |\n| :- | :- |\n| [UniElement](/dom/unielement.md) \\| null | 否 |\n \n",
    "tutorial": "\n### 参见\n\n- [参见uni-app x相关文档](https://doc.dcloud.net.cn/uni-app-x/api/get-element.html)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=getElementById&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=getElementById&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=getElementById&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=getElementById&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=getElementById&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=getElementById)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=getElementById&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.dom.getElementById)",
    "example": "### 示例 \n> [hello uni-app x](https://gitcode.net/dcloud/hello-uni-app-x/-/blob/dev/pages/API/get-element-by-id/get-element-by-id.uvue) \n ::: preview https://hellouniappx.dcloud.net.cn/web/#/pages/API/get-element-by-id/get-element-by-id\n>Template\n```vue\n<template>\r\n  <page-head id=\"page-head\" title=\"getElementById\"></page-head>\r\n  <view style=\"margin: 0 15px;\">\r\n    <text id=\"text\">this is text</text>\r\n    <view id=\"view\" class=\"uni-common-mt\" style=\"border: 1px solid red\">this is view</view>\r\n    <button class=\"uni-btn\" @click=\"changePageHeadBackgroundColor\">\r\n      修改 page-head 背景色\r\n    </button>\r\n    <button class=\"uni-btn\" @click=\"changeTextColor\">\r\n      修改 text 字体颜色\r\n    </button>\r\n    <button class=\"uni-btn\" @click=\"changeViewStyle\">\r\n      修改 view 宽高及背景色\r\n    </button>\r\n    <button class=\"uni-btn\" @click=\"goMultipleRootNode\">\r\n      跳转多根节点示例\r\n    </button>\r\n  </view>\r\n</template>\r\n\r\n\r\n\n```\n>Script\n```uts\n\r\n  export default {\r\n    data() {\r\n      return {\r\n        checked: false,\r\n        homePagePath: '/pages/tabBar/component',\r\n        launchOptionsPath: '',\r\n      }\r\n    },\n    methods: {\r\n      getElementByNotExistId() : Element | null {\r\n        return uni.getElementById('not-exist-id')\r\n      },\r\n      changePageHeadBackgroundColor() {\r\n        const pageHead = uni.getElementById('page-head')!\r\n        pageHead.style.setProperty('background-color', 'red')\r\n      },\r\n      changeTextColor() {\r\n        const text = uni.getElementById('text')!\r\n        text.style.setProperty('color', 'red')\r\n      },\r\n      changeViewStyle() {\r\n        const view = uni.getElementById<UniViewElement>('view')\r\n        if (view !== null) {\r\n          view.style.setProperty('width', '90%')\r\n          view.style.setProperty('height', '50px')\r\n          view.style.setProperty('background-color', '#007AFF')\r\n        }\r\n      },\r\n      goMultipleRootNode() {\r\n        uni.navigateTo({ url: '/pages/API/get-element-by-id/get-element-by-id-multiple-root-node' })\r\n      },\n      //自动化测试获取text元素的offsetLeft属性值\n      getTextOffsetLeft(): number {\n        const text = uni.getElementById('text')!\n        return text.offsetLeft\n      }\r\n    }\r\n  }\r\n\n```\n:::"
  },
  "createSelectorQuery": {
    "name": "## uni.createSelectorQuery() @createselectorquery",
    "description": "返回一个SelectorQuery对象实例<br/>",
    "compatibility": "### createSelectorQuery  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.91 | 4.11 |\n",
    "param": "",
    "returnValue": "### 返回值  兼容性 \n\n| 类型 |\n| :- |\n| [SelectorQuery](#selectorquery-values) |\n\n#### SelectorQuery 的方法 @selectorquery-values \n\n#### in(component?) @in\n将选择器的选取范围更改为自定义组件component内\n##### in  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| component | any \\| null | 否 | - | - |  | \n\n##### 返回值  兼容性 \n\n| 类型 |\n| :- |\n| [SelectorQuery](#selectorquery-values) |\n \n\n#### select(selector) @select\n在当前页面下选择第一个匹配选择器selector的节点\n##### select  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| selector | string | 是 | - | - | - | \n\n##### 返回值  兼容性 \n\n| 类型 |\n| :- |\n| [NodesRef](#nodesref-values) |\n\n###### NodesRef 的方法 @nodesref-values \n\n###### boundingClientRect(callback?) @boundingclientrect\n添加节点的布局位置的查询请求,相对于显示区域,以像素为单位\n###### boundingClientRect  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| callback | (result: any) => void \\| null | 否 | - | - |  | \n\n###### 返回值  兼容性 \n\n| 类型 |\n| :- |\n| [SelectorQuery](#selectorquery-values) |\n \n\n###### scrollOffset(callback) @scrolloffset\n添加节点的滚动位置查询请求,以像素为单位\n###### scrollOffset  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| callback | (result: any) => void | 是 | - | - |  | \n\n###### 返回值  兼容性 \n\n| 类型 |\n| :- |\n| [SelectorQuery](#selectorquery-values) |\n \n\n###### fields(fields, callback) @fields\n获取节点的相关信息,需要获取的字段在fields中指定\n###### fields  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| fields | **NodeField** | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| id | boolean \\| null | 否 | - | - | 是否返回节点 id |\n@| dataset | boolean \\| null | 否 | - | - | 是否返回节点 dataset |\n@| rect | boolean \\| null | 否 | - | - | 是否返回节点布局位置(left right top bottom) |\n@| size | boolean \\| null | 否 | - | - | 是否返回节点尺寸(width height) |\n@| scrollOffset | boolean \\| null | 否 | - | - | 是否返回节点的 scrollLeft scrollTop,节点必须是 scroll-view 或者 viewport |\n@| properties | Array\\<string\\> \\| null | 否 | - | - | 指定属性名列表,返回节点对应属性名的当前属性值(只能获得组件文档中标注的常规属性值,id class style 和事件绑定的属性值不可获取) |\n@| computedStyle | Array\\<string\\> \\| null | 否 | - | - | 指定样式名列表,返回节点对应样式名的当前值 |\n@| context | boolean \\| null | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"x\",\"x\"]]}' /> | 是否返回节点对应的 Context 对象 |\n| callback | (result: any) => void | 是 | - | - |  | \n\n###### 返回值  兼容性 \n\n| 类型 |\n| :- |\n| [SelectorQuery](#selectorquery-values) |\n \n\n###### context(callback) @context\n添加节点的 Context 对象查询请求\n###### context  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | x | x |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| callback | (result: any) => void | 是 | - | - |  | \n\n###### 返回值  兼容性 \n\n| 类型 |\n| :- |\n| [SelectorQuery](#selectorquery-values) |\n \n\n###### node(callback) @node\n获取 Node 节点实例。目前支持 Canvas 的获取。\n###### node  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| callback | (result: any) => void | 是 | - | - | - | \n\n###### 返回值  兼容性 \n\n| 类型 |\n| :- |\n| [SelectorQuery](#selectorquery-values) |\n \n \n\n#### selectAll(selector) @selectall\n在当前页面下选择匹配选择器selector的所有节点\n##### selectAll  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| selector | string | 是 | - | - | - | \n\n##### 返回值  兼容性 \n\n| 类型 |\n| :- |\n| [NodesRef](#nodesref-values) |\n \n\n#### selectViewport() @selectviewport\n选择显示区域\n##### selectViewport  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n\n##### 返回值  兼容性 \n\n| 类型 |\n| :- |\n| [NodesRef](#nodesref-values) |\n \n\n#### exec(callback) @exec\n执行所有的请求\n##### exec  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| callback | (result: Array\\<any\\>) => void \\| null | 是 | - | - | - | \n\n##### 返回值  兼容性 \n\n| 类型 | 必备 |\n| :- | :- |\n| [NodesRef](#nodesref-values) \\| null | 否 |\n \n \n",
    "tutorial": "\n### 参见\n\n- [参见uni-app x相关文档](https://doc.dcloud.net.cn/uni-app-x/api/nodes-info.html)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=createSelectorQuery&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=createSelectorQuery&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=createSelectorQuery&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=createSelectorQuery&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=createSelectorQuery&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=createSelectorQuery)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=createSelectorQuery&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.dom.createSelectorQuery)",
    "example": "### 示例 \n> [hello uni-app x](https://gitcode.net/dcloud/hello-uni-app-x/-/blob/dev/pages/API/create-selector-query/create-selector-query.uvue) \n ::: preview https://hellouniappx.dcloud.net.cn/web/#/pages/API/create-selector-query/create-selector-query\n>Template\n```vue\n<template>\r\n  <view class=\"page\" id=\"page\">\r\n    <page-head :title=\"title\"></page-head>\r\n    <button class=\"btn btn-get-node-info\" @click=\"getNodeInfo\">getNodeInfo</button>\r\n    <button class=\"btn btn-get-all-node-info\" @click=\"getAllNodeInfo\">getAllNodeInfo</button>\r\n    <view id=\"rect-1-2\" class=\"rect-1-2\">\r\n      <view class=\"rect rect1\"></view>\r\n      <view class=\"rect rect2\"></view>\r\n    </view>\r\n    <view class=\"rect-info-1-2\">\r\n      <view class=\"rect-info\" v-for=\"(nodeInfo, index) in nodeInfoList\" :key=\"index\">\r\n        <view class=\"node-info-item\">\r\n          <text class=\"node-info-item-k\">left: </text>\r\n          <text class=\"node-info-item-v\">{{nodeInfo.left}}</text>\r\n        </view>\r\n        <view class=\"node-info-item\">\r\n          <text class=\"node-info-item-k\">top: </text>\r\n          <text class=\"node-info-item-v\">{{nodeInfo.top}}</text>\r\n        </view>\r\n        <view class=\"node-info-item\">\r\n          <text class=\"node-info-item-k\">right: </text>\r\n          <text class=\"node-info-item-v\">{{nodeInfo.right}}</text>\r\n        </view>\r\n        <view class=\"node-info-item\">\r\n          <text class=\"node-info-item-k\">bottom: </text>\r\n          <text class=\"node-info-item-v\">{{nodeInfo.bottom}}</text>\r\n        </view>\r\n        <view class=\"node-info-item\">\r\n          <text class=\"node-info-item-k\">width: </text>\r\n          <text class=\"node-info-item-v\">{{nodeInfo.width}}</text>\r\n        </view>\r\n        <view class=\"node-info-item\">\r\n          <text class=\"node-info-item-k\">height: </text>\r\n          <text class=\"node-info-item-v\">{{nodeInfo.height}}</text>\r\n        </view>\r\n      </view>\r\n    </view>\n    <node-child class=\"node-child\"></node-child>\r\n  </view>\r\n</template>\r\n\r\n\r\n\r\n<style>\r\n  .page {\r\n    padding: 15px;\r\n    flex: 1;\r\n  }\r\n\r\n  .btn {\r\n    margin-top: 15px;\r\n  }\r\n\r\n  .rect-1-2 {\r\n    flex-direction: row;\r\n    margin-top: 15px;\r\n  }\r\n\r\n  .rect {\r\n    width: 150px;\r\n    height: 100px;\r\n  }\r\n\r\n  .rect1 {\r\n    background-color: dodgerblue;\r\n  }\r\n\r\n  .rect2 {\r\n    margin-left: auto;\r\n    background-color: seagreen;\r\n  }\r\n\r\n  .rect-info-1-2 {\r\n    flex-direction: row;\r\n    margin-top: 15px;\r\n  }\r\n\r\n  .rect-info {\r\n    flex: 1;\r\n    flex-direction: column;\r\n  }\r\n\r\n  .node-info-item {\r\n    flex-direction: row;\r\n  }\r\n\r\n  .node-info-item-k {\r\n    width: 72px;\r\n    line-height: 2;\r\n  }\r\n\r\n  .node-info-item-v {\r\n    font-weight: bold;\r\n    line-height: 2;\r\n  }\r\n</style>\n\n```\n>Script\n```uts\n\r\n  import nodeChild from './nodes-info-child.uvue'\r\n\r\n  type NodeInfoType = {\r\n    left : number | null,\r\n    top : number | null,\r\n    right : number | null,\r\n    bottom : number | null,\r\n    width : number | null,\r\n    height : number | null,\r\n  }\r\n\r\n  export default {\r\n    components: {\r\n      nodeChild\r\n    },\r\n    data() {\r\n      return {\r\n        title: 'createSelectorQuery',\r\n        nodeInfoList: [] as NodeInfoType[],\r\n        // 仅用于自动化测试\r\n        rootNodeInfo: null as NodeInfoType | null,\r\n        //供自动化测试使用\r\n        // resizeRectValid: false\r\n      }\r\n    },\r\n    onResize() {\r\n      //供自动化测试使用\r\n      /* var rect12Element = uni.getElementById(\"rect-1-2\")\r\n      if(rect12Element != null) {\r\n        var domRect = rect12Element.getBoundingClientRect()\r\n        if(domRect.width > 100) {\r\n          this.resizeRectValid = true\r\n        }\r\n      } */\r\n    },\r\n    methods: {\r\n      // 仅用于自动化测试\r\n      getRootNodeInfo(selector : string) {\r\n        uni.createSelectorQuery().select(selector).boundingClientRect().exec((ret) => {\r\n          if (ret.length == 1) {\r\n            const nodeInfo = ret[0] as NodeInfo;\r\n            const nodeType = {\r\n              left: nodeInfo.left,\r\n              top: nodeInfo.top,\r\n              right: nodeInfo.right,\r\n              bottom: nodeInfo.bottom,\r\n              width: nodeInfo.width,\r\n              height: nodeInfo.height,\r\n            } as NodeInfoType;\r\n            this.rootNodeInfo = nodeType\r\n          }\r\n        })\r\n      },\r\n      getNodeInfo() {\r\n        uni.createSelectorQuery().select('.rect1').boundingClientRect().exec((ret) => {\r\n          this.nodeInfoList.length = 0\r\n          const i = ret[0] as NodeInfo\r\n          this.nodeInfoList.push({\r\n            left: i.left,\r\n            top: i.top,\r\n            right: i.right,\r\n            bottom: i.bottom,\r\n            width: i.width,\r\n            height: i.height,\r\n          } as NodeInfoType)\r\n        })\r\n      },\r\n      getAllNodeInfo() {\r\n        uni.createSelectorQuery().selectAll('.rect').boundingClientRect().exec((ret) => {\r\n          this.nodeInfoList.length = 0\r\n          const array = ret[0] as NodeInfo[]\r\n          array.forEach((i) => {\r\n            this.nodeInfoList.push({\r\n              left: i.left,\r\n              top: i.top,\r\n              right: i.right,\r\n              bottom: i.bottom,\r\n              width: i.width,\r\n              height: i.height,\r\n            } as NodeInfoType)\r\n          })\r\n        })\r\n      }\r\n    }\r\n  }\r\n\n```\n:::"
  },
  "showActionSheet": {
    "name": "## uni.showActionSheet(options) @showactionsheet",
    "description": "从底部向上弹出操作菜单",
    "compatibility": "### showActionSheet  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.9.0 | 4.11 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | [ShowActionSheetOptions](#showactionsheetoptions-values) | 是 | - | - |  |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| title | string \\| null | 否 | - | - | 菜单标题 |\n@| alertText | string \\| null | 否 | - | - | 警示文案(同菜单标题, app无效) |\n@| itemList | Array\\<string\\> | 是 | - | - | 按钮的文字数组 |\n@| itemColor | [string.ColorString](/uts/data-type.md#ide-string) \\| null | 否 | - | - | 按钮的文字颜色,字符串格式(iOS默认为系统控件颜色) |\n@| popover | **Popover** \\| null | 否 | - | - | 大屏设备弹出原生选择按钮框的指示区域,默认居中显示 |\n@@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@@| :- | :- | :- | :- |  :-: | :- |\n@@| top | number | 是 | - | - | 指示区域坐标,使用原生 navigationBar 时一般需要加上 navigationBar 的高度 |\n@@| left | number | 是 | - | - | 指示区域坐标 |\n@@| width | number | 是 | - | - | 指示区域宽度 |\n@@| height | number | 是 | - | - | 指示区域高度 |\n@| success | (res: [ShowActionSheetSuccess](#showactionsheetsuccess-values)) => void \\| null | 否 | - | - | uni.showActionSheet成功回调函数定义 |\n@| fail | (res: [IPromptError](#iprompterror-values)) => void \\| null | 否 | - | - | uni.showActionSheet成功回调函数定义 |\n@| complete | (res: any) => void \\| null | 否 | - | - | uni.showActionSheet成功回调函数定义 | \n\n##### ShowActionSheetSuccess 的属性值 @showactionsheetsuccess-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| tapIndex | number \\| null | 否 | - | - | 用户点击的按钮,从上到下的顺序,从0开始 |\n\n##### IPromptError 的属性值 @iprompterror-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errCode | 1 \\| 1001 | 是 | - | - | 错误码<br/>- 1\t  撤销<br/>- 1001  请求参数非法 |\n| errSubject | string | 是 | - | - | 统一错误主题(模块)名称 |\n| data | any \\| null | 否 | - | - | 错误信息中包含的数据 |\n| cause | [Error](https://uniapp.dcloud.net.cn/tutorial/err-spec.html#unierror) \\| null | 否 | - | - | 源错误信息,可以包含多个错误,详见SourceError |\n| errMsg | string | 是 | - | - | - |\n",
    "returnValue": "",
    "tutorial": "\n### 参见\n\n- [参见uni-app相关文档](https://uniapp.dcloud.net.cn/api/ui/prompt.html#showactionsheet)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=showActionSheet&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=showActionSheet&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=showActionSheet&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=showActionSheet&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=showActionSheet&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=showActionSheet)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=showActionSheet&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.ui.showActionSheet)",
    "example": "### 示例 \n> [hello uni-app x](https://gitcode.net/dcloud/hello-uni-app-x/-/blob/dev/pages/API/show-action-sheet/show-action-sheet.uvue) \n ::: preview https://hellouniappx.dcloud.net.cn/web/#/pages/API/show-action-sheet/show-action-sheet\n>Template\n```vue\n<template>\r\n  <view>\r\n    <page-head :title=\"title\"></page-head>\r\n    <view class=\"uni-list\">\r\n      <radio-group @change=\"radioChange\">\r\n        <radio class=\"uni-list-cell uni-list-cell-pd\" v-for=\"(item, index) in items\" :key=\"item.value\"\r\n          :class=\"index < items.length - 1 ? 'uni-list-cell-line': ''\" :value=\"item.value\" :checked=\"index === current\">\r\n          {{item.name}}\r\n        </radio>\r\n      </radio-group>\r\n    </view>\r\n    <view class=\"uni-list\">\r\n      <view class=\"uni-list-cell uni-list-cell-pd\">\r\n        <view class=\"uni-list-cell-db\">自定义itemColor</view>\r\n        <switch :checked=\"itemColorCustom\" @change=\"itemColorChange\" />\r\n      </view>\r\n      <view class=\"uni-list-cell uni-list-cell-pd\">\r\n        <view class=\"uni-list-cell-db\">超长文本和空文本item</view>\r\n        <switch :checked=\"itemContentLarge\" @change=\"itemContentLargeChange\" />\r\n      </view>\r\n      <view class=\"uni-list-cell uni-list-cell-pd\">\r\n        <view class=\"uni-list-cell-db\">超过6个item</view>\r\n        <switch :checked=\"itemNumLargeSelect\" @change=\"itemNumLargeChange\" />\r\n      </view>\r\n    </view>\r\n    <view class=\"uni-padding-wrap\">\r\n      <view class=\"uni-btn-v\">\r\n        <button class=\"uni-btn-v\" type=\"default\" @tap=\"actionSheetTap\" id=\"btn-action-sheet-show\">弹出action sheet</button>\r\n      </view>\r\n    </view>\r\n  </view>\r\n</template>\r\n\n\n```\n>Script\n```uts\n\r\n  type ItemType = {\r\n    value : string,\r\n    name : string,\r\n  }\r\n  export default {\r\n    data() {\r\n      return {\r\n        title: 'action-sheet',\r\n        itemColorCustom: false,\r\n        itemContentLarge: false,\r\n        itemNumLargeSelect: false,\n        showErrorToast:true,\r\n        items: [{\r\n          value: '标题',\r\n          name: '有标题'\r\n        },\r\n        {\r\n          value: '',\r\n          name: '无标题'\r\n        },\r\n        {\r\n          value: '超长标题测试内容,测试超过显示最大范围之后的样式-超长标题测试内容,测试超过显示最大范围之后的样式',\r\n          name: '超长标题'\r\n        }\r\n        ] as ItemType[],\r\n        current: 0,\r\n      }\r\n    },\n    onLoad(){\n      uni.showActionSheet({\n        title: \"onLoad 调用示例,请手动取消\",\n        itemList:['item1', 'item2'],\n      })\n    },\r\n    methods: {\n      //自动化测试例专用\n      jest_getWindowInfo() : GetWindowInfoResult {\n        return uni.getWindowInfo();\n      },\r\n      radioChange(e : UniRadioGroupChangeEvent) {\r\n        for (let i = 0; i < this.items.length; i++) {\r\n          if (this.items[i].value === e.detail.value) {\r\n            this.current = i;\r\n            break;\r\n          }\r\n        }\r\n      },\r\n      itemContentLargeChange: function (e : UniSwitchChangeEvent) {\r\n        this.itemContentLarge = e.detail.value\r\n      },\r\n      itemColorChange: function (e : UniSwitchChangeEvent) {\r\n        this.itemColorCustom = e.detail.value\r\n      },\r\n      itemNumLargeChange: function (e : UniSwitchChangeEvent) {\r\n        this.itemNumLargeSelect = e.detail.value\r\n      },\r\n      actionSheetTap() {\r\n\r\n        let itemInfo = ['item1', 'item2', 'item3', 'item4']\r\n\r\n        if (this.itemContentLarge) {\r\n          itemInfo = ['两个黄鹂鸣翠柳,一行白鹭上青天。窗含西岭千秋雪,门泊东吴万里船', '水光潋滟晴方好,山色空蒙雨亦奇。 欲把西湖比西子,淡妆浓抹总相宜', '']\r\n        }\n\n        if (this.itemNumLargeSelect) {\r\n          // 大量选项测试,不能超过6个元素 https://uniapp.dcloud.net.cn/api/ui/prompt.html#showactionsheet\r\n          itemInfo = []\n          for (var i = 1; i <= 10; i++) {\r\n            itemInfo.push('两个黄鹂鸣翠柳,一行白鹭上青天');\r\n          }\r\n        }\r\n\r\n        const that = this\r\n        if (this.itemColorCustom) {\r\n          uni.showActionSheet({\r\n            title: this.items[this.current].value,\r\n            itemList: itemInfo,\r\n            itemColor: \"#ff00ff\",\r\n            success: (e) => {\r\n              console.log(e.tapIndex);\r\n              uni.showToast({\r\n                title: \"点击了第\" + e.tapIndex + \"个选项\",\r\n                icon: \"none\"\r\n              })\r\n            },\r\n            fail: (e) => {\n              if(this.showErrorToast){\n                uni.showToast({\n                  title: e.errMsg,\n                  icon: \"none\"\n                })\n              }\r\n              console.log(e);\r\n            }\r\n          })\r\n        } else {\r\n          uni.showActionSheet({\r\n            title: this.items[this.current].value,\r\n            itemList: itemInfo,\r\n            success: (e) => {\r\n              console.log(e.tapIndex);\r\n              uni.showToast({\r\n                title: \"点击了第\" + e.tapIndex + \"个选项\",\r\n                icon: \"none\"\r\n              })\r\n            },\r\n            fail: (e) => {\r\n              console.log(e);\n              if(this.showErrorToast){\n                uni.showToast({\n                  title: e.errMsg,\n                  icon: \"none\"\n                })\n              }\n            }\r\n          })\r\n        }\r\n      },\r\n    }\r\n  }\r\n\n```\n:::"
  },
  "showModal": {
    "name": "## uni.showModal(options) @showmodal",
    "description": "显示模态弹窗,可以只有一个确定按钮,也可以同时有确定和取消按钮。类似于一个API整合了 html 中:alert、confirm。",
    "compatibility": "### showModal  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.9.0 | 4.11 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | [ShowModalOptions](#showmodaloptions-values) | 是 | - | - |  |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| title | string \\| null | 否 | - | - | 提示的标题 |\n@| content | string \\| null | 否 | - | - | 提示的内容 |\n@| showCancel | boolean \\| null | 否 | true<br/>是否显示取消按钮,默认为 true | - |  |\n@| cancelText | string \\| null | 否 | - | - | 取消按钮的文字,默认为\"取消\" |\n@| cancelColor | [string.ColorString](/uts/data-type.md#ide-string) \\| null | 否 | - | - | 取消按钮的文字颜色,默认为\"#000000\" |\n@| confirmText | string \\| null | 否 | - | - | 确定按钮的文字,默认为\"确定\" |\n@| confirmColor | [string.ColorString](/uts/data-type.md#ide-string) \\| null | 否 | - | - | 确定按钮的文字颜色 |\n@| editable | boolean \\| null | 否 | false<br/>是否显示输入框 | - |  |\n@| placeholderText | string \\| null | 否 | - | - | 显示输入框时的提示文本 |\n@| success | (res: [ShowModalSuccess](#showmodalsuccess-values)) => void \\| null | 否 | - | - | uni.showModal成功回调函数定义 |\n@| fail | (res: [IPromptError](#iprompterror-values)) => void \\| null | 否 | - | - | uni.showModal失败回调函数定义 |\n@| complete | (res: any) => void \\| null | 否 | - | - | uni.showModal完成回调函数定义 | \n\n##### ShowModalSuccess 的属性值 @showmodalsuccess-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| confirm | boolean | 是 | - | - | 为 true 时,表示用户点击了确定按钮 |\n| cancel | boolean | 是 | - | - | 为 true 时,表示用户点击了取消(用于 Android 系统区分点击蒙层关闭还是点击取消按钮关闭) |\n| content | string \\| null | 否 | - | - | editable 为 true 时,用户输入的文本 |\n\n##### IPromptError 的属性值 @iprompterror-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errCode | 1 \\| 1001 | 是 | - | - | 错误码<br/>- 1\t  撤销<br/>- 1001  请求参数非法 |\n| errSubject | string | 是 | - | - | 统一错误主题(模块)名称 |\n| data | any \\| null | 否 | - | - | 错误信息中包含的数据 |\n| cause | [Error](https://uniapp.dcloud.net.cn/tutorial/err-spec.html#unierror) \\| null | 否 | - | - | 源错误信息,可以包含多个错误,详见SourceError |\n| errMsg | string | 是 | - | - | - |\n",
    "returnValue": "",
    "tutorial": "\n### 参见\n\n- [参见uni-app相关文档](https://uniapp.dcloud.net.cn/api/ui/prompt.html#showmodal)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=showModal&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=showModal&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=showModal&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=showModal&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=showModal&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=showModal)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=showModal&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.ui.showModal)",
    "example": "### 示例 \n> [hello uni-app x](https://gitcode.net/dcloud/hello-uni-app-x/-/blob/dev/pages/API/show-modal/show-modal.uvue) \n ::: preview https://hellouniappx.dcloud.net.cn/web/#/pages/API/show-modal/show-modal\n>Template\n```vue\n<template>\n  <!-- #ifdef APP -->\n  <scroll-view style=\"flex: 1\">\n  <!-- #endif -->\n    <view>\n      <page-head :title=\"title\"></page-head>\n      <view class=\"uni-list\">\n        <radio-group @change=\"radioChange\">\n          <radio class=\"uni-list-cell uni-list-cell-pd\" v-for=\"(item, index) in items\" :key=\"item.value\"\n            :class=\"index < items.length - 1 ? 'uni-list-cell-line' : ''\" :value=\"item.value\"\n            :checked=\"index === current\">\n            {{ item.name }}\n          </radio>\n        </radio-group>\n      </view>\n      <view class=\"uni-list\">\n        <view class=\"uni-list-cell uni-list-cell-pd\">\n          <view class=\"uni-list-cell-db\">是否显示取消按钮</view>\n          <switch :checked=\"showCancelSelect\" @change=\"showCancelChange\" />\n        </view>\n        <view class=\"uni-list-cell uni-list-cell-pd\">\n          <view class=\"uni-list-cell-db\">定制取消文案</view>\n          <switch :checked=\"cancelTextSelect\" @change=\"cancelTextChange\" />\n        </view>\n        <view class=\"uni-list-cell uni-list-cell-pd\">\n          <view class=\"uni-list-cell-db\">定制确认文案</view>\n          <switch :checked=\"confirmTextSelect\" @change=\"confirmTextChange\" />\n        </view>\n        <view class=\"uni-list-cell uni-list-cell-pd\">\n          <view class=\"uni-list-cell-db\">是否显示输入框</view>\n          <switch :checked=\"editableSelect\" @change=\"editableChange\" />\n        </view>\n        <view class=\"uni-list-cell uni-list-cell-pd\">\n          <view class=\"uni-list-cell-db\">是否定制输入提示词</view>\n          <switch :checked=\"placeholderTextSelect\" @change=\"placeholderTextChange\" />\n        </view>\n      </view>\n      <view class=\"uni-padding-wrap uni-common-mt\">\n        <view class=\"uni-btn-v\">\n          <button class=\"uni-btn-v\" type=\"default\" @tap=\"modalTap\" id=\"btn-modal-show\">\n            modal测试\n          </button>\n        </view>\n        <text>{{ exeRet }}</text>\n      </view>\n    </view>\n  <!-- #ifdef APP -->\n  </scroll-view>\n  <!-- #endif -->\n</template>\n\n\n\n```\n>Script\n```uts\n\n  type ItemType = {\n    value : string,\n    name : string,\n  }\n  export default {\n    data() {\n      return {\n        title: 'modal',\n        showCancelSelect: false,\n        cancelTextSelect: false,\n        confirmTextSelect: false,\n        editableSelect: false,\n        placeholderTextSelect: false,\n        exeRet: \"\",\n        items: [{\n          value: '标题',\n          name: '有标题'\n        },\n        {\n          value: '',\n          name: '无标题'\n        },\n        {\n          value: '超长标题测试内容,测试超过显示最大范围之后的样式-超长标题测试内容,测试超过显示最大范围之后的样式',\n          name: '超长标题'\n        }\n        ] as ItemType[],\n        current: 0\n      }\n    },\n    onLoad() {\n      uni.showModal({\n        title: \"onLoad 调用示例,请手动取消\",\n        showCancel: false\n      })\n    },\n    methods: {\n      //自动化测试例专用\n      jest_getWindowInfo() : GetWindowInfoResult {\n        return uni.getWindowInfo();\n      },\n      showCancelChange: function (e : UniSwitchChangeEvent) {\n        this.showCancelSelect = e.detail.value\n      },\n      cancelTextChange: function (e : UniSwitchChangeEvent) {\n        this.cancelTextSelect = e.detail.value\n      },\n      confirmTextChange: function (e : UniSwitchChangeEvent) {\n        this.confirmTextSelect = e.detail.value\n      },\n      editableChange: function (e : UniSwitchChangeEvent) {\n        this.editableSelect = e.detail.value\n      },\n      placeholderTextChange: function (e : UniSwitchChangeEvent) {\n        this.placeholderTextSelect = e.detail.value\n      },\n      radioChange(e : UniRadioGroupChangeEvent) {\n        for (let i = 0; i < this.items.length; i++) {\n          if (this.items[i].value === e.detail.value) {\n            this.current = i;\n            break;\n          }\n        }\n      },\n      modalTap: function () {\n        let cancelTextVal : string\n        let cancelColorVal = ''\n        if (this.cancelTextSelect) {\n          cancelTextVal = \"修改后的取消文本\"\n          cancelColorVal = \"#ff00ff\"\n        } else {\n          cancelTextVal = \"取消\"\n        }\n\n        let confirmTextVal = '确定'\n        let confirmColorVal = ''\n        if (this.confirmTextSelect) {\n          confirmTextVal = \"修改后的确定文本\"\n          confirmColorVal = \"#00ffff\"\n        }\n\n        let placeholderTextVal = ''\n        let contentVal = \"弹窗内容,告知当前状态、信息和解决方法,描述文字尽量控制在三行内\"\n        if (this.placeholderTextSelect) {\n          placeholderTextVal = \"定制提示信息\"\n          contentVal = \"\"\n        }\n        uni.showModal({\n          title: this.items[this.current].value,\n          editable: this.editableSelect,\n          placeholderText: placeholderTextVal,\n          content: contentVal,\n          showCancel: this.showCancelSelect,\n          cancelText: cancelTextVal,\n          cancelColor: cancelColorVal,\n          confirmText: confirmTextVal,\n          confirmColor: confirmColorVal,\n          success: (res) => {\n            this.exeRet = JSON.stringify(res)\n          },\n          fail: (res) => {\n            this.exeRet = JSON.stringify(res)\n          }\n        })\n      }\n    }\n  }\n\n```\n:::"
  },
  "showLoading": {
    "name": "## uni.showLoading(options) @showloading",
    "description": "显示 loading 提示框, 需主动调用 uni.hideLoading 才能关闭提示框。",
    "compatibility": "### showLoading  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.9.0 | 4.11 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | [ShowLoadingOptions](#showloadingoptions-values) | 是 | - | - |  |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| title | string | 是 | - | - | 提示的内容,长度与 icon 取值有关。 |\n@| mask | boolean \\| null | 否 | - | - | 是否显示透明蒙层,防止触摸穿透,默认:false |\n@| success | (res: ShowLoadingSuccess) => void \\| null | 否 | - | - | uni.showLoading成功回调函数定义 |\n@| fail | (res: [IPromptError](#iprompterror-values)) => void \\| null | 否 | - | - | uni.showLoading失败回调函数定义 |\n@| complete | (res: any) => void \\| null | 否 | - | - | uni.showLoading完成回调函数定义 | \n\n##### IPromptError 的属性值 @iprompterror-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errCode | 1 \\| 1001 | 是 | - | - | 错误码<br/>- 1\t  撤销<br/>- 1001  请求参数非法 |\n| errSubject | string | 是 | - | - | 统一错误主题(模块)名称 |\n| data | any \\| null | 否 | - | - | 错误信息中包含的数据 |\n| cause | [Error](https://uniapp.dcloud.net.cn/tutorial/err-spec.html#unierror) \\| null | 否 | - | - | 源错误信息,可以包含多个错误,详见SourceError |\n| errMsg | string | 是 | - | - | - |\n",
    "returnValue": "",
    "tutorial": "\n### 参见\n\n- [参见uni-app相关文档](https://uniapp.dcloud.net.cn/api/ui/prompt.html#showloading)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=showLoading&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=showLoading&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=showLoading&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=showLoading&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=showLoading&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=showLoading)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=showLoading&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.ui.showLoading.showLoading)",
    "example": "### 示例 \n> [hello uni-app x](https://gitcode.net/dcloud/hello-uni-app-x/-/blob/dev/pages/API/show-loading/show-loading.uvue) \n ::: preview https://hellouniappx.dcloud.net.cn/web/#/pages/API/show-loading/show-loading\n>Template\n```vue\n<template>\n  <view>\n    <page-head :title=\"title\"></page-head>\n    <view class=\"uni-list\">\n      <view class=\"uni-list-cell uni-list-cell-pd\">\n        <view class=\"uni-list-cell-db\">是否显示透明蒙层-屏蔽点击事件</view>\n        <switch :checked=\"maskSelect\" @change=\"maskChange\" />\n      </view>\n      <view class=\"uni-padding-wrap\">\n        <view class=\"uni-title uni-common-mt\">\n          <text class=\"uni-title-text\"> 设置标题 </text>\n        </view>\n      </view>\n      <view class=\"uni-list uni-common-pl\">\n        <radio-group @change=\"radioChange\">\n          <radio class=\"uni-list-cell uni-list-cell-pd radio\" v-for=\"(item, index) in items\" :key=\"item.value\"\n            :class=\"index < items.length - 1 ? 'uni-list-cell-line' : ''\" :value=\"item.value\"\n            :checked=\"index === current\">\n            {{ item.name }}\n          </radio>\n        </radio-group>\n      </view>\n    </view>\n    <view class=\"uni-padding-wrap\">\n      <view class=\"uni-btn-v\">\n        <button class=\"uni-btn-v\" type=\"primary\" @click=\"showLoading\">显示 loading 提示框</button>\n        <button class=\"uni-btn-v\" @click=\"hideLoading\">隐藏 loading 提示框</button>\n        <text>为方便演示,loading弹出3秒后自动关闭</text>\n      </view>\n    </view>\n  </view>\n</template>\n\n\n```\n>Script\n```uts\n\n  type ItemType = {\n    value : string\n    name : string\n  }\n  export default {\n    data() {\n      return {\n        title: 'loading',\n        items: [\n          {\n            value: 'null',\n            name: '无标题',\n          },\n          {\n            value: '三秒后自动关闭',\n            name: '普通标题',\n          },\n          {\n            value: '超长文本内容,测试超出范围-超长文本内容,测试超出范围-三秒后自动关闭',\n            name: '长标题',\n          },\n        ] as ItemType[],\n        current: 0,\n        maskSelect: false,\n        titleSelect: \"null\"\n      }\n    },\n    onLoad(){\n      uni.showLoading({\n      \ttitle:'onLoad 调用示例,2秒后消失'\n      })\n      setTimeout(function() {\n        uni.hideLoading()\n      }, 2000);\n    },\n    methods: {\n      //自动化测试例专用\n      jest_getWindowInfo() : GetWindowInfoResult {\n        return uni.getWindowInfo();\n      },\n\n      radioChange(e : UniRadioGroupChangeEvent) {\n        const selected = this.items.find((item) : boolean => {\n          return item.value == e.detail.value\n        })\n        if (selected != null) {\n          this.titleSelect = selected.value\n        }\n      },\n      maskChange: function (e : UniSwitchChangeEvent) {\n        this.maskSelect = e.detail.value\n      },\n      showLoading: function () {\n\n        console.log(this.titleSelect)\n        if (this.titleSelect == \"null\") {\n          uni.showLoading({\n            title: \"\",\n            mask: this.maskSelect\n          });\n        } else {\n          uni.showLoading({\n            title: this.titleSelect,\n            mask: this.maskSelect\n          });\n        }\n        setTimeout(() => {\n          this.hideLoading();\n        }, 3000);\n      },\n      hideLoading: function () {\n        uni.hideLoading();\n      }\n    }\n  }\n\n```\n:::"
  },
  "hideLoading": {
    "name": "## uni.hideLoading() @hideloading",
    "description": "隐藏 loading 提示框。",
    "compatibility": "### hideLoading  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.9.0 | 4.11 |\n",
    "param": "",
    "returnValue": "",
    "tutorial": "\n### 参见\n\n- [参见uni-app相关文档](https://uniapp.dcloud.net.cn/api/ui/prompt.html#hideloading)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=hideLoading&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=hideLoading&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=hideLoading&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=hideLoading&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=hideLoading&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=hideLoading)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=hideLoading&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.ui.showLoading.hideLoading)"
  },
  "showToast": {
    "name": "## uni.showToast(options) @showtoast",
    "description": "显示消息提示框",
    "compatibility": "### showToast  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.9.0 | 4.11 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | [ShowToastOptions](#showtoastoptions-values) | 是 | - | - |  |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| title | string | 是 | - | - | 提示的内容,长度与 icon 取值有关。 |\n@| icon | \"success\" \\| \"error\" \\| \"fail\" \\| \"exception\" \\| \"loading\" \\| \"none\" | 否 | - | - | icon值说明 success: 显示成功图标,error: 显示错误图标; fail: 显示错误图标,此时title文本无长度显示; exception: 显示异常图标,此时title文本无长度显示; loading: 显示加载图标;none: 不显示图标。 |\n@| image | [string.ImageURIString](/uts/data-type.md#ide-string) \\| null | 否 | - | - | 自定义图标的本地路径(app端暂不支持gif) |\n@| mask | boolean \\| null | 否 | - | - | 是否显示透明蒙层,防止触摸穿透,默认:false |\n@| duration | number \\| null | 否 | - | - | 提示的延迟时间,单位毫秒,默认:1500 |\n@| position | \"top\" \\| \"center\" \\| \"bottom\" | 否 | - | - | position值说明(仅App生效) top: 居上显示; center: 居中显示;bottom: 居底显示 |\n@| success | (res: ShowToastSuccess) => void \\| null | 否 | - | - | uni.showToast成功回调函数定义 |\n@| fail | (res: [IPromptError](#iprompterror-values)) => void \\| null | 否 | - | - | uni.showToast失败回调函数定义 |\n@| complete | (res: any) => void \\| null | 否 | - | - | uni.showToast完成回调函数定义 | \n\n##### IPromptError 的属性值 @iprompterror-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errCode | 1 \\| 1001 | 是 | - | - | 错误码<br/>- 1\t  撤销<br/>- 1001  请求参数非法 |\n| errSubject | string | 是 | - | - | 统一错误主题(模块)名称 |\n| data | any \\| null | 否 | - | - | 错误信息中包含的数据 |\n| cause | [Error](https://uniapp.dcloud.net.cn/tutorial/err-spec.html#unierror) \\| null | 否 | - | - | 源错误信息,可以包含多个错误,详见SourceError |\n| errMsg | string | 是 | - | - | - |\n",
    "returnValue": "",
    "tutorial": "\n### 参见\n\n- [参见uni-app相关文档](https://uniapp.dcloud.net.cn/api/ui/prompt.html#showtoast)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=showToast&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=showToast&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=showToast&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=showToast&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=showToast&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=showToast)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=showToast&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.ui.showToast.showToast)",
    "example": "### 示例 \n> [hello uni-app x](https://gitcode.net/dcloud/hello-uni-app-x/-/blob/dev/pages/API/show-toast/show-toast.uvue) \n ::: preview https://hellouniappx.dcloud.net.cn/web/#/pages/API/show-toast/show-toast\n>Template\n```vue\n<template>\n  <view>\n    <page-head :title=\"title\"></page-head>\n    <view class=\"uni-padding-wrap\">\n      <view class=\"uni-btn-v\">\n        <button class=\"uni-btn-v\" type=\"default\" @tap=\"toast1Tap\" id=\"btn-toast-default\" >点击弹出默认toast</button>\n        <button class=\"uni-btn-v\" type=\"default\" @tap=\"toastTapIconError\" id=\"btn-toast-errorIcon\">点击弹出设置icon的toast</button>\n        <button class=\"uni-btn-v\" type=\"default\" @tap=\"toast2Tap\" id=\"btn-toast-duration\">点击弹出设置duration的toast</button>\n        <button class=\"uni-btn-v\" type=\"default\" @tap=\"toast3Tap\" id=\"btn-toast-loading\">点击弹出显示loading的toast</button>\n        <!-- #ifndef MP-ALIPAY -->\n        <button class=\"uni-btn-v\" type=\"default\" @tap=\"toast4Tap\">点击弹出显示自定义图片的toast</button>\n        <!-- #endif -->\n        <!-- #ifdef APP -->\n        <button class=\"uni-btn-v\" type=\"default\" @tap=\"toast5Tap\" id=\"btn-toast-postion-bottom\">点击显示无图标的居底toast</button>\n        <!-- #endif -->\n        <button class=\"uni-btn-v\" type=\"default\" @tap=\"hideToast\" id=\"btn-toast-hide\">点击隐藏toast</button>\n      </view>\n      <text>{{exeRet}}</text>\n    </view>\n  </view>\n</template>\n\n\n\n```\n>Script\n```uts\n\n  export default {\n    data() {\n      return {\n        title: 'toast',\n        exeRet: ''\n      }\n    },\n    onLoad() {\n      uni.showToast({\n        title: 'onLoad 调用示例,2秒后消失'\n      })\n      setTimeout(function () {\n        uni.hideToast()\n      }, 2000);\n    },\n    methods: {\n      //自动化测试例专用\n      jest_getWindowInfo() : GetWindowInfoResult {\n        return uni.getWindowInfo();\n      },\n      toast1Tap: function () {\n        uni.showToast({\n          title: \"默认\",\n          success: (res) => {\n            this.exeRet = \"success:\" + JSON.stringify(res)\n          },\n          fail: (res) => {\n            this.exeRet = \"fail:\" + JSON.stringify(res)\n          },\n        })\n      },\n      toastTapIconError: function () {\n        uni.showToast({\n          title: \"默认\",\n          icon: 'error',\n          success: (res) => {\n            this.exeRet = \"success:\" + JSON.stringify(res)\n          },\n          fail: (res) => {\n            this.exeRet = \"fail:\" + JSON.stringify(res)\n          },\n        })\n      },\n      toast2Tap: function () {\n        uni.showToast({\n          title: \"duration 3000\",\n          duration: 3000,\n          success: (res) => {\n            this.exeRet = \"success:\" + JSON.stringify(res)\n          },\n          fail: (res) => {\n            this.exeRet = \"fail:\" + JSON.stringify(res)\n          },\n        })\n      },\n      toast3Tap: function () {\n        uni.showToast({\n          title: \"loading\",\n          icon: \"loading\",\n          duration: 5000,\n          success: (res) => {\n            this.exeRet = \"success:\" + JSON.stringify(res)\n          },\n          fail: (res) => {\n            this.exeRet = \"fail:\" + JSON.stringify(res)\n          },\n        })\n      },\n      toast4Tap: function () {\n        uni.showToast({\n          title: \"logo\",\n          image: \"/static/uni.png\",\n          success: (res) => {\n            this.exeRet = \"success:\" + JSON.stringify(res)\n          },\n          fail: (res) => {\n            this.exeRet = \"fail:\" + JSON.stringify(res)\n          },\n        })\n      },\n      // #ifdef APP\n      toast5Tap: function () {\n        uni.showToast({\n          title: \"显示一段轻提示\",\n          position: 'bottom',\n          success: (res) => {\n            this.exeRet = \"success:\" + JSON.stringify(res)\n          },\n          fail: (res) => {\n            this.exeRet = \"fail:\" + JSON.stringify(res)\n          },\n        })\n      },\n      // #endif\n      hideToast: function () {\n        uni.hideToast()\n      }\n    }\n  }\n\n```\n:::"
  },
  "hideToast": {
    "name": "## uni.hideToast() @hidetoast",
    "description": "隐藏消息提示框。",
    "compatibility": "### hideToast  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.9.0 | 4.11 |\n",
    "param": "",
    "returnValue": "",
    "tutorial": "\n### 参见\n\n- [参见uni-app相关文档](https://uniapp.dcloud.net.cn/api/ui/prompt.html#hidetoast)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=hideToast&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=hideToast&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=hideToast&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=hideToast&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=hideToast&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=hideToast)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=hideToast&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.ui.showToast.hideToast)"
  },
  "loadFontFace": {
    "name": "## uni.loadFontFace(options) @loadfontface",
    "description": "动态加载网络字体<br/>",
    "compatibility": "### loadFontFace  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | √ | 4.10 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | [LoadFontFaceOptions](#loadfontfaceoptions-values) | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| global | boolean | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"√\",\"x\"]]}' /> | 是否全局生效。微信小程序 '2.10.0'起支持全局生效,需在 app.vue 中调用。 |\n@| family | string | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"√\",\"4.10\"]]}' /> | 定义的字体名称 |\n@| source | string | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"√\",\"4.10\"]]}' /> | 字体资源的地址, App-Android 平台不支持 woff、woff2 格式字体文件 |\n@| desc | **LoadFontFaceOptionDesc** | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"x\",\"4.10\"]]}' /> | 可选的字体描述符 |\n@@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@@| :- | :- | :- | :- |  :-: | :- |\n@@| style | string \\| null | 否 | - | - |  |\n@@| weight | string \\| null | 否 | - | - |  |\n@@| variant | string \\| null | 否 | - | - |  |\n@| success | (result: AsyncApiSuccessResult) => void | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"√\",\"4.10\"]]}' /> | 接口调用成功的回调函数 |\n@| fail | (error: [LoadFontFaceFail](#loadfontfacefail-values)) => void | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"√\",\"4.10\"]]}' /> | 接口调用失败的回调函数 |\n@| complete | (res: [AsyncApiResult](#asyncapiresult-values)) => void | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"√\",\"4.10\"]]}' /> | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n##### LoadFontFaceFail 的属性值 @loadfontfacefail-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errCode | 4 \\| 99 \\| 101 \\| 100001 \\| 100002 \\| 200001 \\| 300001 \\| 300002 | 是 | - | - | 错误码<br/>- 4: 框架内部异常<br/>- 99: page is not ready<br/>- 101: 参数错误<br/>- 100001: family is null<br/>- 100002: source is null<br/>- 200001: local font not found<br/>- 300001: same source task is loading<br/>- 300002: download fail |\n| errSubject | string | 是 | - | - | 统一错误主题(模块)名称 |\n| data | any \\| null | 否 | - | - | 错误信息中包含的数据 |\n| cause | [Error](https://uniapp.dcloud.net.cn/tutorial/err-spec.html#unierror) \\| null | 否 | - | - | 源错误信息,可以包含多个错误,详见SourceError |\n| errMsg | string | 是 | - | - | - |\n\n##### AsyncApiResult 的属性值 @asyncapiresult-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errMsg | string | 是 | - | - | - |\n",
    "returnValue": "### 返回值  兼容性 \n\n| 类型 | 必备 |\n| :- | :- |\n| Promise \\| null | 否 |\n \n",
    "tutorial": "\n### 参见\n\n- [参见uni-app x相关文档](https://doc.dcloud.net.cn/uni-app-x/api/load-font-face.html)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=loadFontFace&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=loadFontFace&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=loadFontFace&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=loadFontFace&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=loadFontFace&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=loadFontFace)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=loadFontFace&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.ui.loadFontFace)",
    "example": "### 示例 \n> [hello uni-app x](https://gitcode.net/dcloud/hello-uni-app-x/-/blob/dev/pages/API/load-font-face/load-font-face.uvue) \n ::: preview https://hellouniappx.dcloud.net.cn/web/#/pages/API/load-font-face/load-font-face\n>Template\n```vue\n<template>\n  <page-head title=\"loadFontFace\"></page-head>\n  <view class=\"uni-padding-wrap\">\n    <text class=\"font-size-20\">全局加载字体:</text>\n    <text class=\"font-size-20 line-height-40\" style=\"font-family: UniFontFamily\">font-family: uni.ttf</text>\n    <view style=\"flex-direction: row;\">\n      <text class=\"font-size-20\" style=\"font-family: UniFontFamily;\">{{\n        uniIcon1\n      }}</text>\n      <text style=\"margin-left:5px;margin-right: 20px;line-height:22px;\">\\ue100</text>\n      <text class=\"font-size-20\" style=\"font-family: UniFontFamily;\">{{\n        uniIcon2\n      }}</text>\n      <text style=\"margin-left:5px;line-height:22px;\">\\ue101</text>\n    </view>\n    <text class=\"uni-common-mt font-size-20\">非全局加载字体:</text>\n    <text class=\"font-size-20 line-height-40\" style=\"font-family: AlimamaDaoLiTiTTF\">font-family: 阿里妈妈刀隶体-ttf\n      (网络字体下载后生效)</text>\n    <text class=\"font-size-20 line-height-40\" style=\"font-family: AlimamaDaoLiTiOTF\">font-family:\n      阿里妈妈刀隶体-otf</text>\n    <text class=\"item\" style=\"font-family: AlimamaDaoLiTiWOFF\">font-family: 阿里妈妈刀隶体-woff</text>\n    <text class=\"item\" style=\"font-family: AlimamaDaoLiTiWOFF2\">font-family: 阿里妈妈刀隶体-woff2</text>\n    <button class=\"uni-btn\" @click=\"navigateToChild\">跳转子页面测试字体生效范围</button>\n  </view>\n</template>\n\n\n<style>\n  .font-size-20 {\n    font-size: 20px;\n  }\n\n  .line-height-40 {\n    line-height: 40px;\n  }\n</style>\n\n```\n>Script\n```uts\n\n  export default {\n    data() {\n      return {\n        uniIcon1: '\\ue100',\n        uniIcon2: '\\ue101',\n      }\n    },\n    onLoad() {\n      uni.loadFontFace({\n        global: true,\n        family: 'UniFontFamily',\n        source: \"url('/static/font/uni.ttf')\",\n        success() {\n          console.log('global loadFontFace uni.ttf success')\n        },\n        fail(error) {\n          console.warn('global loadFontFace uni.ttf fail', error.errMsg)\n        },\n      })\n      uni.loadFontFace({\n        family: 'AlimamaDaoLiTiTTF',\n        source:\n          \"url('https://qiniu-web-assets.dcloud.net.cn/uni-app-x/static/font/AlimamaDaoLiTi.ttf')\",\n        success() {\n          console.log('loadFontFace Remote AlimamaDaoLiTi.ttf success')\n        },\n        fail(error) {\n          console.warn('loadFontFace Remote AlimamaDaoLiTi.ttf fail', error.errMsg)\n        },\n      })\n      uni.loadFontFace({\n        family: 'AlimamaDaoLiTiOTF',\n        source: \"url('/static/font/AlimamaDaoLiTi.otf')\",\n        success() {\n          console.log('loadFontFace AlimamaDaoLiTi.otf success')\n        },\n        fail(error) {\n          console.warn('loadFontFace AlimamaDaoLiTi.otf fail', error.errMsg)\n        },\n      })\n      uni.loadFontFace({\n        family: 'AlimamaDaoLiTiWOFF',\n        source: \"url('/static/font/AlimamaDaoLiTi.woff')\",\n        success() {\n          console.log('loadFontFace AlimamaDaoLiTi.woff success')\n        },\n        fail(error) {\n          console.warn('loadFontFace AlimamaDaoLiTi.woff fail', error.errMsg)\n        },\n      })\n      uni.loadFontFace({\n        family: 'AlimamaDaoLiTiWOFF2',\n        source: \"url('/static/font/AlimamaDaoLiTi.woff2')\",\n        success() {\n          console.log('loadFontFace AlimamaDaoLiTi.woff2 success')\n        },\n        fail(error) {\n          console.warn('loadFontFace AlimamaDaoLiTi.woff2 fail', error.errMsg)\n        },\n      })\n    },\n    methods: {\n      navigateToChild() {\n        uni.navigateTo({\n          url: '/pages/API/load-font-face/load-font-face-child',\n        })\n      },\n    },\n  }\n\n```\n:::"
  },
  "rpx2px": {
    "name": "## uni.rpx2px(number) @rpx2px",
    "description": "将rpx单位值转换成px",
    "compatibility": "### rpx2px  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.02 | 4.02 | 4.11 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| number | number | 是 | - | - |  | \n",
    "returnValue": "### 返回值  兼容性 \n\n| 类型 |\n| :- |\n| number |\n \n",
    "tutorial": "\n### 参见\n\n- [参见uni-app x相关文档](https://doc.dcloud.net.cn/uni-app-x/api/rpx2px.html)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=rpx2px&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=rpx2px&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=rpx2px&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=rpx2px&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=rpx2px&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=rpx2px)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=rpx2px&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.ui.rpx2px)",
    "example": "### 示例 \n> [hello uni-app x](https://gitcode.net/dcloud/hello-uni-app-x/-/blob/dev/pages/API/rpx2px/rpx2px.uvue) \n ::: preview https://hellouniappx.dcloud.net.cn/web/#/pages/API/rpx2px/rpx2px\n>Template\n```vue\n<template>\n  <!-- #ifdef APP -->\n  <scroll-view class=\"page-scroll-view\">\n  <!-- #endif -->\n    <view class=\"page\">\n      <page-head :title=\"title\"></page-head>\n      <view>\n        <view class=\"item\">\n          <text class=\"item-k\">输入:</text>\n          <text class=\"item-v\">{{rpxValue}}rpx</text>\n        </view>\n        <view class=\"item\">\n          <text class=\"item-k\">返回:</text>\n          <text class=\"item-v\">{{pxValue}}px</text>\n        </view>\n      </view>\n      <view>\n        <button class=\"convert\" type=\"primary\" @click=\"rpx2px\">转换</button>\n      </view>\n    </view>\n  <!-- #ifdef APP -->\n  </scroll-view>\n  <!-- #endif -->\n</template>\n\n\n<style>\n  .page {\n    padding: 15px;\n  }\n\n  .item {\n    flex-direction: row;\n  }\n\n  .item-k {\n    width: 72px;\n    line-height: 2;\n  }\n\n  .item-v {\n    font-weight: bold;\n    line-height: 2;\n  }\n</style>\n\n```\n>Script\n```uts\n\n  export default {\n    data() {\n      return {\n        title: 'rpx2px',\n        rpxValue: 750,\n        pxValue: 0,\n        result: false\n      }\n    },\n    methods: {\n      rpx2px: function () {\n        this.pxValue = uni.rpx2px(this.rpxValue);\n\n        // 仅限自动化测试\n        const windowInfo = uni.getWindowInfo();\n        if (windowInfo.windowWidth == this.pxValue) {\n          this.result = true\n        }\n      }\n    }\n  }\n\n```\n:::"
  },
  "setAppTheme": {
    "name": "## uni.setAppTheme(options) @setapptheme",
    "description": "设置应用主题",
    "compatibility": "### setAppTheme  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| x | 4.18 | 4.18 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | [SetAppThemeOptions](#setappthemeoptions-values) | 是 | - | - |  |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| theme | \"light\" \\| \"dark\" \\| \"auto\" | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"x\",\"4.18\",\"4.18\"]]}' /> | 主题 |\n@| success | (result: [SetAppThemeSuccessResult](#setappthemesuccessresult-values)) => void | 否 | null | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"x\",\"4.18\",\"4.18\"]]}' /> | 接口调用成功的回调函数 |\n@| fail | (result: [IAppThemeFail](#iappthemefail-values)) => void | 否 | null | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"x\",\"4.18\",\"4.18\"]]}' /> | 接口调用失败的回调函数 |\n@| complete | (result: any) => void | 否 | null | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"x\",\"4.18\",\"4.18\"]]}' /> | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n##### SetAppThemeSuccessResult 的属性值 @setappthemesuccessresult-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| theme | string | 是 | - | - | - |\n\n##### IAppThemeFail 的属性值 @iappthemefail-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errCode | 702001 \\| 2002000 | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"x\",\"4.18\",\"4.18\"]]}' /> | 错误码<br/>- 702001  参数错误<br/>- 2002000  未知错误 |\n| errSubject | string | 是 | - | - | 统一错误主题(模块)名称 |\n| data | any \\| null | 否 | - | - | 错误信息中包含的数据 |\n| cause | [Error](https://uniapp.dcloud.net.cn/tutorial/err-spec.html#unierror) \\| null | 否 | - | - | 源错误信息,可以包含多个错误,详见SourceError |\n| errMsg | string | 是 | - | - | - |\n",
    "returnValue": "",
    "tutorial": "\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=setAppTheme&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=setAppTheme&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=setAppTheme&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=setAppTheme&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=setAppTheme&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=setAppTheme)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=setAppTheme&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.ui.themeChange.setAppTheme)"
  },
  "onOsThemeChange": {
    "name": "## uni.onOsThemeChange(callback) @onosthemechange",
    "description": "开启监听系统主题变化",
    "compatibility": "### onOsThemeChange  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| x | 4.18 | 4.18 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| callback | (res: [OsThemeChangeResult](#osthemechangeresult-values)) => void | 是 | - | - |  | \n\n#### OsThemeChangeResult 的属性值 @osthemechangeresult-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| osTheme | string | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"x\",\"4.18\",\"4.18\"]]}' /> | 系统主题 |\n",
    "returnValue": "### 返回值  兼容性 \n\n| 类型 |\n| :- |\n| number |\n \n",
    "tutorial": "\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=onOsThemeChange&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=onOsThemeChange&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=onOsThemeChange&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=onOsThemeChange&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=onOsThemeChange&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=onOsThemeChange)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=onOsThemeChange&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.ui.themeChange.onOsThemeChange)"
  },
  "offOsThemeChange": {
    "name": "## uni.offOsThemeChange(id) @offosthemechange",
    "description": "取消监听系统主题变化",
    "compatibility": "### offOsThemeChange  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| x | 4.18 | 4.18 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| id | number | 是 | - | - |  | \n",
    "returnValue": "",
    "tutorial": "\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=offOsThemeChange&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=offOsThemeChange&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=offOsThemeChange&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=offOsThemeChange&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=offOsThemeChange&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=offOsThemeChange)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=offOsThemeChange&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.ui.themeChange.offOsThemeChange)"
  },
  "onAppThemeChange": {
    "name": "## uni.onAppThemeChange(callback) @onappthemechange",
    "description": "开启监听应用主题变化",
    "compatibility": "### onAppThemeChange  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| x | 4.18 | 4.18 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| callback | (res: [AppThemeChangeResult](#appthemechangeresult-values)) => void | 是 | - | - |  | \n\n#### AppThemeChangeResult 的属性值 @appthemechangeresult-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| appTheme | string | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"x\",\"4.18\",\"4.18\"]]}' /> | 应用主题 |\n",
    "returnValue": "### 返回值  兼容性 \n\n| 类型 |\n| :- |\n| number |\n \n",
    "tutorial": "\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=onAppThemeChange&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=onAppThemeChange&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=onAppThemeChange&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=onAppThemeChange&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=onAppThemeChange&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=onAppThemeChange)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=onAppThemeChange&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.ui.themeChange.onAppThemeChange)"
  },
  "offAppThemeChange": {
    "name": "## uni.offAppThemeChange(id) @offappthemechange",
    "description": "取消监听应用主题变化",
    "compatibility": "### offAppThemeChange  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| x | 4.18 | 4.18 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| id | number | 是 | - | - |  | \n",
    "returnValue": "",
    "tutorial": "\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=offAppThemeChange&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=offAppThemeChange&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=offAppThemeChange&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=offAppThemeChange&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=offAppThemeChange&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=offAppThemeChange)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=offAppThemeChange&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.ui.themeChange.offAppThemeChange)"
  },
  "themeChange": {
    "example": "## 示例 \n> [hello uni-app x](https://gitcode.net/dcloud/hello-uni-app-x/-/blob/dev/pages/API/theme-change/theme-change.uvue) \n >\n> 该 API 不支持 Web,请运行 hello uni-app x 到 App 平台体验 \n```uvue\n<template>\r\n  <view class=\"uni-padding-wrap\">\r\n    <view class=\"uni-common-mt item-box\">\r\n      <text>osTheme:</text>\r\n      <text id=\"theme\">{{ osTheme }}</text>\r\n    </view>\n    <view class=\"uni-common-mt item-box\">\n      <text>应用当前主题:</text>\n      <text id=\"theme\">{{ appTheme }}</text>\n    </view>\n\n    <view>\n      <view class=\"uni-title uni-common-mt\">\n        <text class=\"uni-title-text\"> 修改appTheme主题(此处仅为演示API,本应用并未完整适配暗黑模式) </text>\n      </view>\n    </view>\n    <view class=\"uni-list uni-common-pl\">\n      <radio-group @change=\"radioChange\" class=\"radio-group\">\n        <radio class=\"uni-list-cell uni-list-cell-pd radio\" v-for=\"(item, index) in items\" :key=\"item\"\n          :class=\"index < items.length - 1 ? 'uni-list-cell-line' : ''\" :value=\"item\"\n          :checked=\"index === current\">\n          {{ item }}\n        </radio>\n      </radio-group>\n    </view>\n\r\n  </view>\r\n</template>\r\n\r\n<script>\n  export default {\n    data() {\n      return {\n        osThemeChangeId: 0,\n        appThemeChangeId: 0,\n        osTheme: \"light\" as string,\n        appTheme: \"light\" as string,\n        originalTheme: \"light\" as string,\n        current: 0,\n        items: [\n          \"light\",\n          \"dark\",\n          \"auto\"\n        ] as string[]\n      }\n    },\n    methods: {\n      bindOsThemeChange(): number {\n        //注册osTheme变化监听\n        return uni.onOsThemeChange((res: OsThemeChangeResult)=> {\n          this.osTheme = res.osTheme\n        })\n      },\n      bindAppThemeChange(): number {\n        //注册appTheme变化监听\n        return uni.onAppThemeChange((res: AppThemeChangeResult) => {\n          this.appTheme = res.appTheme\n        })\n      },\n      radioChange(e : UniRadioGroupChangeEvent) {\n        const theme = e.detail.value\n        this.setAppTheme(theme)\n        uni.showToast({\n          icon: 'none',\n          title: '当前选中:'+theme,\n        })\n      },\n      setAppTheme(value: string) {\n        uni.setAppTheme({\n          theme: value,\n          success: function() {\n            console.log(\"设置appTheme为\", value, \"成功\")\n          },\n          fail: function(e: IAppThemeFail) {\n            console.log(\"设置appTheme为\", value, \"失败,原因:\", e.errMsg)\n          }\n        })\n      }\n    },\n    onReady() {\n      uni.getSystemInfo({\n        success: (res:GetSystemInfoResult) => {\n          this.osTheme = res.osTheme!\n          this.originalTheme = res.appTheme!\n          this.appTheme = res.appTheme == \"auto\" ? res.osTheme! : res.appTheme!\n          this.current = this.items.indexOf(res.appTheme!)\n        }\n      })\n      this.osThemeChangeId = this.bindOsThemeChange()\n      this.appThemeChangeId = this.bindAppThemeChange()\n    },\n    onUnload() {\n      //注销监听\n      uni.offAppThemeChange(this.appThemeChangeId)\n      uni.offOsThemeChange(this.osThemeChangeId)\n      uni.showToast({\n        \"position\":\"bottom\",\n        \"title\":\"已停止监听主题切换\"\n      })\n    }\n  }\r\n</script>\r\n\r\n<style>\r\n  .item-box {\r\n    display: flex;\r\n    flex-direction: row;\r\n    justify-content: space-between;\r\n  }\n  .uni-list-cell {\n    justify-content: flex-start;\n  }\r\n</style>\n\n```"
  },
  "getLocale": {
    "name": "## uni.getLocale() @getlocale",
    "description": "获取当前设置的语言<br/>",
    "compatibility": "### getLocale  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | x | x |\n",
    "param": "",
    "returnValue": "### 返回值  兼容性 \n\n| 类型 |\n| :- |\n| string |\n \n",
    "tutorial": "\n### 参见\n - [参见uni-app相关文档](https://uniapp.dcloud.io/api/ui/locale.html#getlocale)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=getLocale&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=getLocale&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=getLocale&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=getLocale&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=getLocale&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=getLocale)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=getLocale&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.ui.locale.getLocale)"
  },
  "setLocale": {
    "name": "## uni.setLocale(locale) @setlocale",
    "description": "设置当前语言<br/>",
    "compatibility": "### setLocale  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | x | x |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| locale | string | 是 | - | - | - | \n",
    "returnValue": "",
    "tutorial": "\n### 参见\n - [参见uni-app相关文档](https://uniapp.dcloud.io/api/ui/locale.html#setlocale)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=setLocale&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=setLocale&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=setLocale&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=setLocale&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=setLocale&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=setLocale)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=setLocale&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.ui.locale.setLocale)"
  },
  "onLocaleChange": {
    "name": "## uni.onLocaleChange(callback) @onlocalechange",
    "description": "设置当前语言<br/>",
    "compatibility": "### onLocaleChange  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | x | x |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| callback | (result: [OnLocaleChangeCallbackResult](#onlocalechangecallbackresult-values)) => void | 是 | - | - | - | \n\n#### OnLocaleChangeCallbackResult 的属性值 @onlocalechangecallbackresult-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| locale | string \\| null | 否 | - | - | 当前语言 |\n",
    "returnValue": "",
    "tutorial": "\n### 参见\n - [参见uni-app相关文档](https://uniapp.dcloud.io/api/ui/locale.html#onlocalechange)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=onLocaleChange&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=onLocaleChange&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=onLocaleChange&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=onLocaleChange&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=onLocaleChange&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=onLocaleChange)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=onLocaleChange&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.ui.locale.onLocaleChange)"
  },
  "request": {
    "name": "## uni.request(param) @request",
    "description": "发起网络请求。",
    "compatibility": "### request  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.9 | 4.11 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| param | [RequestOptions\\<T>](#requestoptions-values) | 是 | - | - | 网络请求参数 |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| url | string | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 开发者服务器接口地址<br/> |\n@| data | any \\| null | 否 | null | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 请求的参数 UTSJSONObject\\|string类型 |\n@| header | [UTSJSONObject](/uts/buildin-object-api/utsjsonobject.md) \\| null | 否 | null | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 设置请求的 header,header 中不能设置 Referer |\n@| method | \"GET\" \\| \"POST\" \\| \"PUT\" \\| \"PATCH\" \\| \"DELETE\" \\| \"HEAD\" \\| \"OPTIONS\" | 否 | \"GET\" | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 请求方法<br/>- GET  GET方法请求一个指定资源的表示形式,使用 GET 的请求应该只被用于获取数据。<br/>- POST  POST方法用于将实体提交到指定的资源,通常导致在服务器上的状态变化或副作用。<br/>- PUT  PUT方法用有效载荷请求替换目标资源的所有当前表示。<br/>- PATCH  PATCH方法用于对资源应用部分修改。<br/>- DELETE  DELETE方法删除指定的资源。<br/>- HEAD  HEAD方法请求一个与GET请求的响应相同的响应,但没有响应体。 <br/>- OPTIONS  OPTIONS 方法用于描述目标资源的通信选项。 |\n@| timeout | number \\| null | 否 | 60000 | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"-\",\"3.9\",\"4.11\"]]}' /> | 超时时间,单位 ms |\n@| withCredentials | boolean \\| null | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"x\",\"x\"]]}' /> | 跨域请求时是否携带凭证(cookies)<br/> |\n@| success | (option: [RequestSuccess\\<T>](#requestsuccess-values)) => void \\| null | 否 | null | - | 网络请求成功回调。 |\n@| fail | (option: [RequestFail](#requestfail-values)) => void \\| null | 否 | null | - | 网络请求失败回调。 |\n@| complete | (option: any) => void \\| null | 否 | null | - | 网络请求完成回调,成功或者失败都会调用。 | \n\n##### RequestSuccess\\<T> 的属性值 @requestsuccess-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| data | T \\| null | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 开发者服务器返回的数据 |\n| statusCode | number | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 开发者服务器返回的 HTTP 状态码 |\n| header | any | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 开发者服务器返回的 HTTP Response Header |\n| cookies | Array\\<string\\> | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"x\",\"3.9\",\"4.11\"]]}' /> | 开发者服务器返回的 cookies,格式为字符串数组 |\n\n##### RequestFail 的属性值 @requestfail-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errCode | 5 \\| 1000 \\| 100001 \\| 100002 \\| 600003 \\| 600009 \\| 602001 | 是 | - | - | 错误码<br/>- 5 接口超时<br/>- 1000 服务端系统错误<br/>- 100001 json数据解析错误<br/>- 100002 错误信息json解析失败<br/>- 600003 网络中断<br/>- 600009 URL格式不合法<br/>- 602001 request系统错误 |\n| errSubject | string | 是 | - | - | 统一错误主题(模块)名称 |\n| data | any \\| null | 否 | - | - | 错误信息中包含的数据 |\n| cause | [Error](https://uniapp.dcloud.net.cn/tutorial/err-spec.html#unierror) \\| null | 否 | - | - | 源错误信息,可以包含多个错误,详见SourceError |\n| errMsg | string | 是 | - | - | - |\n",
    "returnValue": "### 返回值  兼容性 \n\n| 类型 |\n| :- |\n| [RequestTask](#requesttask-values) |\n\n#### RequestTask 的方法 @requesttask-values \n\n#### abort() @abort\n中断网络请求。\n##### abort  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.9 | 4.11 |\n\n\n \n",
    "tutorial": "\n### 参见\n\n- [参见uni-app相关文档](https://uniapp.dcloud.net.cn/api/request/request.html)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=request&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=request&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=request&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=request&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=request&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=request)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=request&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.network.request)",
    "example": "### 示例 \n> [hello uni-app x](https://gitcode.net/dcloud/hello-uni-app-x/-/blob/dev/pages/API/request/request.uvue) \n ::: preview https://hellouniappx.dcloud.net.cn/web/#/pages/API/request/request\n>Template\n```vue\n<template>\r\n  <view style=\"flex: 1;\">\r\n    <view class=\"uni-padding-wrap uni-common-mt\">\r\n      <view class=\"uni-common-mt\" style=\"border-width: 2px;border-style: solid; border-radius: 4px;\">\r\n        <textarea :value=\"res\" class=\"uni-textarea\" style=\"width: 100%;\"></textarea>\r\n      </view>\r\n      <view>\r\n        <text>地址 : {{ host + url}}</text>\r\n        <text>请求方式 : {{method}}</text>\r\n      </view>\r\n      <view class=\"uni-btn-v uni-common-mt\">\r\n        <button type=\"primary\" @click=\"sendRequest\">发起请求</button>\r\n      </view>\r\n    </view>\r\n    <scroll-view style=\"flex: 1;\" show-scrollbar=\"true\">\r\n      <view style=\"padding: 20px;\">\r\n        <text>设置请求方式</text>\r\n        <view class=\"uni-common-pb\"></view>\r\n        <view style=\"flex-direction: row;flex-wrap: wrap;\">\r\n          <button style=\"padding: 5px; margin-right: 10px;\" type=\"primary\" size=\"mini\"\r\n            @click=\"changeMethod('GET')\">GET</button>\r\n          <button style=\"padding: 5px; margin-right: 10px; \" type=\"primary\" size=\"mini\"\r\n            @click=\"changeMethod('POST')\">POST</button>\r\n          <button style=\"padding: 5px; margin-right: 10px; \" type=\"primary\" size=\"mini\"\r\n            @click=\"changeMethod('PUT')\">PUT</button>\r\n          <button style=\"padding: 5px; margin-right: 10px;\" type=\"primary\" size=\"mini\"\r\n            @click=\"changeMethod('DELETE')\">DELETE</button>\r\n          <button style=\"padding: 5px; margin-right: 10px; \" type=\"primary\" size=\"mini\"\r\n            @click=\"changeMethod('PATCH')\">PATCH</button>\r\n          <button style=\"padding: 5px;margin-right: 10px;\" type=\"primary\" size=\"mini\"\r\n            @click=\"changeMethod('OPTIONS')\">OPTIONS</button>\r\n          <button style=\"padding: 5px;\" type=\"primary\" size=\"mini\" @click=\"changeMethod('HEAD')\">HEAD</button>\r\n        </view>\r\n      </view>\r\n      <view style=\"padding: 20px;\">\r\n        <text>请求返回错误码的接口(默认为GET)</text>\r\n        <view class=\"uni-common-pb\"></view>\r\n        <view style=\"flex-direction: row;flex-wrap: wrap;\">\r\n          <button style=\"padding: 5px;\" type=\"primary\" size=\"mini\" v-for=\"(item, index) in errorCodeUrls\" :key=\"index\"\r\n            @click=\"changeUrl(item)\">{{item}}</button>\r\n        </view>\r\n      </view>\r\n      <view style=\"padding: 20px;\">\r\n        <text>请求不同header的接口(默认为GET)</text>\r\n        <view class=\"uni-common-pb\"></view>\r\n        <view style=\"flex-direction: row;flex-wrap: wrap;\">\r\n          <button style=\"padding: 5px;\" type=\"primary\" size=\"mini\" v-for=\"(item, index) in headerUrls\" :key=\"index\"\r\n            @click=\"changeUrl(item)\">{{item}}</button>\r\n        </view>\r\n      </view>\r\n      <view style=\"padding: 20px;\">\r\n        <text>请求不同content-type的接口(默认为GET)</text>\r\n        <view class=\"uni-common-pb\"></view>\r\n        <view style=\"flex-direction: row;flex-wrap: wrap;\">\r\n          <button style=\"padding: 5px;\" type=\"primary\" size=\"mini\" v-for=\"(item, index) in contentTypeUrls\" :key=\"index\"\r\n            @click=\"changeUrl(item)\">{{item}}</button>\r\n        </view>\r\n      </view>\r\n\r\n      <view style=\"padding: 20px;\">\r\n        <text>POST请求(有body)</text>\r\n        <view class=\"uni-common-pb\"></view>\r\n        <view style=\"flex-direction: row;flex-wrap: wrap;\">\r\n          <button style=\"padding: 5px;\" type=\"primary\" size=\"mini\" v-for=\"(item, index) in postUrls\" :key=\"index\"\r\n            @click=\"changeUrlFromPost(item)\">{{item}}</button>\r\n        </view>\r\n      </view>\r\n    </scroll-view>\r\n  </view>\r\n</template>\r\n\r\n\n```\n>Script\n```uts\n\n  // #ifdef APP\n  import {\n    testInovkeRequest,\n    CommonOptions\n  } from '@/uni_modules/test-invoke-network-api'\n  // #endif\n\n  class GETDataType {\n    data: UTSJSONObject | null = null\n  }\n\r\n  const duration = 2000\r\n  const methodMap = {\r\n    \"GET\": \"/api/http/method/get\",\r\n    \"POST\": \"/api/http/method/post\",\r\n    \"PUT\": \"/api/http/method/put\",\r\n    \"DELETE\": \"/api/http/method/delete\",\r\n    \"PATCH\": \"/api/http/method/patch\",\r\n    \"OPTIONS\": \"/api/http/method/options\",\r\n    \"HEAD\": \"/api/http/method/head\"\r\n  }\r\n\r\n\r\n  export default {\r\n    data() {\r\n      return {\r\n        title: 'request',\r\n        res: '',\r\n        task: null as RequestTask | null,\r\n        host: \"https://request.dcloud.net.cn\",\r\n        url: \"/api/http/method/get\",\r\n        method: \"GET\" as RequestMethod | null,\r\n        data: null as any | null,\r\n        header: null as UTSJSONObject | null,\r\n        errorCodeUrls: [\r\n          \"/api/http/statusCode/200\",\r\n          \"/api/http/statusCode/204\",\r\n          \"/api/http/statusCode/301\",\r\n          \"/api/http/statusCode/302\",\r\n          \"/api/http/statusCode/307\",\r\n          \"/api/http/statusCode/400\",\r\n          \"/api/http/statusCode/401\",\r\n          \"/api/http/statusCode/403\",\r\n          \"/api/http/statusCode/404\",\r\n          \"/api/http/statusCode/405\",\r\n          \"/api/http/statusCode/500\",\r\n          \"/api/http/statusCode/502\",\r\n          \"/api/http/statusCode/503\",\r\n          \"/api/http/statusCode/504\",\r\n        ],\r\n        headerUrls: [\r\n          \"/api/http/header/ua\",\r\n          \"/api/http/header/referer\",\r\n          \"/api/http/header/requestCookie\",\r\n          \"/api/http/header/setCookie\",\r\n          \"/api/http/header/deleteCookie\"\r\n        ],\r\n        contentTypeUrls: [\r\n          \"/api/http/contentType/text/plain\",\r\n          \"/api/http/contentType/text/html\",\r\n          \"/api/http/contentType/text/xml\",\r\n          \"/api/http/contentType/image/gif\",\r\n          \"/api/http/contentType/image/jpeg\",\r\n          \"/api/http/contentType/image/png\",\r\n          \"/api/http/contentType/application/json\",\r\n          \"/api/http/contentType/application/octetStream\",\r\n        ],\r\n        postUrls: [\r\n          \"/api/http/contentType/json\",\r\n          \"/api/http/contentType/xWwwFormUrlencoded\",\r\n        ],\r\n        //自动化测试例专用\r\n        jest_result: false,\n        jest_result_data: \"\"\r\n      }\r\n    },\r\n    onLoad() {\r\n    },\r\n    onUnload() {\r\n      uni.hideLoading();\r\n      this.task?.abort();\r\n    },\r\n    methods: {\r\n      changeMethod(e : RequestMethod) {\r\n        this.method = e;\r\n        this.url = methodMap[e] as string;\r\n        this.data = null;\r\n        this.header = null;\r\n      },\r\n      changeUrl(e : string) {\r\n        this.method = \"GET\";\r\n        this.url = e;\r\n        this.data = null;\r\n        this.header = null;\r\n      },\r\n      changeUrlFromPost(e : string) {\r\n        this.method = \"POST\";\r\n        this.url = e;\r\n        switch (e) {\r\n          case \"/api/http/contentType/json\":\r\n            this.header = {\r\n              \"Content-Type\": \"application/json\"\r\n            };\r\n            this.data = {\r\n              \"hello\": \"world\"\r\n            };\r\n            break;\r\n          case \"/api/http/contentType/xWwwFormUrlencoded\":\r\n            this.header = {\r\n              \"Content-Type\": \"application/x-www-form-urlencoded\"\r\n            };\r\n            this.data = \"hello=world\";\r\n            break;\r\n        }\r\n      },\r\n      sendRequest() {\r\n        uni.showLoading({\r\n          title: \"请求中...\"\r\n        })\r\n        this.task = uni.request({\r\n          url: this.host + this.url,\r\n          // dataType: \"json\",\r\n          // responseType: \"json\",\r\n          method: this.method,\r\n          data: this.data,\r\n          header: this.header,\r\n          timeout: 6000,\r\n          sslVerify: false,\r\n          withCredentials: false,\r\n          firstIpv4: false,\r\n          success: (res) => {\r\n            console.log('request success', JSON.stringify(res.data))\r\n            console.log('request success header is :', JSON.stringify(res.header))\r\n            uni.showToast({\r\n              title: '请求成功',\r\n              icon: 'success',\r\n              mask: true,\r\n              duration: duration\r\n            });\r\n            this.res = '请求结果 : ' + JSON.stringify(res);\r\n          },\r\n          fail: (err) => {\r\n            console.log('request fail', err);\r\n            uni.showModal({\r\n              content: err.errMsg,\r\n              showCancel: false\r\n            });\r\n          },\r\n          complete: () => {\r\n            uni.hideLoading()\r\n          },\r\n        });\r\n      },\r\n      //自动化测试例专用\r\n      jest_request() {\r\n        uni.request({\r\n          url: this.host + this.url,\r\n          // dataType: \"json\",\r\n          // responseType: \"json\",\r\n          method: this.method,\r\n          data: this.data,\r\n          header: this.header,\r\n          timeout: 6000,\r\n          sslVerify: false,\r\n          withCredentials: false,\r\n          firstIpv4: false,\r\n          success: () => {\r\n            this.jest_result = true;\r\n          },\r\n          fail: () => {\r\n            this.jest_result = false;\r\n          },\r\n        });\r\n      },\r\n      jest_set_cookie() {\r\n        uni.request({\r\n          url: this.host + \"/api/http/header/setCookie\",\r\n          method: \"GET\",\r\n          timeout: 6000,\r\n          sslVerify: false,\r\n          withCredentials: false,\r\n          firstIpv4: false,\r\n          success: () => {\r\n            this.jest_cookie_request(true)\r\n          },\r\n          fail: () => {\r\n            this.jest_result = false;\r\n          },\r\n        });\r\n      },\n      jest_set_cookie_expires(){\n        uni.request({\n          url: this.host + \"/api/http/header/setCookie?expires=5\",\n          method: \"GET\",\n          timeout: 6000,\n          sslVerify: false,\n          withCredentials: false,\n          firstIpv4: false,\n          success: () => {\n            this.jest_cookie_request(true)\n          },\n          fail: () => {\n            this.jest_result = false;\n          },\n        });\n      },\r\n      jest_delete_cookie() {\r\n        uni.request({\r\n          url: this.host + \"/api/http/header/deleteCookie\",\r\n          method: \"GET\",\r\n          timeout: 6000,\r\n          sslVerify: false,\r\n          withCredentials: false,\r\n          firstIpv4: false,\r\n          success: () => {\r\n            this.jest_cookie_request(false)\r\n          },\r\n          fail: () => {\r\n            this.jest_result = false;\r\n          },\r\n        });\r\n      },\r\n      jest_cookie_request(needCookie : boolean) {\r\n        uni.request({\r\n          url: this.host + \"/api/http/header/requestCookie\",\r\n          method: \"GET\",\r\n          timeout: 6000,\r\n          sslVerify: false,\r\n          withCredentials: false,\r\n          firstIpv4: false,\r\n          success: (res) => {\n            const requestCookie = (res.data as UTSJSONObject).getJSON(\"data\")?.getAny(\"requestCookie\")\r\n            console.log(\"requestCookie \", requestCookie);\n            this.jest_result_data = JSON.stringify(requestCookie)\r\n            if (requestCookie instanceof Array) {\r\n              this.jest_result = needCookie ? requestCookie.length > 0 : requestCookie.length == 0\r\n            } else {\r\n              this.jest_result = needCookie ? (requestCookie as UTSJSONObject).toMap().size > 0 : (requestCookie as UTSJSONObject).toMap().size == 0\r\n            }\r\n          },\r\n          fail: () => {\r\n            this.jest_result = false;\r\n          },\r\n        });\r\n      },\r\n      jest_timeout_null() {\r\n        uni.request({\r\n          url: this.host + (methodMap['GET'] as string),\r\n          method: \"GET\",\r\n          timeout: null,\r\n          sslVerify: false,\r\n          withCredentials: false,\r\n          firstIpv4: false,\r\n          success: () => {\n            this.jest_result = true;\r\n          },\r\n          fail: () => {\r\n            this.jest_result = false;\r\n          },\r\n        });\r\n      },\n      jest_get_with_data() {\n        uni.request({\n          url: \"https://unidemo.dcloud.net.cn/api/banner/36kr\",\n          method: \"GET\",\n          data:{\n            column: 'id,post_id,title,author_name,cover,published_at' //需要的字段名\n          },\n          timeout: 6000,\n          sslVerify: false,\n          withCredentials: false,\n          firstIpv4: false,\n          success: () => {\n            this.jest_result = true;\n          },\n          fail: () => {\n            this.jest_result = false;\n          },\n        });\n      },\n      jest_get_with_generics() {\n        uni.request<GETDataType>({\n          url: this.host + (methodMap['GET'] as string),\n          method: \"GET\",\n          timeout: null,\n          sslVerify: false,\n          withCredentials: false,\n          firstIpv4: false,\n          success: (res: RequestSuccess<GETDataType>) => {\n            console.log(\"success :\", res.data?.data);\n            this.jest_result = true;\n          },\n          fail: () => {\n            this.jest_result = false;\n          },\n        });\n      },\n      jest_get_array() {\n        uni.request<UTSJSONObject[]>({\n          url: 'https://unidemo.dcloud.net.cn/api/news?column=title,author_name,cover,published_at',\n          method: \"GET\",\n          success: (res : RequestSuccess<UTSJSONObject[]>) => {\n            console.log(res)\n            if (res.statusCode == 200 && Array.isArray(res.data)) {\n              this.jest_result = true\n            } else {\n              this.jest_result = false\n            }\n          },\n          fail: () => {\n            this.jest_result = false\n          }\n        });\n      },\n      jest_uts_module_invoked(){\n        // #ifdef APP\n        testInovkeRequest({\n          success:(res: any)=>{\n            console.log(\"success :\", res);\n            this.jest_result = true\n          },\n          fail:(err: any)=>{\n            console.log(\"fail :\", err);\n            this.jest_result = false\n          }\n        } as CommonOptions)\n        // #endif\n      }\r\n    }\r\n  }\r\n\n```\n:::"
  },
  "uploadFile": {
    "name": "## uni.uploadFile(options) @uploadfile",
    "description": "将本地资源上传到开发者服务器。",
    "compatibility": "### uploadFile  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.9 | 4.11 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | [UploadFileOptions](#uploadfileoptions-values) | 是 | - | - |  |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| url | string | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 开发者服务器 url |\n@| filePath | string \\| null | 否 | null | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 要上传文件资源的路径, 支持uni.env |\n@| name | string \\| null | 否 | null | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 文件对应的 key , 开发者在服务器端通过这个 key 可以获取到文件二进制内容 |\n@| files | Array\\<**UploadFileOptionFiles**\\> \\| null | 否 | null | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 需要上传的文件列表。 |\n@@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@@| :- | :- | :- | :- |  :-: | :- |\n@@| name | string \\| null | 否 | \"file\" | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | multipart 提交时,表单的项目名,默认为 file,如果 name 不填或填的值相同,可能导致服务端读取文件时只能读取到一个文件。 |\n@@| uri | string | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"x\",\"3.9\",\"4.11\"]]}' /> | 要上传文件资源的路径 |\n@@| file | any \\| null | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 要上传的文件对象 |\n@| header | [UTSJSONObject](/uts/buildin-object-api/utsjsonobject.md) \\| null | 否 | null | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | HTTP 请求 Header, header 中不能设置 Referer |\n@| formData | [UTSJSONObject](/uts/buildin-object-api/utsjsonobject.md) \\| null | 否 | null | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | HTTP 请求中其他额外的 form data |\n@| timeout | number \\| null | 否 | 120000 | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 超时时间,单位 ms |\n@| success | (result: [UploadFileSuccess](#uploadfilesuccess-values)) => void \\| null | 否 | null | - | 成功返回的回调函数 |\n@| fail | (result: [UploadFileFail](#uploadfilefail-values)) => void \\| null | 否 | null | - | 失败的回调函数 |\n@| complete | (result: any) => void \\| null | 否 | null | - | 结束的回调函数(调用成功、失败都会执行) | \n\n##### UploadFileSuccess 的属性值 @uploadfilesuccess-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| data | string | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 开发者服务器返回的数据 |\n| statusCode | number | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 开发者服务器返回的 HTTP 状态码 |\n\n##### UploadFileFail 的属性值 @uploadfilefail-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errCode | 5 \\| 1000 \\| 100001 \\| 100002 \\| 600003 \\| 600009 \\| 602001 | 是 | - | - | 错误码<br/>- 5 接口超时<br/>- 1000 服务端系统错误<br/>- 100001 json数据解析错误<br/>- 100002 错误信息json解析失败<br/>- 600003 网络中断<br/>- 600009 URL格式不合法<br/>- 602001 request系统错误 |\n| errSubject | string | 是 | - | - | 统一错误主题(模块)名称 |\n| data | any \\| null | 否 | - | - | 错误信息中包含的数据 |\n| cause | [Error](https://uniapp.dcloud.net.cn/tutorial/err-spec.html#unierror) \\| null | 否 | - | - | 源错误信息,可以包含多个错误,详见SourceError |\n| errMsg | string | 是 | - | - | - |\n",
    "returnValue": "### 返回值  兼容性 \n\n| 类型 |\n| :- |\n| [UploadTask](#uploadtask-values) |\n\n#### UploadTask 的方法 @uploadtask-values \n\n#### abort() @abort\n中断上传任务。\n##### abort  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.9 | 4.11 |\n\n\n\n#### onProgressUpdate(callback) @onprogressupdate\n监听上传进度变化。\n##### onProgressUpdate  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.9 | 4.11 |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| callback | (result: [OnProgressUpdateResult](#onprogressupdateresult-values)) => void | 是 | - | - |  | \n\n###### OnProgressUpdateResult 的属性值 @onprogressupdateresult-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| progress | number | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 上传进度百分比 |\n| totalBytesSent | number | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 已经上传的数据长度,单位 Bytes |\n| totalBytesExpectedToSend | number | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 预期需要上传的数据总长度,单位 Bytes |\n\n \n",
    "tutorial": "\n### 参见\n\n- [参见uni-app相关文档](https://uniapp.dcloud.net.cn/api/request/network-file.html#uploadfile)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=uploadFile&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=uploadFile&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=uploadFile&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=uploadFile&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=uploadFile&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=uploadFile)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=uploadFile&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.network.uploadFile)",
    "example": "### 示例 \n> [hello uni-app x](https://gitcode.net/dcloud/hello-uni-app-x/-/blob/dev/pages/API/upload-file/upload-file.uvue) \n ::: preview https://hellouniappx.dcloud.net.cn/web/#/pages/API/upload-file/upload-file\n>Template\n```vue\n<template>\r\n  <!-- #ifdef APP -->\r\n  <scroll-view class=\"page-scroll-view\">\r\n  <!-- #endif -->\r\n    <view>\r\n      <page-head :title=\"title\"></page-head>\r\n      <view class=\"uni-padding-wrap uni-common-mt\">\r\n        <view class=\"demo\">\r\n          <image v-if=\"imageSrc\" :src=\"imageSrc\" class=\"image\" mode=\"widthFix\"></image>\r\n          <text v-else class=\"uni-hello-addfile\" @click=\"chooseImage\">+ 选择图片</text>\r\n        </view>\r\n      </view>\r\n    </view>\r\n  <!-- #ifdef APP -->\r\n  </scroll-view>\r\n  <!-- #endif -->\r\n</template>\r\n\r\n\r\n<style>\r\n  .image {\r\n    width: 100%;\r\n  }\r\n\r\n  .demo {\r\n    background: #fff;\r\n    padding: 25px;\r\n    justify-content: center;\r\n    align-items: center;\r\n  }\r\n\r\n  .uni-hello-addfile {\r\n    text-align: center;\r\n    background: #fff;\r\n    padding: 25px;\r\n    margin-top: 10px;\r\n    font-size: 19px;\r\n    color: #808080;\r\n  }\r\n</style>\n\n```\n>Script\n```uts\n\r\n  // #ifdef APP\r\n  import {\r\n    testInovkeUploadFile,\r\n    CommonOptions\r\n  } from '@/uni_modules/test-invoke-network-api'\r\n  // #endif\r\n\r\n  export default {\r\n    data() {\r\n      return {\r\n        title: 'uploadFile',\r\n        imageSrc: '',\r\n        task: null as UploadTask | null,\r\n        //自动化测试例专用\r\n        jest_result: false,\r\n      }\r\n    },\r\n    onLoad() {\r\n    },\r\n    onUnload() {\r\n      this.imageSrc = '';\r\n      uni.hideLoading();\r\n      this.task?.abort();\r\n    },\r\n    methods: {\r\n      chooseImage: function () {\r\n        uni.chooseImage({\r\n          count: 1,\r\n          sizeType: ['compressed'],\r\n          sourceType: ['album'],\r\n          success: (res) => {\r\n            console.log('chooseImage success, temp path is', res.tempFilePaths[0])\r\n            var imageSrc = res.tempFilePaths[0]\r\n            uni.showLoading({\r\n              title: '上传中'\r\n            })\r\n            this.task = uni.uploadFile({\r\n              url: 'https://unidemo.dcloud.net.cn/upload', //仅为示例,非真实的接口地址\r\n              filePath: imageSrc,\r\n              name: 'file',\r\n              formData: {\r\n                'user': 'test'\r\n              },\r\n              success: (res) => {\r\n                console.log('uploadImage success, res is:', res)\r\n                uni.hideLoading();\r\n                uni.showToast({\r\n                  title: '上传成功',\r\n                  icon: 'success',\r\n                  duration: 1000\r\n                })\r\n                this.imageSrc = imageSrc\r\n              },\r\n              fail: (err) => {\r\n                console.log('uploadImage fail', err);\r\n                uni.hideLoading();\r\n                uni.showModal({\r\n                  content: err.errMsg,\r\n                  showCancel: false\r\n                });\r\n              },\r\n            });\r\n          },\r\n          fail: (err) => {\r\n            console.log('chooseImage fail', err)\r\n          }\r\n        })\r\n      },\r\n      //自动化测试例专用\r\n      jest_uploadFile() {\r\n        const imageSrc = \"/static/uni.png\";\r\n        this.task = uni.uploadFile({\r\n          url: 'https://unidemo.dcloud.net.cn/upload', //仅为示例,非真实的接口地址\r\n          filePath: imageSrc,\r\n          name: 'file',\r\n          formData: {\r\n            'user': 'test'\r\n          },\r\n          success: () => {\r\n            this.jest_result = true;\r\n          },\r\n          fail: () => {\r\n            this.jest_result = false;\r\n          },\r\n        })\r\n      },\r\n      jest_uploadFile_with_uni_env() {\n        const filePath = `${uni.env.CACHE_PATH}/download/uni-app.png`\r\n        uni.downloadFile({\r\n          url: \"https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/uni-app.png\",\r\n          filePath: filePath,\r\n          success: () => {\r\n            uni.uploadFile({\n              url: 'https://unidemo.dcloud.net.cn/upload', //仅为示例,非真实的接口地址\n              filePath: filePath,\n              name: 'file',\n              success: () => {\n                this.jest_result = true;\n              },\n              fail: () => {\n                this.jest_result = false;\n              },\n            })\n          },\r\n          fail: () => {\r\n            this.jest_result = false\r\n          }\r\n        });\r\n      },\r\n      jest_set_cookie() {\r\n        uni.request({\r\n          url: \"https://request.dcloud.net.cn/api/http/header/setCookie\",\r\n          method: \"GET\",\r\n          timeout: 6000,\r\n          sslVerify: false,\r\n          withCredentials: false,\r\n          firstIpv4: false,\r\n          success: () => {\r\n            this.jest_cookie_upload(true)\r\n          },\r\n          fail: () => {\r\n            this.jest_result = false;\r\n          },\r\n        });\r\n      },\r\n\r\n      jest_delete_cookie() {\r\n        uni.request({\r\n          url: \"https://request.dcloud.net.cn/api/http/header/deleteCookie\",\r\n          method: \"GET\",\r\n          timeout: 6000,\r\n          sslVerify: false,\r\n          withCredentials: false,\r\n          firstIpv4: false,\r\n          success: () => {\r\n            this.jest_cookie_upload(false)\r\n          },\r\n          fail: () => {\r\n            this.jest_result = false;\r\n          },\r\n        });\r\n      },\r\n      jest_cookie_upload(needCookie : boolean) {\r\n        const imageSrc = \"/static/uni.png\";\r\n        this.task = uni.uploadFile({\r\n          url: 'https://request.dcloud.net.cn/api/http/header/upload',\r\n          filePath: imageSrc,\r\n          name: 'file',\r\n          success: (res : UploadFileSuccess) => {\r\n            const data = JSON.parseObject(res.data)\r\n            const errCode = data?.getNumber(\"errCode\")\r\n            if (errCode != null && errCode == 1000) {\r\n              this.jest_result = needCookie ? false : true;\r\n            } else {\r\n              this.jest_result = needCookie ? true : false;\r\n            }\r\n          },\r\n          fail: () => {\r\n            this.jest_result = false;\r\n          },\r\n        })\r\n      },\r\n      jest_files_upload() {\r\n        const imageSrc = \"/static/uni.png\";\r\n        this.task = uni.uploadFile({\r\n          url: 'https://unidemo.dcloud.net.cn/upload',\r\n          files: [\r\n            {\r\n              name: \"file1\",\r\n              uri: imageSrc\r\n            } as UploadFileOptionFiles,\r\n            {\r\n              name: \"file2\",\r\n              uri: imageSrc\r\n            } as UploadFileOptionFiles\r\n          ],\r\n          success: (res : UploadFileSuccess) => {\r\n            if (res.statusCode == 200) {\r\n              this.jest_result = true;\r\n            }\r\n          },\r\n          fail: () => {\r\n            this.jest_result = false;\r\n          },\r\n        })\r\n      },\r\n      jest_uts_module_invoked() {\r\n        // #ifdef APP\r\n        testInovkeUploadFile({\r\n          success: (res : any) => {\r\n            console.log(\"success :\", res);\r\n            this.jest_result = true\r\n          },\r\n          fail: (err : any) => {\r\n            console.log(\"fail :\", err);\r\n            this.jest_result = false\r\n          }\r\n        } as CommonOptions)\r\n        // #endif\r\n      }\r\n    }\r\n  }\r\n\n```\n:::"
  },
  "downloadFile": {
    "name": "## uni.downloadFile(options) @downloadfile",
    "description": "下载文件资源到本地,客户端直接发起一个 HTTP GET 请求,返回文件的本地临时路径。",
    "compatibility": "### downloadFile  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.9 | 4.11 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | [DownloadFileOptions](#downloadfileoptions-values) | 是 | - | - |  |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| url | string | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 下载资源的 url |\n@| header | [UTSJSONObject](/uts/buildin-object-api/utsjsonobject.md) \\| null | 否 | null | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"-\",\"3.9\",\"4.11\"]]}' /> | HTTP 请求 Header,header 中不能设置 Referer |\n@| filePath | string \\| null | 否 | null | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 指定文件下载路径<br/>支持相对路径与绝对路径,例:<br/>`/imgs/pic.png`、`/storage/emulated/0/Android/data/io.dcloud.HBuilder/apps/HBuilder/temp/imgs/pic.png`<br/>并且支持指定下载目录,例:<br/>`/imgs/`<br/>支持uni.env的平台兼容性:Android自3.9开始支持uni.env,iOS自4.13开始支持uni.env |\n@| timeout | number \\| null | 否 | 120000 | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 超时时间,单位 ms |\n@| success | (result: [DownloadFileSuccess](#downloadfilesuccess-values)) => void \\| null | 否 | null | - | 下载成功后以 tempFilePath 的形式传给页面,res = {tempFilePath: '文件的临时路径'} |\n@| fail | (result: [DownloadFileFail](#downloadfilefail-values)) => void \\| null | 否 | null | - | 失败的回调函数 |\n@| complete | (result: any) => void \\| null | 否 | null | - | 结束的回调函数(调用成功、失败都会执行) | \n\n##### DownloadFileSuccess 的属性值 @downloadfilesuccess-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| tempFilePath | string | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 临时文件路径,下载后的文件会存储到一个临时文件 |\n| statusCode | number | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 开发者服务器返回的 HTTP 状态码 |\n\n##### DownloadFileFail 的属性值 @downloadfilefail-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errCode | 5 \\| 1000 \\| 100001 \\| 100002 \\| 600003 \\| 600009 \\| 602001 | 是 | - | - | 错误码<br/>- 5 接口超时<br/>- 1000 服务端系统错误<br/>- 100001 json数据解析错误<br/>- 100002 错误信息json解析失败<br/>- 600003 网络中断<br/>- 600009 URL格式不合法<br/>- 602001 request系统错误 |\n| errSubject | string | 是 | - | - | 统一错误主题(模块)名称 |\n| data | any \\| null | 否 | - | - | 错误信息中包含的数据 |\n| cause | [Error](https://uniapp.dcloud.net.cn/tutorial/err-spec.html#unierror) \\| null | 否 | - | - | 源错误信息,可以包含多个错误,详见SourceError |\n| errMsg | string | 是 | - | - | - |\n",
    "returnValue": "### 返回值  兼容性 \n\n| 类型 |\n| :- |\n| [DownloadTask](#downloadtask-values) |\n\n#### DownloadTask 的方法 @downloadtask-values \n\n#### abort() @abort\n中断下载任务。\n##### abort  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.9 | 4.11 |\n\n\n\n#### onProgressUpdate(callback) @onprogressupdate\n监听下载进度变化。\n##### onProgressUpdate  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.9 | 4.11 |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| callback | (result: [OnProgressDownloadResult](#onprogressdownloadresult-values)) => void | 是 | - | - |  | \n\n###### OnProgressDownloadResult 的属性值 @onprogressdownloadresult-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| progress | number | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 下载进度百分比 |\n| totalBytesWritten | number | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 已经下载的数据长度,单位 Bytes |\n| totalBytesExpectedToWrite | number | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 预期需要下载的数据总长度,单位 Bytes |\n\n \n",
    "tutorial": "\n### 参见\n\n- [参见uni-app相关文档](https://uniapp.dcloud.net.cn/api/request/network-file.html#downloadfile)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=downloadFile&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=downloadFile&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=downloadFile&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=downloadFile&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=downloadFile&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=downloadFile)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=downloadFile&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.network.downloadFile)",
    "example": "### 示例 \n> [hello uni-app x](https://gitcode.net/dcloud/hello-uni-app-x/-/blob/dev/pages/API/download-file/download-file.uvue) \n ::: preview https://hellouniappx.dcloud.net.cn/web/#/pages/API/download-file/download-file\n>Template\n```vue\n<template>\r\n  <!-- #ifdef APP -->\r\n  <scroll-view style=\"flex: 1\">\r\n  <!-- #endif -->\r\n    <view>\r\n      <page-head :title=\"title\"></page-head>\r\n      <view>\r\n        <view v-if=\"imageSrc\">\r\n          <image class=\"img\" :src=\"imageSrc\" mode=\"aspectFit\" />\r\n        </view>\r\n        <view v-else style=\"margin: 10px;\">\r\n          <text class=\"uni-hello-text\">点击按钮下载服务端示例图片(下载网络文件到本地临时目录)</text>\r\n          <button type=\"primary\" @tap=\"downloadImage\">下载</button>\r\n        </view>\r\n      </view>\r\n    </view>\r\n  <!-- #ifdef APP -->\r\n  </scroll-view>\r\n  <!-- #endif -->\r\n</template>\r\n\r\n\r\n<style>\r\n  .img {\r\n    margin: 0 auto;\r\n  }\r\n</style>\n\n```\n>Script\n```uts\n\n\n  // #ifdef APP\n  import {\n    testInovkeDownloadFile,\n    CommonOptions\n  } from '@/uni_modules/test-invoke-network-api'\n  // #endif\n\r\n  export default {\r\n    data() {\r\n      return {\r\n        title: 'downloadFile',\r\n        imageSrc: '',\r\n        task: null as DownloadTask | null,\r\n        //自动化测试例专用\r\n        jest_result: false\r\n      }\r\n    },\r\n    onLoad() {\r\n    },\r\n    onUnload() {\r\n      // this.imageSrc = '';\r\n      uni.hideLoading();\r\n      this.task?.abort();\r\n    },\r\n    methods: {\r\n      downloadImage: function () {\r\n        uni.showLoading({\r\n          title: '下载中'\r\n        })\r\n        var self = this\r\n        this.task = uni.downloadFile({\r\n          url: \"https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/uni-app.png\",\r\n          success: (res) => {\r\n            console.log('downloadFile success, res is', res.tempFilePath)\r\n            self.imageSrc = res.tempFilePath;\r\n            uni.hideLoading();\r\n          },\r\n          fail: (err) => {\r\n            console.log('downloadFile fail, err is:', err)\r\n            uni.hideLoading();\r\n          }\r\n        });\r\n        this.task?.onProgressUpdate((update) => {\r\n          console.log(\"progress : \", update.progress);\r\n        })\r\n      },\r\n      //自动化测试例专用\r\n      jest_downloadFile() {\r\n        uni.downloadFile({\r\n          url: \"https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/uni-app.png\",\r\n          success: () => {\r\n            this.jest_result = true\r\n          },\r\n          fail: () => {\r\n            this.jest_result = false\r\n          }\r\n        });\r\n      },\n\n      jest_downloadFile_with_uni_env() {\n        uni.downloadFile({\n          url: \"https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/uni-app.png\",\n          filePath: `${uni.env.CACHE_PATH}/a/b/`,\n          success: () => {\n            this.jest_result = true\n          },\n          fail: () => {\n            this.jest_result = false\n          }\n        });\n      },\n\n      jest_set_cookie(){\n        uni.request({\n          url: \"https://request.dcloud.net.cn/api/http/header/setCookie\",\n          method: \"GET\",\n          timeout: 6000,\n          sslVerify: false,\n          withCredentials: true,\n          firstIpv4: false,\n          success: () => {\n            this.jest_cookie_download(true)\n          },\n          fail: () => {\n            this.jest_result = false;\n          },\n        });\n      },\n\n      jest_delete_cookie(){\n        uni.request({\n          url: \"https://request.dcloud.net.cn/api/http/header/deleteCookie\",\n          method: \"GET\",\n          timeout: 6000,\n          sslVerify: false,\n          withCredentials: true,\n          firstIpv4: false,\n          success: () => {\n            this.jest_cookie_download(false)\n          },\n          fail: () => {\n            this.jest_result = false;\n          },\n        });\n      },\n      jest_cookie_download(needCookie: boolean){\n        uni.downloadFile({\n          url: \"https://request.dcloud.net.cn/api/http/header/download\",\n          success: () => {\n            this.jest_result = needCookie ? true : false;\n          },\n          fail: () => {\n            this.jest_result = needCookie ? false : true;\n          }\n        });\n      },\n      jest_uts_module_invoked(){\n        // #ifdef APP\n        testInovkeDownloadFile({\n          success:(res: any)=>{\n            console.log(\"success :\", res);\n            this.jest_result = true\n          },\n          fail:(err: any)=>{\n            console.log(\"fail :\", err);\n            this.jest_result = false\n          }\n        } as CommonOptions)\n        // #endif\n      },\n      jest_special_characters_download(){\n        uni.downloadFile({\n          url: \"https://web-ext-storage.dcloud.net.cn/hello-uni-app-x/1789834995055525889-你好%23你好.png\",\n          success: (res: DownloadFileSuccess) => {\n            this.jest_result = true;\n            console.log(\"res :\", res);\n          },\n          fail: () => {\n            this.jest_result = false;\n          }\n        });\n      }\r\n    }\r\n  }\r\n\n```\n:::"
  },
  "getNetworkType": {
    "name": "## uni.getNetworkType(options) @getnetworktype",
    "description": "获取网络类型",
    "compatibility": "### getNetworkType  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.9 | 4.11 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | [GetNetworkTypeOptions](#getnetworktypeoptions-values) | 是 | - | - |  |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| success | (result: [GetNetworkTypeSuccess](#getnetworktypesuccess-values)) => void \\| null | 否 | null | - | 接口调用成功的回调函数 |\n@| fail | (result: [UniError](https://uniapp.dcloud.net.cn/tutorial/err-spec.html#unierror)) => void \\| null | 否 | null | - | 接口调用失败的回调函数 |\n@| complete | (result: any) => void \\| null | 否 | null | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n##### GetNetworkTypeSuccess 的属性值 @getnetworktypesuccess-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| networkType | string | 是 | - | - | 网络类型 |\n",
    "returnValue": "",
    "tutorial": "\n### 参见\n\n- [参见uni-app相关文档](http://uniapp.dcloud.io/api/system/network?id=getnetworktype)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=getNetworkType&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=getNetworkType&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=getNetworkType&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=getNetworkType&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=getNetworkType&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=getNetworkType)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=getNetworkType&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.network.getNetworkType)",
    "example": "### 示例 \n> [hello uni-app x](https://gitcode.net/dcloud/hello-uni-app-x/-/blob/dev/pages/API/get-network-type/get-network-type.uvue) \n ::: preview https://hellouniappx.dcloud.net.cn/web/#/pages/API/get-network-type/get-network-type\n>Template\n```vue\n<template>\r\n  <page-head :title=\"title\"></page-head>\r\n  <view class=\"uni-padding-wrap uni-common-mt\">\r\n    <view style=\"background:#FFFFFF; padding:20px;\">\r\n      <view class=\"uni-center\">网络状态</view>\r\n      <view v-if=\"hasNetworkType == false\">\r\n        <view class=\"uni-center uni-common-mt\">未获取</view>\r\n        <view class=\"uni-center uni-common-mt\">请点击下面按钮获取网络状态</view>\r\n      </view>\r\n      <view v-if=\"hasNetworkType == true\">\r\n        <view class=\"uni-center uni-common-mt\">{{networkType}}</view>\r\n      </view>\r\n    </view>\r\n    <view class=\"uni-btn-v uni-common-mt\">\r\n      <button type=\"primary\" @tap=\"getNetworkType\">获取设备网络状态</button>\r\n      <button class=\"uni-common-mt\" @tap=\"clear\">清空</button>\r\n    </view>\r\n  </view>\r\n</template>\r\n\r\n\r\n<style>\r\n\r\n</style>\n\n```\n>Script\n```uts\n\r\n  export default {\r\n    data() {\r\n      return {\r\n        title: 'getNetworkType',\r\n        hasNetworkType: false,\r\n        networkType: '',\r\n        connectedWifi: '',\r\n        //自动化测试例专用\r\n        jest_result: false,\r\n      }\r\n    },\r\n    onLoad() {\r\n    },\r\n    onUnload: function () {\r\n      this.networkType = '';\r\n      this.hasNetworkType = false;\r\n    },\r\n    methods: {\r\n      getNetworkType: function () {\r\n        uni.getNetworkType({\r\n          success: (res) => {\r\n            console.log(res)\r\n            this.hasNetworkType = true;\r\n            this.networkType = res.networkType\r\n          },\r\n          fail: () => {\r\n            uni.showModal({\r\n              content: '获取失败!',\r\n              showCancel: false\r\n            })\r\n          }\r\n        })\r\n      },\r\n      clear: function () {\r\n        this.hasNetworkType = false;\r\n        this.networkType = '';\r\n        this.connectedWifi = '';\r\n      },\r\n      //自动化测试例专用\r\n      jest_getNetworkType() {\r\n        uni.getNetworkType({\r\n          success: () => {\r\n            this.jest_result = true;\r\n          },\r\n          fail: () => {\r\n            this.jest_result = false;\r\n          }\r\n        })\r\n      }\r\n    }\r\n  }\r\n\n```\n:::"
  },
  "connectSocket": {
    "name": "## uni.connectSocket(options) @connectsocket",
    "description": "创建一个 WebSocket 连接。",
    "compatibility": "### connectSocket  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.9 | 4.11 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | [ConnectSocketOptions](#connectsocketoptions-values) | 是 | - | - |  |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| url | string | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"-\",\"3.9\",\"4.11\"]]}' /> | 开发者服务器接口地址 |\n@| header | [UTSJSONObject](/uts/buildin-object-api/utsjsonobject.md) \\| null | 否 | null | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"-\",\"3.9\",\"4.11\"]]}' /> | 如果属性名存在,且类型为UTSJSONObject返回对应的结果,不存在返回null |\n@| protocols | Array\\<string\\> \\| null | 否 | null | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"-\",\"3.9\",\"4.11\"]]}' /> | 子协议数组 |\n@| success | (result: [ConnectSocketSuccess](#connectsocketsuccess-values)) => void \\| null | 否 | null | - | 接口调用成功的回调函数 |\n@| fail | (result: [ConnectSocketFail](#connectsocketfail-values)) => void \\| null | 否 | null | - | 接口调用失败的回调函数 |\n@| complete | (result: any) => void \\| null | 否 | null | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n##### ConnectSocketSuccess 的属性值 @connectsocketsuccess-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errMsg | string | 是 | - | - | - |\n\n##### ConnectSocketFail 的属性值 @connectsocketfail-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errCode | number | 是 | - | - | 错误码<br/>- 600009 URL格式不合法 |\n| errSubject | string | 是 | - | - | 统一错误主题(模块)名称 |\n| data | any \\| null | 否 | - | - | 错误信息中包含的数据 |\n| cause | [Error](https://uniapp.dcloud.net.cn/tutorial/err-spec.html#unierror) \\| null | 否 | - | - | 源错误信息,可以包含多个错误,详见SourceError |\n| errMsg | string | 是 | - | - | - |\n",
    "returnValue": "### 返回值  兼容性 \n\n| 类型 |\n| :- |\n| [SocketTask](#sockettask-values) |\n\n#### SocketTask 的方法 @sockettask-values \n\n#### send(options) @send\n通过 WebSocket 连接发送数据\n##### send  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.9 | 4.11 |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | [SendSocketMessageOptions](#sendsocketmessageoptions-values) | 是 | - | - |  |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| data | any | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"-\",\"3.9\",\"4.11\"]]}' /> | 需要发送的内容 |\n@| success | (result: [GeneralCallbackResult](#generalcallbackresult-values)) => void \\| null | 否 | null | - | 接口调用成功的回调函数 |\n@| fail | (result: [SendSocketMessageFail](#sendsocketmessagefail-values)) => void \\| null | 否 | null | - | 接口调用失败的回调函数 |\n@| complete | (result: any) => void \\| null | 否 | null | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n###### SendSocketMessageFail 的属性值 @sendsocketmessagefail-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errCode | 10001 \\| 10002 \\| 602001 | 是 | - | - | 错误码<br/>- 10001 发送数据超限,发送队列不能超过16M大小。<br/>- 10002 websocket未连接<br/>- 602001 websocket系统错误 |\n| errSubject | string | 是 | - | - | 统一错误主题(模块)名称 |\n| data | any \\| null | 否 | - | - | 错误信息中包含的数据 |\n| cause | [Error](https://uniapp.dcloud.net.cn/tutorial/err-spec.html#unierror) \\| null | 否 | - | - | 源错误信息,可以包含多个错误,详见SourceError |\n| errMsg | string | 是 | - | - | - |\n\n\n#### close(options) @close\n关闭 WebSocket 连接\n##### close  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.9 | 4.11 |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | **CloseSocketOptions** | 是 | - | - |  |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| code | number \\| null | 否 | 1000 | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"-\",\"3.9\",\"4.11\"]]}' /> | 一个数字值表示关闭连接的状态号,表示连接被关闭的原因。如果这个参数没有被指定,默认的取值是1000 (表示正常连接关闭) |\n@| reason | string \\| null | 否 | \"\" | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"-\",\"3.9\",\"4.11\"]]}' /> | 一个可读的字符串,表示连接被关闭的原因。这个字符串必须是不长于123字节的UTF-8 文本(不是字符) |\n@| success | (result: [GeneralCallbackResult](#generalcallbackresult-values)) => void \\| null | 否 | null | - | 接口调用成功的回调函数 |\n@| fail | (result: [GeneralCallbackResult](#generalcallbackresult-values)) => void \\| null | 否 | null | - | 接口调用失败的回调函数 |\n@| complete | (result: [GeneralCallbackResult](#generalcallbackresult-values)) => void \\| null | 否 | null | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n\n#### onOpen(callback) @onopen\n监听 WebSocket 连接打开事件\n##### onOpen  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.9 | 4.11 |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| callback | **OnSocketOpenCallbackResult** | 是 | - | - |  |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| header | any | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"-\",\"3.9\",\"4.11\"]]}' /> | 连接成功的 HTTP 响应 Header | \n\n\n#### onClose(callback) @onclose\n监听 WebSocket 连接关闭事件\n##### onClose  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.9 | 4.11 |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| callback | (result: any) => void | 是 | - | - |  | \n\n\n#### onError(callback) @onerror\n监听 WebSocket 错误\n##### onError  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.9 | 4.11 |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| callback | (result: [GeneralCallbackResult](#generalcallbackresult-values)) => void | 是 | - | - |  | \n\n\n#### onMessage(callback) @onmessage\n监听 WebSocket 接受到服务器的消息事件\n##### onMessage  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.9 | 4.11 |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| callback | (result: [OnSocketMessageCallbackResult](#onsocketmessagecallbackresult-values)) => void | 是 | - | - |  | \n\n###### OnSocketMessageCallbackResult 的属性值 @onsocketmessagecallbackresult-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| data | any | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"-\",\"3.9\",\"4.11\"]]}' /> | 服务器返回的消息 |\n\n \n",
    "tutorial": "\n### 参见\n\n- [参见uni-app相关文档](https://uniapp.dcloud.net.cn/api/request/websocket.html#connectsocket)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=connectSocket&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=connectSocket&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=connectSocket&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=connectSocket&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=connectSocket&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=connectSocket)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=connectSocket&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.network.websocket.connectSocket)"
  },
  "onSocketOpen": {
    "name": "## uni.onSocketOpen(options) @onsocketopen",
    "description": "监听WebSocket连接打开事件。",
    "compatibility": "### onSocketOpen  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.9 | 4.11 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | (result: [OnSocketOpenCallbackResult](#onsocketopencallbackresult-values)) => void | 是 | - | - |  | \n",
    "returnValue": "",
    "tutorial": "\n### 参见\n\n- [参见uni-app相关文档](https://uniapp.dcloud.net.cn/api/request/websocket.html#onsocketopen)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=onSocketOpen&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=onSocketOpen&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=onSocketOpen&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=onSocketOpen&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=onSocketOpen&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=onSocketOpen)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=onSocketOpen&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.network.websocket.onSocketOpen)"
  },
  "onSocketError": {
    "name": "## uni.onSocketError(callback) @onsocketerror",
    "description": "下载文件资源到本地,客户端直接发起一个 HTTP GET 请求,返回文件的本地临时路径。",
    "compatibility": "### onSocketError  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.9 | 4.11 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| callback | (result: [OnSocketErrorCallbackResult](#onsocketerrorcallbackresult-values)) => void | 是 | - | - |  | \n\n#### OnSocketErrorCallbackResult 的属性值 @onsocketerrorcallbackresult-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errMsg | string | 是 | - | - | 错误信息 |\n",
    "returnValue": "",
    "tutorial": "\n### 参见\n\n- [参见uni-app相关文档](https://uniapp.dcloud.net.cn/api/request/websocket.html#onsocketerror)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=onSocketError&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=onSocketError&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=onSocketError&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=onSocketError&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=onSocketError&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=onSocketError)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=onSocketError&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.network.websocket.onSocketError)"
  },
  "sendSocketMessage": {
    "name": "## uni.sendSocketMessage(options) @sendsocketmessage",
    "description": "通过 WebSocket 连接发送数据,需要先 uni.connectSocket,并在 uni.onSocketOpen 回调之后才能发送。",
    "compatibility": "### sendSocketMessage  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.9 | 4.11 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | [SendSocketMessageOptions](#sendsocketmessageoptions-values) | 是 | - | - |  |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| data | any | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"-\",\"3.9\",\"4.11\"]]}' /> | 需要发送的内容 |\n@| success | (result: [GeneralCallbackResult](#generalcallbackresult-values)) => void \\| null | 否 | null | - | 接口调用成功的回调函数 |\n@| fail | (result: [SendSocketMessageFail](#sendsocketmessagefail-values)) => void \\| null | 否 | null | - | 接口调用失败的回调函数 |\n@| complete | (result: any) => void \\| null | 否 | null | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n##### SendSocketMessageFail 的属性值 @sendsocketmessagefail-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errCode | 10001 \\| 10002 \\| 602001 | 是 | - | - | 错误码<br/>- 10001 发送数据超限,发送队列不能超过16M大小。<br/>- 10002 websocket未连接<br/>- 602001 websocket系统错误 |\n| errSubject | string | 是 | - | - | 统一错误主题(模块)名称 |\n| data | any \\| null | 否 | - | - | 错误信息中包含的数据 |\n| cause | [Error](https://uniapp.dcloud.net.cn/tutorial/err-spec.html#unierror) \\| null | 否 | - | - | 源错误信息,可以包含多个错误,详见SourceError |\n| errMsg | string | 是 | - | - | - |\n",
    "returnValue": "",
    "tutorial": "\n### 参见\n\n- [参见uni-app相关文档](https://uniapp.dcloud.net.cn/api/request/websocket.html#sendsocketmessage)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=sendSocketMessage&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=sendSocketMessage&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=sendSocketMessage&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=sendSocketMessage&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=sendSocketMessage&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=sendSocketMessage)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=sendSocketMessage&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.network.websocket.sendSocketMessage)"
  },
  "onSocketMessage": {
    "name": "## uni.onSocketMessage(callback) @onsocketmessage",
    "description": "监听WebSocket接受到服务器的消息事件。",
    "compatibility": "### onSocketMessage  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.9 | 4.11 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| callback | (result: [OnSocketMessageCallbackResult](#onsocketmessagecallbackresult-values)) => void | 是 | - | - |  | \n\n#### OnSocketMessageCallbackResult 的属性值 @onsocketmessagecallbackresult-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| data | any | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"-\",\"3.9\",\"4.11\"]]}' /> | 服务器返回的消息 |\n",
    "returnValue": "",
    "tutorial": "\n### 参见\n\n- [参见uni-app相关文档](https://uniapp.dcloud.net.cn/api/request/websocket.html#onsocketmessage)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=onSocketMessage&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=onSocketMessage&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=onSocketMessage&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=onSocketMessage&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=onSocketMessage&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=onSocketMessage)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=onSocketMessage&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.network.websocket.onSocketMessage)"
  },
  "closeSocket": {
    "name": "## uni.closeSocket(options) @closesocket",
    "description": "关闭 WebSocket 连接。",
    "compatibility": "### closeSocket  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.9 | 4.11 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | **CloseSocketOptions** | 是 | - | - |  |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| code | number \\| null | 否 | 1000 | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"-\",\"3.9\",\"4.11\"]]}' /> | 一个数字值表示关闭连接的状态号,表示连接被关闭的原因。如果这个参数没有被指定,默认的取值是1000 (表示正常连接关闭) |\n@| reason | string \\| null | 否 | \"\" | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"-\",\"3.9\",\"4.11\"]]}' /> | 一个可读的字符串,表示连接被关闭的原因。这个字符串必须是不长于123字节的UTF-8 文本(不是字符) |\n@| success | (result: [GeneralCallbackResult](#generalcallbackresult-values)) => void \\| null | 否 | null | - | 接口调用成功的回调函数 |\n@| fail | (result: [GeneralCallbackResult](#generalcallbackresult-values)) => void \\| null | 否 | null | - | 接口调用失败的回调函数 |\n@| complete | (result: [GeneralCallbackResult](#generalcallbackresult-values)) => void \\| null | 否 | null | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n",
    "returnValue": "",
    "tutorial": "\n### 参见\n\n- [参见uni-app相关文档](https://uniapp.dcloud.net.cn/api/request/websocket.html#closesocket)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=closeSocket&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=closeSocket&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=closeSocket&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=closeSocket&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=closeSocket&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=closeSocket)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=closeSocket&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.network.websocket.closeSocket)"
  },
  "onSocketClose": {
    "name": "## uni.onSocketClose(callback) @onsocketclose",
    "description": "监听WebSocket关闭。",
    "compatibility": "### onSocketClose  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.9 | 4.11 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| callback | (result: [OnSocketCloseCallbackResult](#onsocketclosecallbackresult-values)) => void | 是 | - | - |  | \n\n#### OnSocketCloseCallbackResult 的属性值 @onsocketclosecallbackresult-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| code | number | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"-\",\"3.9\",\"4.11\"]]}' /> | 一个数字值表示关闭连接的状态号,表示连接被关闭的原因。 |\n| reason | string | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"-\",\"3.9\",\"4.11\"]]}' /> | 一个可读的字符串,表示连接被关闭的原因。\t |\n",
    "returnValue": "",
    "tutorial": "\n### 参见\n\n- [参见uni-app相关文档](https://uniapp.dcloud.net.cn/api/request/websocket.html#onsocketclose)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=onSocketClose&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=onSocketClose&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=onSocketClose&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=onSocketClose&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=onSocketClose&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=onSocketClose)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=onSocketClose&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.network.websocket.onSocketClose)"
  },
  "websocket": {
    "example": "## 示例 \n> [hello uni-app x](https://gitcode.net/dcloud/hello-uni-app-x/-/blob/dev/pages/API/websocket/websocket.uvue) \n ::: preview https://hellouniappx.dcloud.net.cn/web/#/pages/API/websocket/websocket\n>Template\n```vue\n<template>\r\n  <page-head title=\"websocket通讯示例\"></page-head>\r\n  <view class=\"uni-padding-wrap\">\r\n    <view class=\"uni-btn-v\">\r\n      <text class=\"websocket-msg\">{{ showMsg }}</text>\r\n      <button class=\"uni-btn-v\" type=\"primary\" @click=\"connect\">\r\n        连接websocket服务\r\n      </button>\r\n      <button class=\"uni-btn-v\" v-show=\"connected\" type=\"primary\" @click=\"send\">\r\n        发送一条消息\r\n      </button>\r\n      <button class=\"uni-btn-v\" type=\"primary\" @click=\"close\">\r\n        断开websocket服务\r\n      </button>\r\n      <text class=\"websocket-tips\">发送消息后会收到一条服务器返回的消息(与发送的消息内容一致)</text>\r\n      <button class=\"uni-btn-v\" type=\"primary\" @click=\"goSocketTask\">\r\n        跳转 socketTask 示例\r\n      </button>\r\n    </view>\r\n  </view>\r\n</template>\r\n\r\n\r\n\r\n<style>\r\n  .uni-btn-v {\r\n    padding: 5px 0;\r\n  }\r\n\r\n  .uni-btn-v {\r\n    margin: 10px 0;\r\n  }\r\n\r\n  .websocket-msg {\r\n    padding: 40px 0px;\r\n    text-align: center;\r\n    font-size: 14px;\r\n    line-height: 40px;\r\n    color: #666666;\r\n  }\r\n\r\n  .websocket-tips {\r\n    padding: 40px 0px;\r\n    text-align: center;\r\n    font-size: 14px;\r\n    line-height: 24px;\r\n    color: #666666;\r\n  }\r\n</style>\n\n```\n>Script\n```uts\n\r\n  export default {\r\n    data() {\r\n      return {\r\n        connected: false,\r\n        connecting: false,\r\n        msg: '',\r\n        roomId: '',\r\n        platform: '',\r\n      }\r\n    },\r\n    computed: {\r\n      showMsg() : string {\r\n        if (this.connected) {\r\n          if (this.msg.length > 0) {\r\n            return '收到消息:' + this.msg\r\n          } else {\r\n            return '等待接收消息'\r\n          }\r\n        } else {\r\n          return '尚未连接'\r\n        }\r\n      },\r\n    },\r\n    onLoad() {\r\n      this.platform = uni.getSystemInfoSync().platform\r\n    },\r\n    onUnload() {\r\n      uni.closeSocket({\r\n        code: 1000,\r\n        reason: 'close reason from client',\r\n        success: (res : any) => {\r\n          console.log('uni.closeSocket success', res)\r\n        },\r\n        fail: (err : any) => {\r\n          console.log('uni.closeSocket fail', err)\r\n        },\r\n      } as CloseSocketOptions)\r\n      uni.hideLoading()\r\n    },\r\n    methods: {\r\n      connect() {\r\n        if (this.connected || this.connecting) {\r\n          uni.showModal({\r\n            content: '正在连接或者已经连接,请勿重复连接',\r\n            showCancel: false,\r\n          })\r\n          return\r\n        }\r\n        this.connecting = true\r\n        uni.showLoading({\r\n          title: '连接中...',\r\n        })\r\n        uni.connectSocket({\r\n          url: 'ws://websocket.dcloud.net.cn',\r\n          header: null,\r\n          protocols: null,\r\n          success: (res : any) => {\r\n            // 这里是接口调用成功的回调,不是连接成功的回调,请注意\r\n            console.log('uni.connectSocket success', res)\r\n          },\r\n          fail: (err : any) => {\r\n            // 这里是接口调用失败的回调,不是连接失败的回调,请注意\r\n            console.log('uni.connectSocket fail', err)\r\n          },\r\n        })\r\n        uni.onSocketOpen((res) => {\r\n          this.connecting = false\r\n          this.connected = true\r\n          uni.hideLoading()\r\n\r\n          uni.showToast({\r\n            icon: 'none',\r\n            title: '连接成功',\r\n          })\r\n          console.log('onOpen', res)\r\n        })\r\n        uni.onSocketError((err) => {\r\n          this.connecting = false\r\n          this.connected = false\r\n          uni.hideLoading()\r\n\r\n          uni.showModal({\r\n            content: '连接失败,可能是websocket服务不可用,请稍后再试',\r\n            showCancel: false,\r\n          })\r\n          console.log('onError', err)\r\n        })\r\n        uni.onSocketMessage((res) => {\r\n          this.msg = res.data as string\r\n          console.log('onMessage', res)\r\n        })\r\n        uni.onSocketClose((res) => {\r\n          this.connected = false\r\n          this.msg = ''\r\n          console.log('onClose', res)\r\n        })\r\n      },\r\n      send() {\r\n        uni.sendSocketMessage({\r\n          data:\r\n            'from ' +\r\n            this.platform +\r\n            ' : ' +\r\n            parseInt((Math.random() * 10000).toString()).toString(),\r\n          success: (res : any) => {\r\n            console.log(res)\r\n          },\r\n          fail: (err : any) => {\r\n            console.log(err)\r\n          },\r\n        } as SendSocketMessageOptions)\r\n      },\r\n      close() {\r\n        uni.closeSocket({\r\n          code: 1000,\r\n          reason: 'close reason from client',\r\n          success: (res : any) => {\r\n            console.log('uni.closeSocket success', res)\r\n          },\r\n          fail: (err : any) => {\r\n            console.log('uni.closeSocket fail', err)\r\n          },\r\n        } as CloseSocketOptions)\r\n      },\r\n      goSocketTask() {\r\n        uni.navigateTo({\r\n          url: '/pages/API/websocket/socketTask',\r\n        })\r\n      }\r\n    },\r\n  }\r\n\n```\n:::"
  },
  "getSystemInfo": {
    "name": "## uni.getSystemInfo(options) @getsysteminfo",
    "description": "异步获取系统信息",
    "compatibility": "### getSystemInfo  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.9 | 4.11 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | [GetSystemInfoOptions](#getsysteminfooptions-values) | 是 | - | - |  |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| success | (result: [GetSystemInfoResult](#getsysteminforesult-values)) => void \\| null | 否 | null | - | 接口调用成功的回调函数 |\n@| fail | (result: [UniError](https://uniapp.dcloud.net.cn/tutorial/err-spec.html#unierror)) => void \\| null | 否 | null | - | 接口调用失败的回调函数 |\n@| complete | (result: any) => void \\| null | 否 | null | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n##### GetSystemInfoResult 的属性值 @getsysteminforesult-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| SDKVersion | string | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"x\",\"3.9\",\"4.11\"]]}' /> | 客户端基础库版本<br/> |\n| appId | string | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | `manifest.json` 中应用appid。<br/> |\n| appLanguage | string | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 应用设置的语言。<br/> |\n| appName | string | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | `manifest.json` 中应用名称。<br/> |\n| appVersion | string | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | `manifest.json` 中应用版本名称。<br/> |\n| appVersionCode | string | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | `manifest.json` 中应用版本名号。<br/> |\n| ~~brand~~ | string | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"x\",\"3.9\",\"4.11\"]]}' /> | 手机品牌。  **已废弃,仅为了向下兼容保留** |\n| browserName | string | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 浏览器名称。`App` 端是系统 webview 的名字,比如 wkwebview、chrome。小程序端为空<br/> |\n| browserVersion | string | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 浏览器版本、webview 版本。<br/> |\n| deviceId | string | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 设备 ID<br/> |\n| deviceBrand | string | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 设备品牌。如:`apple`、`huawei`。<br/> |\n| deviceModel | string | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 设备型号<br/> |\n| deviceType | \"phone\" \\| \"pad\" \\| \"tv\" \\| \"watch\" \\| \"pc\" \\| \"undefined\" \\| \"car\" \\| \"vr\" \\| \"appliance\" | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 设备类型。<br/> |\n| devicePixelRatio | number | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 设备像素比<br/> |\n| deviceOrientation | \"portrait\" \\| \"landscape\" | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 设备方向。 |\n| ~~language~~ | string | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 程序设置的语言  **已废弃,仅为了向下兼容保留** |\n| ~~model~~ | string | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 手机型号  **已废弃,仅为了向下兼容保留** |\n| osName | \"ios\" \\| \"android\" \\| \"macos\" \\| \"windows\" \\| \"linux\" | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 系统名称\t<br/> |\n| osVersion | string | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 操作系统版本。如 ios 版本,andriod 版本<br/> |\n| osLanguage | string | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 操作系统语言<br/> |\n| osTheme | \"light\" \\| \"dark\" | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"x\",\"√\",\"4.11\"]]}' /> | 操作系统主题<br/> |\n| ~~pixelRatio~~ | number | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 设备像素比  **已废弃,仅为了向下兼容保留** |\n| ~~platform~~ | \"ios\" \\| \"android\" \\| \"mac\" \\| \"windows\" \\| \"linux\" | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 客户端平台  **已废弃,仅为了向下兼容保留** |\n| screenWidth | number | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 屏幕宽度,单位为px<br/> |\n| screenHeight | number | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 屏幕高度,单位为px<br/> |\n| statusBarHeight | number | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 状态栏的高度,单位为px<br/> |\n| ~~system~~ | string | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 操作系统版本  **已废弃,仅为了向下兼容保留** |\n| safeArea | **SafeArea** | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 在竖屏正方向下的安全区域<br/> |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| left | number | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 安全区域左上角横坐标,单位为px<br/> |\n@| right | number | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 安全区域右下角横坐标,单位为px<br/> |\n@| top | number | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 安全区域左上角纵坐标,单位为px<br/> |\n@| bottom | number | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 安全区域右下角纵坐标,单位为px<br/> |\n@| width | number | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 安全区域的宽度,单位为px<br/> |\n@| height | number | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 安全区域的高度,单位为px<br/> |\n| safeAreaInsets | **SafeAreaInsets** | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 在竖屏正方向下的安全区域插入位置<br/> |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| left | number | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 安全区域左侧插入位置(距离左边边界距离),单位为px<br/> |\n@| right | number | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 安全区域右侧插入位置(距离右边边界距离),单位为px<br/> |\n@| top | number | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 安全区顶部插入位置(距离顶部边界距离),单位为px<br/> |\n@| bottom | number | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 安全区域底部插入位置(距离底部边界距离),单位为px<br/> |\n| ua | string | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 用户标识。小程序端为空<br/> |\n| ~~uniCompileVersion~~ | string | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | uni 编译器版本。  **已废弃,仅为了向下兼容保留** |\n| uniCompilerVersion | string | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.18\",\"3.9\",\"4.11\"]]}' /> | uni 编译器版本。<br/> |\n| uniPlatform | \"app\" \\| \"web\" \\| \"mp-weixin\" \\| \"mp-alipay\" \\| \"mp-baidu\" \\| \"mp-toutiao\" \\| \"mp-lark\" \\| \"mp-qq\" \\| \"mp-kuaishou\" \\| \"mp-jd\" \\| \"mp-360\" \\| \"quickapp-webview\" \\| \"quickapp-webview-union\" \\| \"quickapp-webview-huawei\" | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | uni-app 运行平台,与条件编译平台相同。<br/> |\n| uniRuntimeVersion | string | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | uni 运行时版本。<br/> |\n| ~~uniCompileVersionCode~~ | number | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | uni 编译器版本号。  **已废弃,仅为了向下兼容保留** |\n| uniCompilerVersionCode | number | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.18\",\"3.9\",\"4.11\"]]}' /> | uni 编译器版本号。<br/> |\n| uniRuntimeVersionCode | number | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | uni 运行时版本号。<br/> |\n| ~~version~~ | string | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 引擎版本号。  **已废弃,仅为了向下兼容保留** |\n| romName | string | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"x\",\"3.9\",\"4.11\"]]}' /> | rom 名称。Android 部分机型获取不到值。iOS 恒为 `ios`<br/> |\n| romVersion | string | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"x\",\"3.9\",\"4.11\"]]}' /> | rom 版本号。Android 部分机型获取不到值。iOS 为操作系统版本号(同 `osVersion`)。<br/> |\n| windowWidth | number | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 可使用窗口宽度,单位为px<br/> |\n| windowHeight | number | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 可使用窗口高度,单位为px<br/> |\n| windowTop | number | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 内容区域距离顶部的距离(同CSS变量 `--window-top`),单位为px<br/> |\n| windowBottom | number | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 内容区域距离底部的距离(同CSS变量 `--window-bottom`),单位为px<br/> |\n| osAndroidAPILevel | number \\| null | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"x\",\"√\",\"x\"]]}' /> | Android 系统API库的版本。<br/> |\n| appTheme | \"light\" \\| \"dark\" \\| \"auto\" | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"x\",\"4.18\",\"4.18\"]]}' /> | 当前App的主题<br/> |\n",
    "returnValue": "",
    "tutorial": "\n### 参见\n\n- [参见uni-app相关文档](http://uniapp.dcloud.io/api/system/info?id=getsysteminfo)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=getSystemInfo&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=getSystemInfo&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=getSystemInfo&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=getSystemInfo&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=getSystemInfo&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=getSystemInfo)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=getSystemInfo&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.device.getSystemInfo.getSystemInfo)",
    "example": "### 示例 \n> [hello uni-app x](https://gitcode.net/dcloud/hello-uni-app-x/-/blob/dev/pages/API/get-system-info/get-system-info.uvue) \n ::: preview https://hellouniappx.dcloud.net.cn/web/#/pages/API/get-system-info/get-system-info\n>Template\n```vue\n<template>\r\n  <!-- #ifdef APP -->\r\n  <scroll-view style=\"flex: 1\">\r\n  <!-- #endif -->\r\n    <view>\r\n      <page-head :title=\"title\"></page-head>\r\n      <view class=\"uni-common-mt\">\r\n        <view class=\"uni-list\">\r\n          <view class=\"uni-list-cell\" v-for=\"(item, _) in items\" style=\"align-items: center\">\r\n            <view class=\"uni-pd\">\r\n              <view class=\"uni-label\" style=\"width: 180px\">{{\r\n                item.label\r\n              }}</view>\r\n            </view>\r\n            <view class=\"uni-list-cell-db\">\r\n              <text style=\"width: 100%;\">{{ item.value == '' ? '未获取' : item.value }}</text>\r\n            </view>\r\n          </view>\r\n        </view>\r\n        <view class=\"uni-padding-wrap\">\r\n          <view class=\"uni-btn-v\">\r\n            <button type=\"primary\" @tap=\"getSystemInfoSync\">\r\n              同步获取设备系统信息\r\n            </button>\r\n            <button type=\"primary\" @tap=\"getSystemInfo\" style=\"margin-top: 20px;\">\r\n              异步获取设备系统信息\r\n            </button>\r\n          </view>\r\n        </view>\r\n      </view>\r\n    </view>\r\n  <!-- #ifdef APP -->\r\n  </scroll-view>\r\n  <!-- #endif -->\r\n</template>\r\n\r\n\r\n<style>\r\n  .uni-pd {\r\n    padding-left: 15px;\r\n  }\r\n</style>\n\n```\n>Script\n```uts\n\r\n  type Item = {\r\n    label : string,\r\n    value : string,\r\n  }\r\n\r\n  let globalScreenHeight = 0\r\n  try {\r\n    globalScreenHeight = uni.getSystemInfoSync().screenHeight\r\n  } catch (e) {\r\n    // 兼容本地测试\r\n    console.error(e)\r\n  }\r\n\r\n  export default {\r\n    data() {\r\n      return {\r\n        title: 'getSystemInfo',\r\n        items: [] as Item[],\r\n        screenHeightAtReady: 0,\r\n        jest_result: false,\r\n      }\r\n    },\r\n    onUnload: function () {\r\n    },\r\n    onReady() {\r\n      this.screenHeightAtReady = uni.getSystemInfoSync().screenHeight\r\n      console.log(`全局获取屏幕高度: ${globalScreenHeight}  onReady内获取屏幕高度: ${this.screenHeightAtReady}`);\r\n    },\r\n    methods: {\r\n      getSystemInfo: function () {\r\n        uni.getSystemInfo({\r\n          success: (res) => {\r\n            this.items = [] as Item[];\r\n            const res_str = JSON.stringify(res);\r\n            const res_obj = JSON.parseObject(res_str);\r\n            const res_map = res_obj!.toMap();\r\n            let keys = [] as string[]\r\n            res_map.forEach((_, key) => {\r\n              keys.push(key);\r\n            });\r\n            keys.sort().forEach(key => {\r\n              const value = res[key];\r\n              if (value != null) {\r\n                const item = {\r\n                  label: key,\r\n                  value: \"\" + ((typeof value == \"object\") ? JSON.stringify(value) : value)\r\n                } as Item;\r\n                this.items.push(item);\r\n              }\r\n            });\r\n          },\r\n        })\r\n      },\r\n      getSystemInfoSync: function () {\r\n        this.items = [] as Item[];\r\n        const res = uni.getSystemInfoSync()\r\n        const res_str = JSON.stringify(res);\r\n        const res_obj = JSON.parseObject(res_str);\r\n        const res_map = res_obj!.toMap();\r\n        let keys = [] as string[]\r\n        res_map.forEach((_, key) => {\r\n          keys.push(key);\r\n        });\r\n        keys.sort().forEach(key => {\r\n          const value = res[key];\r\n          if (value != null) {\r\n            const item = {\r\n              label: key,\r\n              value: \"\" + ((typeof value == \"object\") ? JSON.stringify(value) : value)\r\n            } as Item;\r\n            this.items.push(item);\r\n          }\r\n        });\r\n      },\r\n      //自动化测试例专用\r\n      jest_getSystemInfo() : GetSystemInfoResult {\r\n        return uni.getSystemInfoSync();\r\n      },\r\n      jest_getScreenHeight_at_different_stages() {\r\n        this.jest_result = (globalScreenHeight == this.screenHeightAtReady)\r\n      }\r\n    }\r\n  }\r\n\n```\n:::"
  },
  "getSystemInfoSync": {
    "name": "## uni.getSystemInfoSync() @getsysteminfosync",
    "description": "同步获取系统信息",
    "compatibility": "### getSystemInfoSync  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.9 | 4.11 |\n",
    "param": "",
    "returnValue": "### 返回值  兼容性 \n\n| 类型 |\n| :- |\n| **GetSystemInfoResult** |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| SDKVersion | string | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"x\",\"3.9\",\"4.11\"]]}' /> | 客户端基础库版本<br/> |\n@| appId | string | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | `manifest.json` 中应用appid。<br/> |\n@| appLanguage | string | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 应用设置的语言。<br/> |\n@| appName | string | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | `manifest.json` 中应用名称。<br/> |\n@| appVersion | string | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | `manifest.json` 中应用版本名称。<br/> |\n@| appVersionCode | string | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | `manifest.json` 中应用版本名号。<br/> |\n@| ~~brand~~ | string | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"x\",\"3.9\",\"4.11\"]]}' /> | 手机品牌。  **已废弃,仅为了向下兼容保留** |\n@| browserName | string | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 浏览器名称。`App` 端是系统 webview 的名字,比如 wkwebview、chrome。小程序端为空<br/> |\n@| browserVersion | string | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 浏览器版本、webview 版本。<br/> |\n@| deviceId | string | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 设备 ID<br/> |\n@| deviceBrand | string | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 设备品牌。如:`apple`、`huawei`。<br/> |\n@| deviceModel | string | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 设备型号<br/> |\n@| deviceType | \"phone\" \\| \"pad\" \\| \"tv\" \\| \"watch\" \\| \"pc\" \\| \"null\" \\| \"car\" \\| \"vr\" \\| \"appliance\" | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 设备类型。<br/> |\n@| devicePixelRatio | number | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 设备像素比<br/> |\n@| deviceOrientation | \"portrait\" \\| \"landscape\" | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 设备方向。 |\n@| ~~language~~ | string | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 程序设置的语言  **已废弃,仅为了向下兼容保留** |\n@| ~~model~~ | string | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 手机型号  **已废弃,仅为了向下兼容保留** |\n@| osName | \"ios\" \\| \"android\" \\| \"macos\" \\| \"windows\" \\| \"linux\" | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 系统名称\t<br/> |\n@| osVersion | string | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 操作系统版本。如 ios 版本,andriod 版本<br/> |\n@| osLanguage | string | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 操作系统语言<br/> |\n@| osTheme | \"light\" \\| \"dark\" | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"x\",\"√\",\"4.11\"]]}' /> | 操作系统主题<br/> |\n@| ~~pixelRatio~~ | number | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 设备像素比  **已废弃,仅为了向下兼容保留** |\n@| ~~platform~~ | \"ios\" \\| \"android\" \\| \"mac\" \\| \"windows\" \\| \"linux\" | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 客户端平台  **已废弃,仅为了向下兼容保留** |\n@| screenWidth | number | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 屏幕宽度,单位为px<br/> |\n@| screenHeight | number | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 屏幕高度,单位为px<br/> |\n@| statusBarHeight | number | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 状态栏的高度,单位为px<br/> |\n@| ~~system~~ | string | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 操作系统版本  **已废弃,仅为了向下兼容保留** |\n@| safeArea | **SafeArea** | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 在竖屏正方向下的安全区域<br/> |\n@@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@@| :- | :- | :- | :- |  :-: | :- |\n@@| left | number | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 安全区域左上角横坐标,单位为px<br/> |\n@@| right | number | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 安全区域右下角横坐标,单位为px<br/> |\n@@| top | number | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 安全区域左上角纵坐标,单位为px<br/> |\n@@| bottom | number | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 安全区域右下角纵坐标,单位为px<br/> |\n@@| width | number | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 安全区域的宽度,单位为px<br/> |\n@@| height | number | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 安全区域的高度,单位为px<br/> |\n@| safeAreaInsets | **SafeAreaInsets** | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 在竖屏正方向下的安全区域插入位置<br/> |\n@@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@@| :- | :- | :- | :- |  :-: | :- |\n@@| left | number | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 安全区域左侧插入位置(距离左边边界距离),单位为px<br/> |\n@@| right | number | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 安全区域右侧插入位置(距离右边边界距离),单位为px<br/> |\n@@| top | number | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 安全区顶部插入位置(距离顶部边界距离),单位为px<br/> |\n@@| bottom | number | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 安全区域底部插入位置(距离底部边界距离),单位为px<br/> |\n@| ua | string | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 用户标识。小程序端为空<br/> |\n@| ~~uniCompileVersion~~ | string | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | uni 编译器版本。  **已废弃,仅为了向下兼容保留** |\n@| uniCompilerVersion | string | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.18\",\"3.9\",\"4.11\"]]}' /> | uni 编译器版本。<br/> |\n@| uniPlatform | \"app\" \\| \"web\" \\| \"mp-weixin\" \\| \"mp-alipay\" \\| \"mp-baidu\" \\| \"mp-toutiao\" \\| \"mp-lark\" \\| \"mp-qq\" \\| \"mp-kuaishou\" \\| \"mp-jd\" \\| \"mp-360\" \\| \"quickapp-webview\" \\| \"quickapp-webview-union\" \\| \"quickapp-webview-huawei\" | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | uni-app 运行平台,与条件编译平台相同。<br/> |\n@| uniRuntimeVersion | string | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | uni 运行时版本。<br/> |\n@| ~~uniCompileVersionCode~~ | number | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | uni 编译器版本号。  **已废弃,仅为了向下兼容保留** |\n@| uniCompilerVersionCode | number | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.18\",\"3.9\",\"4.11\"]]}' /> | uni 编译器版本号。<br/> |\n@| uniRuntimeVersionCode | number | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | uni 运行时版本号。<br/> |\n@| ~~version~~ | string | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 引擎版本号。  **已废弃,仅为了向下兼容保留** |\n@| romName | string | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"x\",\"3.9\",\"4.11\"]]}' /> | rom 名称。Android 部分机型获取不到值。iOS 恒为 `ios`<br/> |\n@| romVersion | string | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"x\",\"3.9\",\"4.11\"]]}' /> | rom 版本号。Android 部分机型获取不到值。iOS 为操作系统版本号(同 `osVersion`)。<br/> |\n@| windowWidth | number | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 可使用窗口宽度,单位为px<br/> |\n@| windowHeight | number | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 可使用窗口高度,单位为px<br/> |\n@| windowTop | number | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 内容区域距离顶部的距离(同CSS变量 `--window-top`),单位为px<br/> |\n@| windowBottom | number | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 内容区域距离底部的距离(同CSS变量 `--window-bottom`),单位为px<br/> |\n@| osAndroidAPILevel | number \\| null | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"x\",\"√\",\"x\"]]}' /> | Android 系统API库的版本。<br/> |\n@| appTheme | \"light\" \\| \"dark\" \\| \"auto\" | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"x\",\"4.18\",\"4.18\"]]}' /> | 当前App的主题<br/> | \n",
    "tutorial": "\n### 参见\n\n- [参见uni-app相关文档](http://uniapp.dcloud.io/api/system/info?id=getsysteminfosync)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=getSystemInfoSync&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=getSystemInfoSync&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=getSystemInfoSync&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=getSystemInfoSync&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=getSystemInfoSync&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=getSystemInfoSync)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=getSystemInfoSync&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.device.getSystemInfo.getSystemInfoSync)"
  },
  "getDeviceInfo": {
    "name": "## uni.getDeviceInfo(options?) @getdeviceinfo",
    "description": "获取设备信息",
    "compatibility": "### getDeviceInfo  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.9 | 4.11 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | **GetDeviceInfoOptions** | 否 | 包含所有字段的过滤对象 | - | \\[options=包含所有字段的过滤对象]过滤的字段对象, 不传参数默认为获取全部字段。 |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| filter | Array\\<string\\> | 是 | - | - | 过滤字段的字符串数组,假如要获取指定字段,传入此数组。 | \n",
    "returnValue": "### 返回值  兼容性 \n\n| 类型 |\n| :- |\n| **GetDeviceInfoResult** |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| ~~brand~~ | string | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"x\",\"3.9\",\"4.11\"]]}' /> | 设备品牌  **已废弃,仅为了向下兼容保留** |\n@| deviceBrand | string | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"x\",\"3.9\",\"4.11\"]]}' /> | 设备品牌<br/> |\n@| deviceId | string | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 设备 id 。由 uni-app 框架生成并存储,清空 Storage 会导致改变<br/> |\n@| ~~model~~ | string | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 设备型号\t  **已废弃,仅为了向下兼容保留** |\n@| deviceModel | string | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 设备型号\t<br/> |\n@| deviceType | \"phone\" \\| \"pad\" \\| \"tv\" \\| \"watch\" \\| \"pc\" \\| \"null\" \\| \"car\" \\| \"vr\" \\| \"appliance\" | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 设备类型phone、pad、pc\t<br/> |\n@| deviceOrientation | string | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 设备方向 竖屏 portrait、横屏 landscape\t<br/> |\n@| devicePixelRatio | number | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 设备像素比\t<br/> |\n@| system | string | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 操作系统及版本\t<br/> |\n@| platform | \"ios\" \\| \"android\" \\| \"mac\" \\| \"windows\" \\| \"linux\" | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 客户端平台\t<br/> |\n@| isRoot | boolean | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"x\",\"3.9\",\"4.11\"]]}' /> | 是否root。iOS 为是否越狱<br/> |\n@| isSimulator | boolean | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"x\",\"3.9\",\"4.11\"]]}' /> | 是否是模拟器<br/> |\n@| isUSBDebugging | boolean | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"x\",\"√\",\"x\"]]}' /> | adb是否开启<br/> |\n@| osName | \"ios\" \\| \"android\" \\| \"macos\" \\| \"windows\" \\| \"linux\" | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.18\",\"4.18\",\"4.18\"]]}' /> | 系统名称\t<br/> |\n@| osVersion | string \\| null | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.18\",\"4.18\",\"4.18\"]]}' /> | 操作系统版本。如 ios 版本,andriod 版本<br/> |\n@| osLanguage | string \\| null | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"x\",\"4.18\",\"4.18\"]]}' /> | 操作系统语言<br/> |\n@| osTheme | \"light\" \\| \"dark\" | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"x\",\"4.18\",\"4.18\"]]}' /> | 操作系统主题<br/> |\n@| osAndroidAPILevel | number \\| null | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"x\",\"4.18\",\"x\"]]}' /> | Android 系统API库的版本。<br/> |\n@| romName | string \\| null | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"x\",\"4.18\",\"4.18\"]]}' /> | rom 名称。Android 部分机型获取不到值。iOS 恒为 `ios`<br/> |\n@| romVersion | string \\| null | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"x\",\"4.18\",\"4.18\"]]}' /> | rom 版本号。Android 部分机型获取不到值。iOS 为操作系统版本号(同 `osVersion`)。<br/> | \n",
    "tutorial": "\n### 参见\n\n- [参见uni-app相关文档](https://uniapp.dcloud.net.cn/api/system/getDeviceInfo.html)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=getDeviceInfo&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=getDeviceInfo&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=getDeviceInfo&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=getDeviceInfo&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=getDeviceInfo&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=getDeviceInfo)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=getDeviceInfo&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.device.getDeviceInfo)",
    "example": "### 示例 \n> [hello uni-app x](https://gitcode.net/dcloud/hello-uni-app-x/-/blob/dev/pages/API/get-device-info/get-device-info.uvue) \n ::: preview https://hellouniappx.dcloud.net.cn/web/#/pages/API/get-device-info/get-device-info\n>Template\n```vue\n<template>\r\n  <!-- #ifdef APP -->\r\n  <scroll-view class=\"page-scroll-view\">\r\n  <!-- #endif -->\r\n    <view>\r\n      <page-head :title=\"title\"></page-head>\r\n      <view class=\"uni-common-mt\">\r\n        <view class=\"uni-list\">\r\n          <view class=\"uni-list\">\r\n            <view class=\"uni-list-cell\" v-for=\"(item, _) in items\" style=\"align-items: center\">\r\n              <view class=\"uni-pd\">\r\n                <view class=\"uni-label\" style=\"width: 180px\">{{\r\n                  item.label\r\n                }}</view>\r\n              </view>\r\n              <view class=\"uni-list-cell-db\">\r\n                <text style=\"width: 100%\">{{\r\n                  item.value == \"\" ? \"未获取\" : item.value\r\n                }}</text>\r\n              </view>\r\n            </view>\r\n          </view>\r\n        </view>\r\n        <view class=\"uni-padding-wrap\">\r\n          <view class=\"uni-btn-v\">\r\n            <button type=\"primary\" @tap=\"getDeviceInfo\">获取设备信息</button>\r\n          </view>\r\n        </view>\r\n      </view>\r\n    </view>\r\n  <!-- #ifdef APP -->\r\n  </scroll-view>\r\n  <!-- #endif -->\r\n</template>\r\n\r\n\r\n<style>\r\n  .uni-pd {\r\n    padding-left: 15px;\r\n  }\r\n</style>\n\n```\n>Script\n```uts\n\r\n  import { setDevicePixelRatio } from '@/store/index.uts'\r\n\r\n  type Item = {\r\n    label : string,\r\n    value : string,\r\n  }\r\n  export default {\r\n    data() {\r\n      return {\r\n        title: 'getDeviceInfo',\r\n        items: [] as Item[],\r\n      }\r\n    },\r\n    onUnload: function () {\r\n    },\r\n    methods: {\r\n      getDeviceInfo: function () {\r\n        const res = uni.getDeviceInfo();\r\n        // 获取像素比, 供截图对比使用\r\n        setDevicePixelRatio(res.devicePixelRatio !== null ? res.devicePixelRatio! : 1)\r\n        this.items = [] as Item[];\r\n\r\n        const res_str = JSON.stringify(res);\r\n        const res_obj = JSON.parseObject(res_str);\r\n        const res_map = res_obj!.toMap();\r\n        let keys = [] as string[]\r\n        res_map.forEach((_, key) => {\r\n          keys.push(key);\r\n        });\r\n        keys.sort().forEach(key => {\r\n          const value = res[key];\r\n          if (value != null) {\r\n            const item = {\r\n              label: key,\r\n              value: \"\" + ((typeof value == \"object\") ? JSON.stringify(value) : value)\r\n            } as Item;\r\n            this.items.push(item);\r\n          }\r\n        });\r\n      }\r\n    }\r\n  }\r\n\n```\n:::"
  },
  "getWindowInfo": {
    "name": "## uni.getWindowInfo() @getwindowinfo",
    "description": "同步获取窗口信息",
    "compatibility": "### getWindowInfo  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.9 | 4.11 |\n",
    "param": "",
    "returnValue": "### 返回值  兼容性 \n\n| 类型 |\n| :- |\n| **GetWindowInfoResult** |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| pixelRatio | number | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 设备像素比<br/> |\n@| screenWidth | number | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 屏幕宽度,单位为px<br/> |\n@| screenHeight | number | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 屏幕高度,单位为px<br/> |\n@| windowWidth | number | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 可使用窗口宽度,单位为px<br/> |\n@| windowHeight | number | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"-\",\"3.9\",\"4.11\"]]}' /> | 可使用窗口高度,单位为px<br/> |\n@| statusBarHeight | number | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 状态栏的高度,单位为px<br/> |\n@| windowTop | number | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 内容区域距离顶部的距离(同CSS变量 `--window-top`),单位为px<br/> |\n@| windowBottom | number | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 内容区域距离底部的距离(同CSS变量 `--window-bottom`),单位为px<br/> |\n@| safeArea | **SafeArea** | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 安全区域在屏幕中的位置信息<br/> |\n@@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@@| :- | :- | :- | :- |  :-: | :- |\n@@| left | number | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 安全区域左上角横坐标,单位为px<br/> |\n@@| right | number | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 安全区域右下角横坐标,单位为px<br/> |\n@@| top | number | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 安全区域左上角纵坐标,单位为px<br/> |\n@@| bottom | number | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 安全区域右下角纵坐标,单位为px<br/> |\n@@| width | number | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 安全区域的宽度,单位为px<br/> |\n@@| height | number | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 安全区域的高度,单位为px<br/> |\n@| safeAreaInsets | **SafeAreaInsets** | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 安全区域插入位置(与屏幕边界的距离)信息<br/> |\n@@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@@| :- | :- | :- | :- |  :-: | :- |\n@@| left | number | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 安全区域左侧插入位置(距离左边边界距离),单位为px<br/> |\n@@| right | number | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 安全区域右侧插入位置(距离右边边界距离),单位为px<br/> |\n@@| top | number | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 安全区顶部插入位置(距离顶部边界距离),单位为px<br/> |\n@@| bottom | number | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 安全区域底部插入位置(距离底部边界距离),单位为px<br/> |\n@| screenTop | number | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 窗口上边缘的 y 值,单位为px<br/> | \n",
    "tutorial": "\n### 参见\n\n- [参见uni-app相关文档](http://uniapp.dcloud.io/api/system/getWindowInfo.html)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=getWindowInfo&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=getWindowInfo&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=getWindowInfo&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=getWindowInfo&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=getWindowInfo&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=getWindowInfo)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=getWindowInfo&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.device.getWindowInfo)",
    "example": "### 示例 \n> [hello uni-app x](https://gitcode.net/dcloud/hello-uni-app-x/-/blob/dev/pages/API/get-window-info/get-window-info.uvue) \n ::: preview https://hellouniappx.dcloud.net.cn/web/#/pages/API/get-window-info/get-window-info\n>Template\n```vue\n<template>\r\n  <page-head :title=\"title\"></page-head>\r\n  <view class=\"uni-common-mt\">\r\n    <view class=\"uni-list\">\r\n      <view class=\"uni-list-cell\" v-for=\"(item, _) in items\" style=\"align-items: center\">\r\n        <view class=\"uni-pd\">\r\n          <view class=\"uni-label\" style=\"width: 180px\">{{ item.label }}</view>\r\n        </view>\r\n        <view class=\"uni-list-cell-db\">\r\n          <text style=\"width: 100%;\">{{ item.value == '' ? '未获取' : item.value }}</text>\r\n        </view>\r\n      </view>\r\n    </view>\r\n    <view class=\"uni-padding-wrap\">\r\n      <view class=\"uni-btn-v\">\r\n        <button type=\"primary\" @tap=\"getWindowInfo\">获取窗口信息</button>\r\n      </view>\r\n    </view>\r\n  </view>\r\n</template>\r\n\r\n\r\n<style>\r\n  .uni-pd {\r\n    padding-left: 15px;\r\n  }\r\n</style>\n\n```\n>Script\n```uts\n\r\n  import { setStatusBarHeight, setSafeArea } from '@/store/index.uts'\r\n  // #ifdef APP-ANDROID\r\n  import type { SafeArea } from '@/store/index.uts'\r\n  // #endif\r\n\r\n  type Item = {\r\n    label : string,\r\n    value : string,\r\n  }\r\n  export default {\r\n    data() {\r\n      return {\r\n        title: 'getWindowInfo',\r\n        items: [] as Item[],\r\n      }\r\n    },\r\n    onUnload: function () {\r\n    },\r\n    onReady() {\r\n      this.getWindowInfo()\r\n    },\r\n    methods: {\r\n      getWindowInfo: function () {\r\n        const res = uni.getWindowInfo();\r\n        // 获取状态栏高度, 供截图对比使用\r\n        setStatusBarHeight(res.statusBarHeight);\r\n        // 获取安全区信息,供截图使用\r\n        // #ifdef APP-ANDROID\r\n        setSafeArea({\r\n          top: res.safeArea.top,\r\n          left: res.safeArea.left,\r\n          right: res.safeArea.right,\r\n          bottom: res.safeArea.bottom,\r\n          width: res.safeArea.width,\r\n          height: res.safeArea.height,\r\n        } as SafeArea);\r\n        // #endif\r\n        // #ifdef APP-IOS\r\n        setSafeArea({\r\n          top: res.safeArea.top,\r\n          left: res.safeArea.left,\r\n          right: res.safeArea.right,\r\n          bottom: res.safeArea.bottom,\r\n          width: res.safeArea.width,\r\n          height: res.safeArea.height,\r\n        });\r\n        // #endif\r\n        this.items = [] as Item[];\r\n\r\n        const res_str = JSON.stringify(res);\r\n        const res_obj = JSON.parseObject(res_str);\r\n        const res_map = res_obj!.toMap();\r\n        let keys = [] as string[]\r\n        res_map.forEach((_, key) => {\r\n          keys.push(key);\r\n        });\r\n        keys.sort().forEach(key => {\r\n          const value = res[key];\r\n          if (value != null) {\r\n            const item = {\r\n              label: key,\r\n              value: \"\" + ((typeof value == \"object\") ? JSON.stringify(value) : value)\r\n            } as Item;\r\n            this.items.push(item);\r\n          }\r\n        });\r\n      },\r\n      //自动化测试例专用\r\n      jest_getWindowInfo() : GetWindowInfoResult {\r\n        return uni.getWindowInfo();\r\n      },\r\n    }\r\n  }\r\n\n```\n:::"
  },
  "getAppBaseInfo": {
    "name": "## uni.getAppBaseInfo(options?) @getappbaseinfo",
    "description": "获取app基本信息",
    "compatibility": "### getAppBaseInfo  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.9 | 4.11 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | **GetAppBaseInfoOptions** | 否 | 包含所有字段的过滤对象 | - | \\[options=包含所有字段的过滤对象] 过滤的字段对象, 不传参数默认为获取全部字段。 |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| filter | Array\\<string\\> | 是 | - | - | 过滤字段的字符串数组,假如要获取指定字段,传入此数组。 | \n",
    "returnValue": "### 返回值  兼容性 \n\n| 类型 |\n| :- |\n| **GetAppBaseInfoResult** |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| appId | string | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | manifest.json 中应用appid,即DCloud appid。\t<br/> |\n@| appName | string | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | `manifest.json` 中应用名称。<br/> |\n@| appVersion | string | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | `manifest.json` 中应用版本名称。<br/> |\n@| appVersionCode | string | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | `manifest.json` 中应用版本名号。<br/> |\n@| appLanguage | string | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 应用设置的语言en、zh-Hans、zh-Hant、fr、es\t<br/> |\n@| language | string | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | 应用设置的语言\t<br/> |\n@| ~~version~~ | string | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"x\",\"3.9\",\"4.11\"]]}' /> | 引擎版本号。已废弃,仅为了向下兼容保留  **已废弃,仅为了向下兼容保留** |\n@| isUniAppX | boolean | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.18\",\"3.9\",\"4.11\"]]}' /> | 是否uni-app x<br/> |\n@| ~~uniCompileVersion~~ | string | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"x\",\"3.9\",\"4.11\"]]}' /> | uni 编译器版本  **已废弃,仅为了向下兼容保留** |\n@| uniCompilerVersion | string | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.18\",\"4.0\",\"4.11\"]]}' /> | uni 编译器版本<br/> |\n@| uniPlatform | \"app\" \\| \"web\" \\| \"mp-weixin\" \\| \"mp-alipay\" \\| \"mp-baidu\" \\| \"mp-toutiao\" \\| \"mp-lark\" \\| \"mp-qq\" \\| \"mp-kuaishou\" \\| \"mp-jd\" \\| \"mp-360\" \\| \"quickapp-webview\" \\| \"quickapp-webview-union\" \\| \"quickapp-webview-huawei\" | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.0\",\"3.9\",\"4.11\"]]}' /> | uni-app 运行平台。<br/> |\n@| uniRuntimeVersion | string | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.18\",\"3.9\",\"4.11\"]]}' /> | uni 运行时版本<br/> |\n@| ~~uniCompileVersionCode~~ | number | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"x\",\"3.9\",\"4.11\"]]}' /> | uni 编译器版本号  **已废弃,仅为了向下兼容保留** |\n@| uniCompilerVersionCode | number | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"4.18\",\"4.0\",\"4.11\"]]}' /> | uni 编译器版本号<br/> |\n@| uniRuntimeVersionCode | number | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"x\",\"3.9\",\"4.11\"]]}' /> | uni 运行时版本号<br/> |\n@| packageName | string | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"x\",\"3.97\",\"x\"]]}' /> | Android的包名<br/> |\n@| bundleId | string | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"x\",\"x\",\"4.11\"]]}' /> | iOS的bundleId<br/> |\n@| signature | string | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"x\",\"3.97\",\"4.11\"]]}' /> | Android: 应用签名证书的SHA1值(全部为小写,中间不包含“:”)。 为了保证应用的安全性,请使用自己生成的证书(不要使用公共测试证书)。<br/>iOS: 应用签名证书中绑定的Bundle ID(AppleID)的md5值(全部为小写)。<br/> |\n@| appTheme | \"light\" \\| \"dark\" \\| \"auto\" | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"x\",\"4.18\",\"4.18\"]]}' /> | 当前App的主题<br/> | \n",
    "tutorial": "\n### 参见\n\n- [参见uni-app相关文档](https://uniapp.dcloud.net.cn/api/system/getAppBaseInfo.html)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=getAppBaseInfo&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=getAppBaseInfo&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=getAppBaseInfo&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=getAppBaseInfo&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=getAppBaseInfo&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=getAppBaseInfo)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=getAppBaseInfo&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.device.getAppBaseInfo)",
    "example": "### 示例 \n> [hello uni-app x](https://gitcode.net/dcloud/hello-uni-app-x/-/blob/dev/pages/API/get-app-base-info/get-app-base-info.uvue) \n ::: preview https://hellouniappx.dcloud.net.cn/web/#/pages/API/get-app-base-info/get-app-base-info\n>Template\n```vue\n<template>\r\n  <page-head :title=\"title\"></page-head>\r\n  <view class=\"uni-common-mt\">\r\n    <view class=\"uni-list\">\n      <view class=\"uni-list-cell\" v-for=\"(item,_) in items\" style=\"align-items: center;\">\n        <view class=\"uni-pd\">\n          <view class=\"uni-label\" style=\"width:180px;\">{{item.label}}</view>\n        </view>\n        <view class=\"uni-list-cell-db\">\n          <text style=\"width: 100%;\">{{ item.value == '' ? '未获取' : item.value }}</text>\n        </view>\n      </view>\r\n    </view>\r\n    <view class=\"uni-padding-wrap\">\r\n      <view class=\"uni-btn-v\">\r\n        <button type=\"primary\" @tap=\"getAppBaseInfo\">获取App基础信息</button>\r\n      </view>\r\n    </view>\r\n  </view>\r\n</template>\r\n\r\n\r\n<style>\r\n\t.uni-pd {\r\n\t\tpadding-left: 15px;\r\n\t}\r\n</style>\r\n\n```\n>Script\n```uts\n\n\ttype Item = {\n\t\tlabel : string,\n\t\tvalue : string,\n\t}\n\texport default {\r\n\t\tdata() {\r\n\t\t\treturn {\r\n\t\t\t\ttitle: 'getAppBaseInfo',\n\t\t\t\titems: [] as Item[],\r\n\t\t\t}\r\n\t\t},\r\n\t\tonUnload:function(){\r\n\t\t},\r\n\t\tmethods: {\r\n\t\t\tgetAppBaseInfo: function () {\n\t\t\t\tconst res = uni.getAppBaseInfo();\n        const res_str = JSON.stringify(res);\n        const res_obj =  JSON.parseObject(res_str);\n        const res_map = res_obj!.toMap();\n        let keys = [] as string[]\n        res_map.forEach((_, key) => {\n           keys.push(key);\n        });\n\n        this.items = [] as Item[];\n        keys.sort().forEach( key => {\n          const value = res[key];\n          if(value != null){\n            const item = {\n            \tlabel: key,\n            \tvalue: \"\" + ((typeof value == \"object\")? JSON.stringify(value) : value)\n            } as Item;\n            this.items.push(item);\n          }\n        });\n\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\n```\n:::"
  },
  "getAppAuthorizeSetting": {
    "name": "## uni.getAppAuthorizeSetting() @getappauthorizesetting",
    "description": "获取 APP 授权设置。",
    "compatibility": "### getAppAuthorizeSetting  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| x | 3.9 | 4.11 |\n",
    "param": "",
    "returnValue": "### 返回值  兼容性 \n\n| 类型 |\n| :- |\n| **GetAppAuthorizeSettingResult** |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| albumAuthorized | \"authorized\" \\| \"denied\" \\| \"not determined\" \\| \"config error\" | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"-\",\"x\",\"4.11\"]]}' /> | 允许 App 使用相册的开关(仅 iOS 支持)<br/>- authorized: 已经获得授权,无需再次请求授权<br/>- denied: 请求授权被拒绝,无法再次请求授权;(此情况需要引导用户打开系统设置,在设置页中打开权限)<br/>- not determined: 尚未请求授权,会在App下一次调用系统相应权限时请求;(仅 iOS 会出现。此种情况下引导用户打开系统设置,不展示开关)<br/>- config error: 当前应用没有配置相册权限描述 |\n@| bluetoothAuthorized | \"authorized\" \\| \"denied\" \\| \"not determined\" \\| \"config error\" | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"-\",\"x\",\"4.11\"]]}' /> | 允许 App 使用蓝牙的开关(仅 iOS 支持)<br/>- authorized: 已经获得授权,无需再次请求授权<br/>- denied: 请求授权被拒绝,无法再次请求授权;(此情况需要引导用户打开系统设置,在设置页中打开权限)<br/>- not determined: 尚未请求授权,会在App下一次调用系统相应权限时请求;(仅 iOS 会出现。此种情况下引导用户打开系统设置,不展示开关)<br/>- config error: Android平台没有该值;iOS平台:当前应用没有配置蓝牙权限描述 |\n@| cameraAuthorized | \"authorized\" \\| \"denied\" \\| \"not determined\" \\| \"config error\" | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"-\",\"3.9\",\"4.11\"]]}' /> | 允许 App 使用摄像头的开关<br/>- authorized: 已经获得授权,无需再次请求授权<br/>- denied: 请求授权被拒绝,无法再次请求授权;(此情况需要引导用户打开系统设置,在设置页中打开权限)<br/>- not determined: 尚未请求授权,会在App下一次调用系统相应权限时请求;(仅 iOS 会出现。此种情况下引导用户打开系统设置,不展示开关)<br/>- config error: Android平台:表示没有配置 `android.permission.CAMERA` 权限,[权限配置详情](https://uniapp.dcloud.net.cn/tutorial/app-nativeresource-android.html#permissions);iOS平台:当前应用没有配置相机权限描述 |\n@| locationAuthorized | \"authorized\" \\| \"denied\" \\| \"not determined\" \\| \"config error\" | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"-\",\"3.9\",\"4.11\"]]}' /> | 允许 App 使用定位的开关<br/>- authorized: 已经获得授权,无需再次请求授权<br/>- denied: 请求授权被拒绝,无法再次请求授权;(此情况需要引导用户打开系统设置,在设置页中打开权限)<br/>- not determined: 尚未请求授权,会在App下一次调用系统相应权限时请求;(仅 iOS 会出现。此种情况下引导用户打开系统设置,不展示开关)<br/>- config error: Android平台:表示没有配置 `android.permission.ACCESS_COARSE_LOCATION` 权限,[权限配置详情](https://uniapp.dcloud.net.cn/tutorial/app-nativeresource-android.html#permissions);iOS平台:当前应用没有配置定位权限描述 |\n@| locationAccuracy | \"reduced\" \\| \"full\" \\| \"unsupported\" | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"-\",\"3.9\",\"4.11\"]]}' /> | 定位准确度。<br/>- reduced: 模糊定位<br/>- full: 精准定位<br/>- unsupported: 不支持(包括用户拒绝定位权限和没有包含定位权限描述) |\n@| locationReducedAccuracy | boolean \\| null | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"-\",\"x\",\"4.11\"]]}' /> | 定位准确度(推荐使用 locationAccuracy 属性)。true 表示模糊定位,false 表示精确定位(仅 iOS 支持) |\n@| microphoneAuthorized | \"authorized\" \\| \"denied\" \\| \"not determined\" \\| \"config error\" | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"-\",\"3.9\",\"4.11\"]]}' /> | 允许 App 使用麦克风的开关<br/>- authorized: 已经获得授权,无需再次请求授权<br/>- denied: 请求授权被拒绝,无法再次请求授权;(此情况需要引导用户打开系统设置,在设置页中打开权限)<br/>- not determined: 尚未请求授权,会在App下一次调用系统相应权限时请求;(仅 iOS 会出现。此种情况下引导用户打开系统设置,不展示开关)<br/>- config error: Android平台:表示没有配置 `android.permission.RECORD_AUDIO` 权限,[权限配置详情](https://uniapp.dcloud.net.cn/tutorial/app-nativeresource-android.html#permissions);iOS平台:当前应用没有配置麦克风权限描述 |\n@| notificationAuthorized | \"authorized\" \\| \"denied\" \\| \"not determined\" \\| \"config error\" | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"-\",\"3.9\",\"4.11\"]]}' /> | 允许 App 通知的开关<br/>- authorized: 已经获得授权,无需再次请求授权<br/>- denied: 请求授权被拒绝,无法再次请求授权;(此情况需要引导用户打开系统设置,在设置页中打开权限)<br/>- not determined: 尚未请求授权,会在App下一次调用系统相应权限时请求;(仅 iOS 会出现。此种情况下引导用户打开系统设置,不展示开关)<br/>- config error: Android平台没有该值;iOS平台:没有包含推送权限描述 |\n@| notificationAlertAuthorized | \"authorized\" \\| \"denied\" \\| \"not determined\" \\| \"config error\" | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"-\",\"x\",\"4.11\"]]}' /> | 允许 App 通知带有提醒的开关(仅 iOS 支持)<br/>- authorized: 已经获得授权,无需再次请求授权<br/>- denied: 请求授权被拒绝,无法再次请求授权;(此情况需要引导用户打开系统设置,在设置页中打开权限)<br/>- not determined: 尚未请求授权,会在App下一次调用系统相应权限时请求;(仅 iOS 会出现。此种情况下引导用户打开系统设置,不展示开关)<br/>- config error: 当前应用没有配置推送权限描述 |\n@| notificationBadgeAuthorized | \"authorized\" \\| \"denied\" \\| \"not determined\" \\| \"config error\" | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"-\",\"x\",\"4.11\"]]}' /> | 允许 App 通知带有标记的开关(仅 iOS 支持)<br/>- authorized: 已经获得授权,无需再次请求授权<br/>- denied: 请求授权被拒绝,无法再次请求授权;(此情况需要引导用户打开系统设置,在设置页中打开权限)<br/>- not determined: 尚未请求授权,会在App下一次调用系统相应权限时请求;(仅 iOS 会出现。此种情况下引导用户打开系统设置,不展示开关)<br/>- config error: 当前应用没有配置推送权限描述 |\n@| notificationSoundAuthorized | \"authorized\" \\| \"denied\" \\| \"not determined\" \\| \"config error\" | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"-\",\"x\",\"4.11\"]]}' /> | 允许 App 通知带有声音的开关(仅 iOS 支持)<br/>- authorized: 已经获得授权,无需再次请求授权<br/>- denied: 请求授权被拒绝,无法再次请求授权;(此情况需要引导用户打开系统设置,在设置页中打开权限)<br/>- not determined: 尚未请求授权,会在App下一次调用系统相应权限时请求;(仅 iOS 会出现。此种情况下引导用户打开系统设置,不展示开关)<br/>- config error: 当前应用没有配置推送权限描述 | \n",
    "tutorial": "\n### 参见\n\n- [参见uni-app相关文档](http://uniapp.dcloud.io/api/system/getappauthorizesetting)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=getAppAuthorizeSetting&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=getAppAuthorizeSetting&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=getAppAuthorizeSetting&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=getAppAuthorizeSetting&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=getAppAuthorizeSetting&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=getAppAuthorizeSetting)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=getAppAuthorizeSetting&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.device.getAppAuthorizeSetting)",
    "example": "### 示例 \n> [hello uni-app x](https://gitcode.net/dcloud/hello-uni-app-x/-/blob/dev/pages/API/get-app-authorize-setting/get-app-authorize-setting.uvue) \n >\n> 该 API 不支持 Web,请运行 hello uni-app x 到 App 平台体验 \n```uvue\n<template>\r\n  <page-head :title=\"title\"></page-head>\r\n  <view class=\"uni-common-mt\">\r\n    <view class=\"uni-list\">\n      <!-- #ifdef APP-IOS -->\n      <view class=\"uni-list-cell\">\n        <view class=\"uni-pd\">\n          <view class=\"uni-label\" style=\"width:180px;\">是否授权使用相册</view>\n        </view>\n        <view class=\"uni-list-cell-db\">\n          <input type=\"text\" :disabled=\"true\" placeholder=\"未获取\" :value=\"albumAuthorized\" />\n        </view>\n      </view>\n      <view class=\"uni-list-cell\">\n        <view class=\"uni-pd\">\n          <view class=\"uni-label\" style=\"width:180px;\">是否授权使用蓝牙</view>\n        </view>\n        <view class=\"uni-list-cell-db\">\n          <input type=\"text\" :disabled=\"true\" placeholder=\"未获取\" :value=\"bluetoothAuthorized\" />\n        </view>\n      </view>\n       <!-- #endif -->\r\n      <view class=\"uni-list-cell\">\r\n        <view class=\"uni-pd\">\r\n          <view class=\"uni-label\" style=\"width:180px;\">是否授权使用摄像头</view>\r\n        </view>\r\n        <view class=\"uni-list-cell-db\">\r\n          <input type=\"text\" :disabled=\"true\" placeholder=\"未获取\" :value=\"cameraAuthorized\" />\r\n        </view>\r\n      </view>\r\n      <view class=\"uni-list-cell\">\r\n        <view class=\"uni-pd\">\r\n          <view class=\"uni-label\" style=\"width:180px;\">是否授权使用定位</view>\r\n        </view>\r\n        <view class=\"uni-list-cell-db\">\r\n          <input type=\"text\" :disabled=\"true\" placeholder=\"未获取\" :value=\"locationAuthorized\" />\r\n        </view>\r\n      </view>\r\n      <view class=\"uni-list-cell\">\r\n        <view class=\"uni-pd\">\r\n          <view class=\"uni-label\" style=\"width:180px;\">定位准确度</view>\r\n        </view>\r\n        <view class=\"uni-list-cell-db\">\r\n          <input type=\"text\" :disabled=\"true\" placeholder=\"未获取\" :value=\"locationAccuracy\" />\r\n        </view>\r\n      </view>\r\n      <view class=\"uni-list-cell\">\r\n        <view class=\"uni-pd\">\r\n          <view class=\"uni-label\" style=\"width:180px;\">是否授权使用麦克风</view>\r\n        </view>\r\n        <view class=\"uni-list-cell-db\">\r\n          <input type=\"text\" :disabled=\"true\" placeholder=\"未获取\" :value=\"microphoneAuthorized\" />\r\n        </view>\r\n      </view>\n\r\n      <view class=\"uni-list-cell\">\r\n        <view class=\"uni-pd\">\r\n          <view class=\"uni-label\" style=\"width:180px;\">是否授权通知</view>\r\n        </view>\r\n        <view class=\"uni-list-cell-db\">\r\n          <input type=\"text\" :disabled=\"true\" placeholder=\"未获取\" :value=\"notificationAuthorized\" />\r\n        </view>\r\n      </view>\n<!-- #ifdef APP-IOS -->\n      <view class=\"uni-list-cell\">\n        <view class=\"uni-pd\">\n          <view class=\"uni-label\" style=\"width:180px;\">是否允许通知带有提醒</view>\n        </view>\n        <view class=\"uni-list-cell-db\">\n          <input type=\"text\" :disabled=\"true\" placeholder=\"未获取\" :value=\"notificationAlertAuthorized\" />\n        </view>\n      </view>\n\n      <view class=\"uni-list-cell\">\n        <view class=\"uni-pd\">\n          <view class=\"uni-label\" style=\"width:180px;\">是否允许通知带有标记</view>\n        </view>\n        <view class=\"uni-list-cell-db\">\n          <input type=\"text\" :disabled=\"true\" placeholder=\"未获取\" :value=\"notificationBadgeAuthorized\" />\n        </view>\n      </view>\n      <view class=\"uni-list-cell\">\n        <view class=\"uni-pd\">\n          <view class=\"uni-label\" style=\"width:180px;\">是否允许通知带有声音</view>\n        </view>\n        <view class=\"uni-list-cell-db\">\n          <input type=\"text\" :disabled=\"true\" placeholder=\"未获取\" :value=\"notificationSoundAuthorized\" />\n        </view>\n      </view>\n<!-- #endif -->\r\n    </view>\r\n    <view class=\"uni-padding-wrap\">\r\n      <view class=\"uni-btn-v\">\r\n        <button type=\"primary\" @tap=\"getAppAuthorizeSetting\">获取App授权设置</button>\r\n      </view>\r\n    </view>\r\n  </view>\r\n</template>\r\n<script>\r\n  export default {\r\n    data() {\r\n      return {\r\n        title: 'getAppAuthorizeSetting',\r\n        cameraAuthorized: \"\",\n        albumAuthorized: \"\",\r\n        locationAuthorized: \"\",\r\n        locationAccuracy: \"\",\r\n        microphoneAuthorized: \"\",\n        bluetoothAuthorized: \"\",\r\n        notificationAuthorized: \"\",\n        notificationAlertAuthorized: \"\",\n        notificationBadgeAuthorized: \"\",\n        notificationSoundAuthorized: \"\"\r\n      }\r\n    },\r\n    onUnload: function () {\r\n    },\r\n    methods: {\r\n      getAppAuthorizeSetting: function () {\r\n        const res = uni.getAppAuthorizeSetting();\r\n        this.cameraAuthorized = res.cameraAuthorized;\r\n        this.locationAuthorized = res.locationAuthorized;\r\n        this.locationAccuracy = res.locationAccuracy ?? \"unsupported\";\r\n        this.microphoneAuthorized = res.microphoneAuthorized;\r\n        this.notificationAuthorized = res.notificationAuthorized;\n        // #ifdef APP-IOS\n        this.notificationAlertAuthorized = res.notificationAlertAuthorized;\n        this.notificationBadgeAuthorized = res.notificationBadgeAuthorized;\n        this.notificationSoundAuthorized = res.notificationSoundAuthorized;\n        this.bluetoothAuthorized = res.bluetoothAuthorized;\n        this.albumAuthorized = res.albumAuthorized;\n        // #endif\n\r\n      }\r\n    }\r\n  }\r\n</script>\r\n\r\n<style>\r\n  .uni-pd {\r\n    padding-left: 15px;\r\n  }\r\n</style>\n\n```"
  },
  "getSystemSetting": {
    "name": "## uni.getSystemSetting() @getsystemsetting",
    "description": "获取系统设置",
    "compatibility": "### getSystemSetting  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | 3.9 | 4.11 |\n",
    "param": "",
    "returnValue": "### 返回值  兼容性 \n\n| 类型 |\n| :- |\n| **GetSystemSettingResult** |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| bluetoothEnabled | boolean | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"-\",\"3.9\",\"4.11\"]]}' /> | 蓝牙是否开启<br/> |\n@| bluetoothError | string | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"-\",\"3.9\",\"4.11\"]]}' /> | 蓝牙的报错信息<br/> |\n@| locationEnabled | boolean | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"-\",\"3.9\",\"4.11\"]]}' /> | 位置是否开启<br/> |\n@| wifiEnabled | boolean | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"-\",\"3.9\",\"4.11\"]]}' /> | wifi是否开启<br/> |\n@| wifiError | string | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"-\",\"3.9\",\"x\"]]}' /> | wifi的报错信息<br/> |\n@| deviceOrientation | \"portrait\" \\| \"landscape\" | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"-\",\"3.9\",\"4.11\"]]}' /> | 设备方向<br/> | \n",
    "tutorial": "\n### 参见\n\n- [参见uni-app相关文档](https://uniapp.dcloud.net.cn/api/system/getsystemsetting.html)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=getSystemSetting&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=getSystemSetting&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=getSystemSetting&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=getSystemSetting&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=getSystemSetting&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=getSystemSetting)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=getSystemSetting&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.device.getSystemSetting)",
    "example": "### 示例 \n> [hello uni-app x](https://gitcode.net/dcloud/hello-uni-app-x/-/blob/dev/pages/API/get-system-setting/get-system-setting.uvue) \n >\n> 该 API 不支持 Web,请运行 hello uni-app x 到 App 平台体验 \n```uvue\n<template>\r\n  <page-head :title=\"title\"></page-head>\r\n  <view class=\"uni-common-mt\">\r\n    <view class=\"uni-list\">\r\n      <view class=\"uni-list-cell\">\r\n        <view class=\"uni-pd\">\r\n          <view class=\"uni-label\" style=\"width:180px;\">蓝牙的系统开关</view>\r\n        </view>\r\n        <view class=\"uni-list-cell-db\">\r\n          <input type=\"text\" :disabled=\"true\" placeholder=\"未获取\" :value=\"bluetoothEnabled\" />\r\n        </view>\r\n      </view>\r\n      <view class=\"uni-list-cell\">\r\n        <view class=\"uni-pd\">\r\n          <view class=\"uni-label\" style=\"width:180px;\">地理位置的系统开关</view>\r\n        </view>\r\n        <view class=\"uni-list-cell-db\">\r\n          <input type=\"text\" :disabled=\"true\" placeholder=\"未获取\" :value=\"locationEnabled\" />\r\n        </view>\r\n      </view>\r\n      <view class=\"uni-list-cell\">\r\n        <view class=\"uni-pd\">\r\n          <view class=\"uni-label\" style=\"width:180px;\">Wi-Fi 的系统开关</view>\r\n        </view>\r\n        <view class=\"uni-list-cell-db\">\r\n          <input type=\"text\" :disabled=\"true\" placeholder=\"未获取\" :value=\"wifiEnabled\" />\r\n        </view>\r\n      </view>\r\n      <view class=\"uni-list-cell\">\r\n        <view class=\"uni-pd\">\r\n          <view class=\"uni-label\" style=\"width:180px;\">设备方向</view>\r\n        </view>\r\n        <view class=\"uni-list-cell-db\">\r\n          <input type=\"text\" :disabled=\"true\" placeholder=\"未获取\" :value=\"deviceOrientation\" />\r\n        </view>\r\n      </view>\r\n    </view>\r\n    <view class=\"uni-padding-wrap\">\r\n      <view class=\"uni-btn-v\">\r\n        <button type=\"primary\" @tap=\"getSystemSetting\">获取系统设置</button>\r\n      </view>\r\n    </view>\r\n  </view>\r\n</template>\n\r\n<script>\r\n  export default {\r\n    data() {\r\n      return {\r\n        title: 'getSystemSetting',\r\n        bluetoothEnabled: \"\",\r\n        locationEnabled: \"\",\r\n        wifiEnabled: \"\",\r\n        deviceOrientation: \"\"\r\n      }\r\n    },\r\n    onUnload: function () {\r\n    },\r\n    methods: {\r\n      getSystemSetting: function () {\r\n        const res = uni.getSystemSetting();\r\n        this.bluetoothEnabled = (res.bluetoothEnabled ?? false) ? \"开启\" : \"关闭\";\r\n        this.locationEnabled = res.locationEnabled ? \"开启\" : \"关闭\";\r\n        this.wifiEnabled = (res.wifiEnabled ?? false) ? \"开启\" : \"关闭\";\r\n        this.deviceOrientation = res.deviceOrientation\n\n        if(res.bluetoothError != null){\n          this.bluetoothEnabled = \"无蓝牙权限\"\n        }\n\n        if(res.wifiError != null){\n          this.wifiEnabled = \"无WiFi权限\"\n        }\n      }\r\n    }\r\n  }\r\n</script>\r\n\r\n<style>\r\n  .uni-pd {\r\n    padding-left: 15px;\r\n  }\r\n</style>\n\n```"
  },
  "installApk": {
    "name": "## uni.installApk(options) @installapk",
    "description": "安装apk",
    "compatibility": "### installApk  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| x | 3.94 | x |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | [InstallApkOptions](#installapkoptions-values) | 是 | - | - |  |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| filePath | string | 是 | - | - | apk文件地址 |\n@| success | (res: [InstallApkSuccess](#installapksuccess-values)) => void \\| null | 否 | null | - | 接口调用成功的回调函数 |\n@| fail | (err: [InstallApkFail](#installapkfail-values)) => void \\| null | 否 | null | - | 接口调用失败的回调函数 |\n@| complete | (res: any) => void \\| null | 否 | null | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n##### InstallApkSuccess 的属性值 @installapksuccess-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errMsg | string | 是 | - | - | 安装成功消息 |\n\n##### InstallApkFail 的属性值 @installapkfail-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errCode | number | 是 | - | - | 错误码<br/>- 1300002 找不到文件 |\n| errSubject | string | 是 | - | - | 统一错误主题(模块)名称 |\n| data | any \\| null | 否 | - | - | 错误信息中包含的数据 |\n| cause | [Error](https://uniapp.dcloud.net.cn/tutorial/err-spec.html#unierror) \\| null | 否 | - | - | 源错误信息,可以包含多个错误,详见SourceError |\n| errMsg | string | 是 | - | - | - |\n",
    "returnValue": "",
    "tutorial": "\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=installApk&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=installApk&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=installApk&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=installApk&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=installApk&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=installApk)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=installApk&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.device.installApk)",
    "example": "### 示例 \n> [hello uni-app x](https://gitcode.net/dcloud/hello-uni-app-x/-/blob/dev/pages/API/install-apk/install-apk.uvue) \n >\n> 该 API 不支持 Web,请运行 hello uni-app x 到 App 平台体验 \n```uvue\n<template>\r\n  <!-- #ifdef APP -->\r\n  <scroll-view style=\"flex: 1\">\r\n  <!-- #endif -->\r\n    <view>\r\n      <page-head :title=\"title\"></page-head>\r\n      <view class=\"uni-common-mt\">\r\n        <view class=\"uni-padding-wrap\">\r\n          <view class=\"uni-btn-v\">\r\n            <button type=\"primary\" @tap=\"installApk\">\r\n              installApk\r\n            </button>\r\n          </view>\r\n        </view>\r\n      </view>\r\n    </view>\r\n  <!-- #ifdef APP -->\r\n  </scroll-view>\r\n  <!-- #endif -->\r\n</template>\r\n<script>\r\n  export default {\r\n    data() {\r\n      return {\r\n        title: 'installApk'\r\n      }\r\n    },\r\n    onUnload: function () {\r\n    },\r\n    methods: {\r\n      installApk: function () {\r\n        uni.installApk({\r\n          filePath: \"/static/test-apk/test.apk\",\r\n          complete(res : any) {\n            console.log(res);\r\n          }\r\n        })\r\n      },\r\n    }\r\n  }\r\n</script>\r\n<style>\r\n</style>\n\n```"
  },
  "getPushClientId": {
    "name": "## uni.getPushClientId(options) @getpushclientid",
    "description": "获取客户端唯一的推送标识",
    "compatibility": "### getPushClientId  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | 3.98 | 4.18 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | [GetPushClientIdOptions](#getpushclientidoptions-values) | 是 | - | - |  |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| success | (result: [GetPushClientIdSuccess](#getpushclientidsuccess-values)) => void \\| null | 否 | null | - | 接口调用成功的回调函数 |\n@| fail | (result: [UniError](https://uniapp.dcloud.net.cn/tutorial/err-spec.html#unierror)) => void \\| null | 否 | null | - | 接口调用失败的回调函数 |\n@| complete | (result: any) => void \\| null | 否 | null | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n##### GetPushClientIdSuccess 的属性值 @getpushclientidsuccess-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| cid | string | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"-\",\"3.98\",\"4.18\"]]}' /> | 个推客户端推送id,对应uni-id-device表的push_clientid<br/> |\n| errMsg | string | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"-\",\"3.98\",\"4.18\"]]}' /> | 错误描述<br/> |\n",
    "returnValue": "",
    "tutorial": "\n### 参见\n\n- [参见uni-app相关文档](http://uniapp.dcloud.io/api/plugins/push.html#getpushclientid)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=getPushClientId&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=getPushClientId&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=getPushClientId&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=getPushClientId&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=getPushClientId&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=getPushClientId)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=getPushClientId&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.push.uni-push.getPushClientId)"
  },
  "onPushMessage": {
    "name": "## uni.onPushMessage(callback) @onpushmessage",
    "description": "启动监听推送消息事件",
    "compatibility": "### onPushMessage  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | 3.98 | 4.18 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| callback | (result: [OnPushMessageCallbackResult](#onpushmessagecallbackresult-values)) => void | 是 | - | - |  | \n\n#### OnPushMessageCallbackResult 的属性值 @onpushmessagecallbackresult-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| type | \"click\" \\| \"receive\" | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"-\",\"3.98\",\"4.18\"]]}' /> | 事件类型<br/>- click 从系统推送服务点击消息启动应用事件<br/>- receive 应用从推送服务器接收到推送消息事件 |\n| data | [UTSJSONObject](/uts/buildin-object-api/utsjsonobject.md) | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"-\",\"3.98\",\"4.18\"]]}' /> | 消息内容<br/> |\n",
    "returnValue": "",
    "tutorial": "\n### 参见\n\n- [参见uni-app相关文档](http://uniapp.dcloud.io/api/plugins/push.html#onpushmessage)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=onPushMessage&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=onPushMessage&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=onPushMessage&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=onPushMessage&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=onPushMessage&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=onPushMessage)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=onPushMessage&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.push.uni-push.onPushMessage)"
  },
  "offPushMessage": {
    "name": "## uni.offPushMessage(callback) @offpushmessage",
    "description": "关闭推送消息监听事件,iOS端调用会关闭所有监听。",
    "compatibility": "### offPushMessage  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | 3.98 | 4.18 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| callback | (result: [OnPushMessageCallbackResult](#onpushmessagecallbackresult-values)) => void | 是 | - | - |  | \n\n#### OnPushMessageCallbackResult 的属性值 @onpushmessagecallbackresult-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| type | \"click\" \\| \"receive\" | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"-\",\"3.98\",\"4.18\"]]}' /> | 事件类型<br/>- click 从系统推送服务点击消息启动应用事件<br/>- receive 应用从推送服务器接收到推送消息事件 |\n| data | [UTSJSONObject](/uts/buildin-object-api/utsjsonobject.md) | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"-\",\"3.98\",\"4.18\"]]}' /> | 消息内容<br/> |\n",
    "returnValue": "",
    "tutorial": "\n### 参见\n\n- [参见uni-app相关文档](http://uniapp.dcloud.io/api/plugins/push.html#offpushmessage)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=offPushMessage&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=offPushMessage&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=offPushMessage&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=offPushMessage&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=offPushMessage&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=offPushMessage)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=offPushMessage&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.push.uni-push.offPushMessage)"
  },
  "getChannelManager": {
    "name": "## uni.getChannelManager() @getchannelmanager",
    "description": "获取通知渠道管理器,Android 8系统以上才可以设置通知渠道,Android 8系统以下返回null。",
    "compatibility": "### getChannelManager  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | 3.98 | x |\n",
    "param": "",
    "returnValue": "### 返回值  兼容性 \n\n| 类型 |\n| :- |\n| [ChannelManager](#channelmanager-values) |\n\n#### ChannelManager 的方法 @channelmanager-values \n\n#### setPushChannel(options) @setpushchannel\n设置推送渠道<br/>\n##### setPushChannel  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | 3.98 | x |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | **SetPushChannelOptions** | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| soundName | string \\| null | 否 | null | - | 添加的声音文件,注意raw目录下必须要有 ,不传此字段将使用默认铃音。 |\n@| channelId | string | 是 | - | - | 通知渠道id |\n@| channelDesc | string | 是 | - | - | 通知渠道描述 |\n@| enableLights | boolean \\| null | 否 | false | - | 呼吸灯闪烁 |\n@| enableVibration | boolean \\| null | 否 | false | - | 震动 |\n@| importance | number \\| null | 否 | 3 | - | 通知的重要性级别,可选范围IMPORTANCE_LOW:2、IMPORTANCE_DEFAULT:3、IMPORTANCE_HIGH:4 。 |\n@| lockscreenVisibility | number \\| null | 否 | -1000 | - | 锁屏可见性,可选范围VISIBILITY_PRIVATE:0、VISIBILITY_PUBLIC:1、VISIBILITY_SECRET:-1、VISIBILITY_NO_OVERRIDE:-1000。 | \n\n\n#### getAllChannels() @getallchannels\n获取当前应用注册的所有的通知渠道。<br/>\n##### getAllChannels  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | 3.98 | x |\n\n\n##### 返回值  兼容性 \n\n| 类型 |\n| :- |\n| Array\\<string\\> |\n \n \n",
    "tutorial": "\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=getChannelManager&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=getChannelManager&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=getChannelManager&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=getChannelManager&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=getChannelManager&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=getChannelManager)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=getChannelManager&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.push.uni-push.getChannelManager)"
  },
  "createPushMessage": {
    "name": "## uni.createPushMessage(options) @createpushmessage",
    "description": "创建本地通知栏消息",
    "compatibility": "### createPushMessage  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | 3.98 | 4.18 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | **CreatePushMessageOptions** | 是 | - | - |  |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| cover | boolean \\| null | 否 | false | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"-\",\"3.98\",\"4.18\"]]}' /> | 是否覆盖上一次提示的消息 |\n@| delay | number \\| null | 否 | 0 | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"-\",\"3.98\",\"4.18\"]]}' /> | 提示消息延迟显示的时间,单位为s |\n@| icon | string \\| null | 否 | null | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"-\",\"3.98\",\"x\"]]}' /> | 推送消息的图标 |\n@| sound | string \\| null | 否 | \"system\" | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"-\",\"3.98\",\"4.18\"]]}' /> | 推送消息的提示音<br/>- system: 使用系统通知提示音(默认值)<br/>- none: 不使用提示音 |\n@| title | string \\| null | 否 | App的名称 | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"-\",\"3.98\",\"4.18\"]]}' /> | 推送消息的标题 |\n@| content | string | 是 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"-\",\"3.98\",\"4.18\"]]}' /> | 消息显示的内容,在系统通知中心中显示的文本内容<br/> |\n@| payload | any \\| null | 否 | null | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"-\",\"3.98\",\"4.18\"]]}' /> | 消息承载的数据,可根据业务逻辑自定义数据格式 |\n@| when | number \\| null | 否 | 当前时间 | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"-\",\"3.98\",\"x\"]]}' /> | 消息上显示的提示时间 |\n@| channelId | string \\| null | 否 | \"DcloudChannelID\" | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"-\",\"3.98\",\"x\"]]}' /> | 渠道id |\n@| category | string \\| null | 否 | null | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"-\",\"3.98\",\"x\"]]}' /> | 通知类别 |\n@| success | (result: CreatePushMessageSuccess) => void \\| null | 否 | null | - | 接口调用成功的回调函数 |\n@| fail | (result: [UniError](https://uniapp.dcloud.net.cn/tutorial/err-spec.html#unierror)) => void \\| null | 否 | null | - | 接口调用失败的回调函数 |\n@| complete | (result: any) => void \\| null | 否 | null | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n",
    "returnValue": "",
    "tutorial": "\n### 参见\n\n- [参见uni-app相关文档](http://uniapp.dcloud.io/api/plugins/push.html#createpushmessage)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=createPushMessage&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=createPushMessage&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=createPushMessage&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=createPushMessage&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=createPushMessage&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=createPushMessage)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=createPushMessage&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.push.uni-push.createPushMessage)"
  },
  "push": {
    "example": "## 示例 \n> [hello uni-app x](https://gitcode.net/dcloud/hello-uni-app-x/-/blob/dev/pages/API/push/push.uvue) \n ::: preview https://hellouniappx.dcloud.net.cn/web/#/pages/API/push/push\n>Template\n```vue\n<template>\r\n  <!-- #ifdef APP -->\r\n  <scroll-view style=\"flex: 1\">\r\n    <!-- #ifdef APP-ANDROID -->\r\n    <button class=\"normal-button\" type=\"default\" @click=\"handleCreateChannel\">\r\n      创建通知渠道\r\n    </button>\r\n    <button class=\"normal-button\" type=\"default\" @click=\"handleGetAllChannels\">\r\n      获取所有通知渠道信息\r\n    </button>\r\n    <!-- #endif -->\r\n    <button class=\"normal-button\" type=\"default\" @click=\"handleCreateLocalNotification\">\r\n      创建本地通知消息\r\n    </button>\r\n    <button class=\"normal-button\" type=\"default\" @click=\"handleSetBadge\">\r\n      设置角标\r\n    </button>\r\n    <button class=\"normal-button\" type=\"default\" @click=\"handleCleanBadge\">\r\n      清空角标\r\n    </button>\r\n    <button class=\"normal-button\" type=\"default\" @click=\"handleGetClientId\">\r\n      获取cid\r\n    </button>\r\n  </scroll-view>\r\n  <!-- #endif -->\r\n</template>\r\n\r\n\r\n\r\n<style>\r\n  .normal-button {\r\n    width: 100%;\r\n  }\r\n</style>\n\n```\n>Script\n```uts\n\r\n  const handleCreateChannel = () => {\r\n    // #ifdef APP-ANDROID\r\n    const manager = uni.getChannelManager()\r\n    manager.setPushChannel({\r\n      channelId: \"msg-pass\",\r\n      channelDesc: \"留言审核通过\",\r\n    } as SetPushChannelOptions)\r\n    // #endif\r\n  }\r\n  const handleGetAllChannels = () => {\r\n    // #ifdef APP-ANDROID\r\n    const manager = uni.getChannelManager()\r\n    console.log(\"channels : \" + manager.getAllChannels());\r\n    // #endif\r\n  }\r\n  const handleCreateLocalNotification = () => {\r\n    // #ifdef APP-ANDROID\r\n    if (uni.getAppAuthorizeSetting().notificationAuthorized == \"authorized\") {\r\n      // #endif\r\n      handleCreateChannel()\r\n      uni.createPushMessage({\r\n        title: \"halo\",\r\n        content: \"world\",\r\n        // cover:true,\r\n        channelId: \"msg-pass\",\r\n        when: Date.now() + 10000,\r\n        icon: \"/static/uni.png\",\r\n        // delay:5,\r\n        payload: {\r\n          pkey: \"pvalue1\"\r\n        },\r\n        category: \"IM\",\r\n        success(res) {\r\n          console.log(\"res: \" + res);\r\n        },\r\n        fail(e) {\r\n          console.log(\"fail :\" + e);\r\n        }\r\n      })\r\n      // #ifdef APP-ANDROID\r\n    } else {\r\n      uni.showToast({\r\n        title: \"请在设置中开启通知权限\",\r\n        icon: \"error\"\r\n      })\r\n    }\r\n    // #endif\r\n  }\r\n  const handleGetClientId = () => {\r\n    uni.getPushClientId({\r\n      complete(e : any) {\r\n        console.log(e);\r\n      }\r\n    })\r\n  }\r\n  const handleSetBadge = () => {\r\n    uni.setAppBadgeNumber(5)\r\n  }\r\n  const handleCleanBadge = () => {\r\n    uni.setAppBadgeNumber(0)\r\n  }\r\n\n```\n:::"
  },
  "getBatteryInfo": {
    "name": "## uni.getBatteryInfo(options) @getbatteryinfo",
    "description": "获取电池电量信息<br/><br/><br/>> 本 API 是 [uni ext api](https://uniapp.dcloud.net.cn/api/extapi.html),需下载插件:[uni-getbatteryinfo](https://ext.dcloud.net.cn/plugin?name=uni-getbatteryinfo)<br/>",
    "compatibility": "### getBatteryInfo  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.9.0 | 4.11 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | [GetBatteryInfoOptions](#getbatteryinfooptions-values) | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| success | (res: [GetBatteryInfoSuccess](#getbatteryinfosuccess-values)) => void | 否 | - | - | 接口调用结束的回调函数(调用成功、失败都会执行) |\n@| fail | (res: UniError) => void | 否 | - | - | 接口调用失败的回调函数 |\n@| complete | (res: any) => void | 否 | - | - | 接口调用成功的回调 | \n\n##### GetBatteryInfoSuccess 的属性值 @getbatteryinfosuccess-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errMsg | string | 是 | - | - | - |\n| level | number | 是 | - | - | 设备电量,范围1 - 100 |\n| isCharging | boolean | 是 | - | - | 是否正在充电中 |\n",
    "returnValue": "",
    "tutorial": "\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=getBatteryInfo&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=getBatteryInfo&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=getBatteryInfo&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=getBatteryInfo&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=getBatteryInfo&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=getBatteryInfo)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=getBatteryInfo&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.device.getBatteryInfo.getBatteryInfo)",
    "example": "### 示例 \n> [hello uni-app x](https://gitcode.net/dcloud/hello-uni-app-x/-/blob/dev/pages/API/get-battery-info/get-battery-info.uvue) \n ::: preview https://hellouniappx.dcloud.net.cn/web/#/pages/API/get-battery-info/get-battery-info\n>Template\n```vue\n<template>\n  <view>\n    <text>当前电量:{{level}}%</text>\n    <text>是否充电中:{{isCharging}}</text>\n  </view>\n</template>\n\n\n\n```\n>Script\n```uts\n\n  export default {\n    data() {\n      return {\n        level: 0,\n        isCharging: false\n      }\n    },\n    onLoad() {\n      try {\n        uni.getBatteryInfo({\n          success: res => {\n            this.level = res.level;\n            this.isCharging = res.isCharging;\n          }\n        });\n      } catch (e) {\n        console.error((e as Error).message);\n        uni.showModal({\n          content: (e as Error).message,\n          showCancel: false\n        });\n      }\n    }\n  }\n\n```\n:::"
  },
  "getBatteryInfoSync": {
    "name": "## uni.getBatteryInfoSync() @getbatteryinfosync",
    "description": "同步获取电池电量信息<br/><br/><br/>> 本 API 是 [uni ext api](https://uniapp.dcloud.net.cn/api/extapi.html),需下载插件:[uni-getbatteryinfo](https://ext.dcloud.net.cn/plugin?name=uni-getbatteryinfo)<br/>",
    "compatibility": "### getBatteryInfoSync  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.9.0 | 4.11 |\n",
    "param": "",
    "returnValue": "### 返回值  兼容性 \n\n| 类型 |\n| :- |\n| **GetBatteryInfoResult** |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| level | number | 是 | - | - | 设备电量,范围1 - 100 |\n@| isCharging | boolean | 是 | - | - | 是否正在充电中 | \n",
    "tutorial": "\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=getBatteryInfoSync&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=getBatteryInfoSync&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=getBatteryInfoSync&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=getBatteryInfoSync&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=getBatteryInfoSync&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=getBatteryInfoSync)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=getBatteryInfoSync&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.device.getBatteryInfo.getBatteryInfoSync)"
  },
  "makePhoneCall": {
    "name": "## uni.makePhoneCall(options) @makephonecall",
    "description": "拨打电话<br/>",
    "compatibility": "### makePhoneCall  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | x | x |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | [MakePhoneCallOptions](#makephonecalloptions-values) | 是 | - | - | uni.makePhoneCall |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| phoneNumber | string | 是 | - | - | 需要拨打的电话号码 |\n@| success | (res: MakePhoneCallSuccess) => void | 否 | - | - | uni.makePhoneCall成功回调函数定义 |\n@| fail | (res: [IMakePhoneCallError](#imakephonecallerror-values)) => void | 否 | - | - | uni.makePhoneCall失败回调函数定义 |\n@| complete | (res: any) => void | 否 | - | - | uni.makePhoneCall完成回调函数定义 | \n\n##### IMakePhoneCallError 的属性值 @imakephonecallerror-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errCode | number | 是 | - | - | - |\n| errSubject | string | 是 | - | - | 统一错误主题(模块)名称 |\n| data | any \\| null | 否 | - | - | 错误信息中包含的数据 |\n| cause | [Error](https://uniapp.dcloud.net.cn/tutorial/err-spec.html#unierror) \\| null | 否 | - | - | 源错误信息,可以包含多个错误,详见SourceError |\n| errMsg | string | 是 | - | - | - |\n",
    "returnValue": "",
    "tutorial": "\n### 参见\n\n- [参见uni-app x相关文档](https://doc.dcloud.net.cn/uni-app-x/api/make-phone-call.html)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=makePhoneCall&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=makePhoneCall&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=makePhoneCall&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=makePhoneCall&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=makePhoneCall&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=makePhoneCall)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=makePhoneCall&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.device.makePhoneCall)",
    "example": "### 示例 \n> [hello uni-app x](https://gitcode.net/dcloud/hello-uni-app-x/-/blob/dev/pages/API/make-phone-call/make-phone-call.uvue) \n ::: preview https://hellouniappx.dcloud.net.cn/web/#/pages/API/make-phone-call/make-phone-call\n>Template\n```vue\n<template>\n\t<view>\n\t\t<page-head :title=\"title\"></page-head>\n\t\t<view class=\"uni-padding-wrap uni-common-mt\">\n\t\t\t<view class=\"uni-hello-text uni-center\">请在下方输入电话号码</view>\n\t\t\t<input class=\"input uni-common-mt\" type=\"number\" name=\"input\" @input=\"bindInput\" />\n\t\t\t<view class=\"uni-btn-v uni-common-mt\">\n\t\t\t\t<button @tap=\"makePhoneCall\" type=\"primary\" :disabled=\"disabled\">拨打</button>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n\n<style>\n\t.input {\n\t\theight: 119rpx;\n\t\tline-height: 119rpx;\n\t\tfont-size: 78rpx;\n\t\tborder-bottom: 1rpx solid #E2E2E2;\n\t\ttext-align:center;\n\t}\n</style>\n\n```\n>Script\n```uts\n\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\ttitle: 'makePhoneCall',\n\t\t\t\tdisabled: true,\n        inputValue:''\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\tbindInput: function (e : UniInputEvent) {\n\t\t\t\tthis.inputValue = e.detail.value\n\t\t\t\tif (this.inputValue.length > 0) {\n\t\t\t\t\tthis.disabled = false\n\t\t\t\t} else {\n\t\t\t\t\tthis.disabled = true\n\t\t\t\t}\n\t\t\t},\n\t\t\tmakePhoneCall: function () {\n\t\t\t\tuni.makePhoneCall({\n\t\t\t\t\tphoneNumber: this.inputValue,\n\t\t\t\t\tsuccess: () => {\n\t\t\t\t\t\tconsole.log(\"成功拨打电话\")\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t}\n\n```\n:::"
  },
  "onCompassChange": {
    "name": "## uni.onCompassChange(callback) @oncompasschange",
    "description": "监听罗盘数据<br/>",
    "compatibility": "### onCompassChange  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | x | x |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| callback | (result: [OnCompassChangeSuccess](#oncompasschangesuccess-values)) => void | 是 | - | - | - | \n\n#### OnCompassChangeSuccess 的属性值 @oncompasschangesuccess-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| direction | number | 是 | - | - | 面对的方向度数 |\n",
    "returnValue": "",
    "tutorial": "\n### 参见\n - [参见uni-app相关文档](https://uniapp.dcloud.io/api/system/compass.html#oncompasschange)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=onCompassChange&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=onCompassChange&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=onCompassChange&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=onCompassChange&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=onCompassChange&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=onCompassChange)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=onCompassChange&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.device.onCompassChange)"
  },
  "offCompassChange": {
    "name": "## uni.offCompassChange(callback) @offcompasschange",
    "description": "取消监听罗盘数据<br/>",
    "compatibility": "### offCompassChange  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | x | x |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| callback | (result: any) => void | 是 | - | - | - | \n",
    "returnValue": "",
    "tutorial": "\n### 参见\n - [参见uni-app相关文档](https://uniapp.dcloud.io/api/system/compass.html#offcompasschange)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=offCompassChange&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=offCompassChange&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=offCompassChange&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=offCompassChange&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=offCompassChange&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=offCompassChange)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=offCompassChange&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.device.offCompassChange)"
  },
  "startCompass": {
    "name": "## uni.startCompass(options?) @startcompass",
    "description": "开始监听罗盘数据<br/>",
    "compatibility": "### startCompass  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | x | x |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | [StartCompassOptions](#startcompassoptions-values) | 否 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| success | (res: CompassSuccess) => void | 否 | - | - | uni.startCompass成功回调函数定义 |\n@| fail | (res: [ICompassError](#icompasserror-values)) => void | 否 | - | - | uni.startCompass失败回调函数定义 |\n@| complete | (res: any) => void | 否 | - | - | uni.startCompass完成回调函数定义 | \n\n##### ICompassError 的属性值 @icompasserror-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errCode | number | 是 | - | - | - |\n| errSubject | string | 是 | - | - | 统一错误主题(模块)名称 |\n| data | any \\| null | 否 | - | - | 错误信息中包含的数据 |\n| cause | [Error](https://uniapp.dcloud.net.cn/tutorial/err-spec.html#unierror) \\| null | 否 | - | - | 源错误信息,可以包含多个错误,详见SourceError |\n| errMsg | string | 是 | - | - | - |\n",
    "returnValue": "",
    "tutorial": "\n### 参见\n - [参见uni-app相关文档](https://uniapp.dcloud.io/api/system/compass.html#startcompass)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=startCompass&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=startCompass&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=startCompass&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=startCompass&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=startCompass&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=startCompass)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=startCompass&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.device.startCompass)"
  },
  "stopCompass": {
    "name": "## uni.stopCompass(options?) @stopcompass",
    "description": "停止监听罗盘数据<br/>",
    "compatibility": "### stopCompass  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | x | x |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | [StopCompassOptions](#stopcompassoptions-values) | 否 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| success | (res: CompassSuccess) => void | 否 | - | - | 成功返回的回调函数 |\n@| fail | (res: [ICompassError](#icompasserror-values)) => void | 否 | - | - | 失败的回调函数 |\n@| complete | (res: any) => void | 否 | - | - | 结束的回调函数(调用成功、失败都会执行) | \n\n##### ICompassError 的属性值 @icompasserror-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errCode | number | 是 | - | - | - |\n| errSubject | string | 是 | - | - | 统一错误主题(模块)名称 |\n| data | any \\| null | 否 | - | - | 错误信息中包含的数据 |\n| cause | [Error](https://uniapp.dcloud.net.cn/tutorial/err-spec.html#unierror) \\| null | 否 | - | - | 源错误信息,可以包含多个错误,详见SourceError |\n| errMsg | string | 是 | - | - | - |\n",
    "returnValue": "",
    "tutorial": "\n### 参见\n - [参见uni-app相关文档](https://uniapp.dcloud.io/api/system/compass.html#stopcompass)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=stopCompass&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=stopCompass&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=stopCompass&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=stopCompass&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=stopCompass&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=stopCompass)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=stopCompass&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.device.stopCompass)"
  },
  "compass": {
    "example": "## 示例 \n> [hello uni-app x](https://gitcode.net/dcloud/hello-uni-app-x/-/blob/dev/pages/API/compass/compass.uvue) \n ::: preview https://hellouniappx.dcloud.net.cn/web/#/pages/API/compass/compass\n>Template\n```vue\n<template>\n\t<view>\n\t\t<page-head :title=\"title\"></page-head>\n\t\t<view class=\"uni-padding-wrap\">\n\t\t\t<view class=\"uni-hello-text uni-center\" style=\"padding-bottom:50rpx;\">\n\t\t\t\t旋转手机即可获取方位信息\n\t\t\t</view>\n\t\t\t<view class=\"direction\">\n\t\t\t\t<view class=\"bg-compass-line\"></view>\n\t\t\t\t<image class=\"bg-compass\" src=\"../../../static/compass.png\" :style=\"'transform: rotate('+direction+'deg)'\"></image>\n\t\t\t\t<view class=\"direction-value\">\n\t\t\t\t\t<text>{{direction}}</text>\n\t\t\t\t\t<text class=\"direction-degree\">o</text>\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n\n<style>\n\t.direction {\n\t\tposition: relative;\n\t\tmargin-top: 70rpx;\n\t\tdisplay: flex;\n\t\twidth: 540rpx;\n\t\theight: 540rpx;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\tmargin:0 auto;\n\t}\n\n\t.direction-value {\n\t\tposition: relative;\n\t\tfont-size: 200rpx;\n\t\tcolor: #353535;\n\t\tline-height: 1;\n\t\tz-index: 1;\n\t}\n\n\t.direction-degree {\n\t\tposition: absolute;\n\t\ttop: 0;\n\t\tright: -40rpx;\n\t\tfont-size: 60rpx;\n\t}\n\n\t.bg-compass {\n\t\tposition: absolute;\n\t\ttop: 0;\n\t\tleft: 0;\n\t\twidth: 540rpx;\n\t\theight: 540rpx;\n\t\ttransition: .1s;\n\t}\n\n\t.bg-compass-line {\n\t\tposition: absolute;\n\t\tleft: 267rpx;\n\t\ttop: -10rpx;\n\t\twidth: 6rpx;\n\t\theight: 56rpx;\n\t\tbackground-color: #1AAD19;\n\t\tborder-radius: 999rpx;\n\t\tz-index: 1;\n\t}\n</style>\n\n```\n>Script\n```uts\n\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\ttitle: 'onCompassChange',\n\t\t\t\tdirection: 0\n\t\t\t}\n\t\t},\n\t\tonReady: function () {\n\t\t\tuni.onCompassChange((res) => {\n        console.log('onCompassChange', res)\n\t\t\t\tthis.direction = res.direction\n\t\t\t})\n\t\t},\n\t\tonUnload() {\n\t\t\tuni.stopCompass();\n\t\t\tthis.direction = 0;\n\t\t}\n\t}\n\n```\n:::"
  },
  "startWifi": {
    "name": "## uni.startWifi(option) @startwifi",
    "description": "初始化Wi-Fi模块<br/><br/><br/>> 本 API 是 [uni ext api](https://uniapp.dcloud.net.cn/api/extapi.html),需下载插件:[uni-wifi](https://ext.dcloud.net.cn/plugin?name=uni-wifi)<br/>",
    "compatibility": "### startWifi  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | 3.9.0 | 4.11 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| option | [WifiOption](#wifioption-values) | 是 | - | - |  |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| success | (res: [UniWifiResult](#uniwifiresult-values)) => void | 否 | - | - | - |\n@| fail | (res: UniError) => void | 否 | - | - | - |\n@| complete | (res: any) => void | 否 | - | - | - | \n\n##### UniWifiResult 的属性值 @uniwifiresult-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errCode | number | 是 | - | - | - |\n| errSubject | string | 是 | - | - | - |\n| errMsg | string | 是 | - | - | - |\n| wifi | **UniWifiInfo** \\| null | 否 | - | - |  |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| SSID | string | 是 | - | - | - |\n@| BSSID | string | 否 | - | - | - |\n@| secure | boolean | 否 | - | - | - |\n@| signalStrength | number | 否 | - | - | - |\n@| frequency | number | 否 | - | - | - |\n",
    "returnValue": "",
    "tutorial": "\n### 参见\n\n- [参见uni-app相关文档](https://uniapp.dcloud.net.cn/api/system/wifi.html#startwifi)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=startWifi&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=startWifi&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=startWifi&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=startWifi&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=startWifi&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=startWifi)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=startWifi&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.device.wifi.startWifi)"
  },
  "stopWifi": {
    "name": "## uni.stopWifi(option) @stopwifi",
    "description": "关闭 Wi-Fi 模块<br/><br/><br/>> 本 API 是 [uni ext api](https://uniapp.dcloud.net.cn/api/extapi.html),需下载插件:[uni-wifi](https://ext.dcloud.net.cn/plugin?name=uni-wifi)<br/>",
    "compatibility": "### stopWifi  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | x | 4.11 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| option | [WifiOption](#wifioption-values) | 是 | - | - |  |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| success | (res: [UniWifiResult](#uniwifiresult-values)) => void | 否 | - | - | - |\n@| fail | (res: UniError) => void | 否 | - | - | - |\n@| complete | (res: any) => void | 否 | - | - | - | \n\n##### UniWifiResult 的属性值 @uniwifiresult-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errCode | number | 是 | - | - | - |\n| errSubject | string | 是 | - | - | - |\n| errMsg | string | 是 | - | - | - |\n| wifi | **UniWifiInfo** \\| null | 否 | - | - |  |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| SSID | string | 是 | - | - | - |\n@| BSSID | string | 否 | - | - | - |\n@| secure | boolean | 否 | - | - | - |\n@| signalStrength | number | 否 | - | - | - |\n@| frequency | number | 否 | - | - | - |\n",
    "returnValue": "",
    "tutorial": "\n### 参见\n\n- [参见uni-app相关文档](https://uniapp.dcloud.net.cn/api/system/wifi.html#stopwifi)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=stopWifi&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=stopWifi&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=stopWifi&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=stopWifi&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=stopWifi&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=stopWifi)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=stopWifi&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.device.wifi.stopWifi)"
  },
  "connectWifi": {
    "name": "## uni.connectWifi(option) @connectwifi",
    "description": "",
    "compatibility": "### connectWifi  兼容性 \n| Web | Android 系统版本 | Android | iOS |\n| :- | :- | :- | :- |\n| - | >=4.4 && <10.0 | 3.9.0 | 4.11 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| option | [WifiConnectOption](#wificonnectoption-values) | 是 | - | - |  |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| SSID | string | 否 | - | - | - |\n@| BSSID | string | 否 | - | - | - |\n@| password | string | 否 | - | - | - |\n@| maunal | boolean | 否 | - | - | - |\n@| partialInfo | boolean | 否 | - | - | - |\n@| success | (res: [UniWifiResult](#uniwifiresult-values)) => void | 否 | - | - | - |\n@| fail | (res: UniError) => void | 否 | - | - | - |\n@| complete | (res: any) => void | 否 | - | - | - | \n\n##### UniWifiResult 的属性值 @uniwifiresult-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errCode | number | 是 | - | - | - |\n| errSubject | string | 是 | - | - | - |\n| errMsg | string | 是 | - | - | - |\n| wifi | **UniWifiInfo** \\| null | 否 | - | - |  |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| SSID | string | 是 | - | - | - |\n@| BSSID | string | 否 | - | - | - |\n@| secure | boolean | 否 | - | - | - |\n@| signalStrength | number | 否 | - | - | - |\n@| frequency | number | 否 | - | - | - |\n",
    "returnValue": "",
    "tutorial": "\n### 参见\n\n- [参见uni-app相关文档](https://uniapp.dcloud.net.cn/api/system/wifi.html#connectWifi)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=connectWifi&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=connectWifi&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=connectWifi&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=connectWifi&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=connectWifi&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=connectWifi)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=connectWifi&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.device.wifi.connectWifi)"
  },
  "getWifiList": {
    "name": "## uni.getWifiList(option) @getwifilist",
    "description": "请求获取 Wi-Fi 列表。wifiList 数据会在 onGetWifiList 注册的回调中返回。<br/><br/>> 本 API 是 [uni ext api](https://uniapp.dcloud.net.cn/api/extapi.html),需下载插件:[uni-wifi](https://ext.dcloud.net.cn/plugin?name=uni-wifi)<br/>",
    "compatibility": "### getWifiList  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | 3.9.0 | 4.11 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| option | [WifiOption](#wifioption-values) | 是 | - | - |  |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| success | (res: [UniWifiResult](#uniwifiresult-values)) => void | 否 | - | - | - |\n@| fail | (res: UniError) => void | 否 | - | - | - |\n@| complete | (res: any) => void | 否 | - | - | - | \n\n##### UniWifiResult 的属性值 @uniwifiresult-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errCode | number | 是 | - | - | - |\n| errSubject | string | 是 | - | - | - |\n| errMsg | string | 是 | - | - | - |\n| wifi | **UniWifiInfo** \\| null | 否 | - | - |  |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| SSID | string | 是 | - | - | - |\n@| BSSID | string | 否 | - | - | - |\n@| secure | boolean | 否 | - | - | - |\n@| signalStrength | number | 否 | - | - | - |\n@| frequency | number | 否 | - | - | - |\n",
    "returnValue": "",
    "tutorial": "\n### 参见\n\n- [参见uni-app相关文档](https://uniapp.dcloud.net.cn/api/system/wifi.html#getWifiList)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=getWifiList&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=getWifiList&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=getWifiList&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=getWifiList&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=getWifiList&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=getWifiList)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=getWifiList&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.device.wifi.getWifiList)"
  },
  "onGetWifiList": {
    "name": "## uni.onGetWifiList(callback) @ongetwifilist",
    "description": "监听获取到 Wi-Fi 列表数据事件。<br/><br/><br/>> 本 API 是 [uni ext api](https://uniapp.dcloud.net.cn/api/extapi.html),需下载插件:[uni-wifi](https://ext.dcloud.net.cn/plugin?name=uni-wifi)<br/>",
    "compatibility": "### onGetWifiList  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | 3.9.0 | 4.11 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| callback | (wifiInfo: any) => void | 是 | - | - |  | \n",
    "returnValue": "",
    "tutorial": "\n### 参见\n\n- [参见uni-app相关文档](https://uniapp.dcloud.net.cn/api/system/wifi.html#onGetWifiList)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=onGetWifiList&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=onGetWifiList&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=onGetWifiList&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=onGetWifiList&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=onGetWifiList&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=onGetWifiList)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=onGetWifiList&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.device.wifi.onGetWifiList)"
  },
  "offGetWifiList": {
    "name": "## uni.offGetWifiList(callback) @offgetwifilist",
    "description": "移除获取到 Wi-Fi 列表数据事件的监听函数。<br/><br/><br/>> 本 API 是 [uni ext api](https://uniapp.dcloud.net.cn/api/extapi.html),需下载插件:[uni-wifi](https://ext.dcloud.net.cn/plugin?name=uni-wifi)<br/>",
    "compatibility": "### offGetWifiList  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | 3.9.0 | 4.11 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| callback | () => void | 是 | - | - |  | \n",
    "returnValue": "",
    "tutorial": "\n### 参见\n\n- [参见uni-app相关文档](https://uniapp.dcloud.net.cn/api/system/wifi.html#offGetWifiList)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=offGetWifiList&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=offGetWifiList&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=offGetWifiList&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=offGetWifiList&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=offGetWifiList&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=offGetWifiList)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=offGetWifiList&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.device.wifi.offGetWifiList)"
  },
  "getConnectedWifi": {
    "name": "## uni.getConnectedWifi(option) @getconnectedwifi",
    "description": "获取已连接的 Wi-Fi 信息<br/><br/><br/>> 本 API 是 [uni ext api](https://uniapp.dcloud.net.cn/api/extapi.html),需下载插件:[uni-wifi](https://ext.dcloud.net.cn/plugin?name=uni-wifi)<br/>",
    "compatibility": "### getConnectedWifi  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | 3.9.0 | 4.11 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| option | [GetConnectedWifiOptions](#getconnectedwifioptions-values) | 是 | - | - |  |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| partialInfo | boolean | 否 | - | - | - |\n@| success | (res: [UniWifiResult](#uniwifiresult-values)) => void | 否 | - | - | - |\n@| fail | (res: UniError) => void | 否 | - | - | - |\n@| complete | (res: any) => void | 否 | - | - | - | \n\n##### UniWifiResult 的属性值 @uniwifiresult-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errCode | number | 是 | - | - | - |\n| errSubject | string | 是 | - | - | - |\n| errMsg | string | 是 | - | - | - |\n| wifi | **UniWifiInfo** \\| null | 否 | - | - |  |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| SSID | string | 是 | - | - | - |\n@| BSSID | string | 否 | - | - | - |\n@| secure | boolean | 否 | - | - | - |\n@| signalStrength | number | 否 | - | - | - |\n@| frequency | number | 否 | - | - | - |\n",
    "returnValue": "",
    "tutorial": "\n### 参见\n\n- [参见uni-app相关文档](https://uniapp.dcloud.net.cn/api/system/wifi.html#getConnectedWifi)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=getConnectedWifi&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=getConnectedWifi&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=getConnectedWifi&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=getConnectedWifi&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=getConnectedWifi&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=getConnectedWifi)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=getConnectedWifi&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.device.wifi.getConnectedWifi)"
  },
  "onWifiConnected": {
    "name": "## uni.onWifiConnected(callback) @onwificonnected",
    "description": "监听连接上 Wi-Fi 的事件<br/><br/><br/>> 本 API 是 [uni ext api](https://uniapp.dcloud.net.cn/api/extapi.html),需下载插件:[uni-wifi](https://ext.dcloud.net.cn/plugin?name=uni-wifi)<br/>",
    "compatibility": "### onWifiConnected  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | 3.9.0 | 4.11 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| callback | (wifiInfo: [UniWifiResult](#uniwifiresult-values)) => void | 是 | - | - |  | \n\n#### UniWifiResult 的属性值 @uniwifiresult-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errCode | number | 是 | - | - | - |\n| errSubject | string | 是 | - | - | - |\n| errMsg | string | 是 | - | - | - |\n| wifi | **UniWifiInfo** \\| null | 否 | - | - |  |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| SSID | string | 是 | - | - | - |\n@| BSSID | string | 否 | - | - | - |\n@| secure | boolean | 否 | - | - | - |\n@| signalStrength | number | 否 | - | - | - |\n@| frequency | number | 否 | - | - | - |\n",
    "returnValue": "",
    "tutorial": "\n### 参见\n\n- [参见uni-app相关文档](https://uniapp.dcloud.net.cn/api/system/wifi.html#onWifiConnected)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=onWifiConnected&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=onWifiConnected&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=onWifiConnected&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=onWifiConnected&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=onWifiConnected&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=onWifiConnected)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=onWifiConnected&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.device.wifi.onWifiConnected)"
  },
  "onWifiConnectedWithPartialInfo": {
    "name": "## uni.onWifiConnectedWithPartialInfo(callback) @onwificonnectedwithpartialinfo",
    "description": "监听连接上 Wi-Fi 的事件。<br/><br/><br/>> 本 API 是 [uni ext api](https://uniapp.dcloud.net.cn/api/extapi.html),需下载插件:[uni-wifi](https://ext.dcloud.net.cn/plugin?name=uni-wifi)<br/>",
    "compatibility": "### onWifiConnectedWithPartialInfo  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | 3.9.0 | 4.11 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| callback | (wifiInfo: [UniWifiInfoWithPartialInfo](#uniwifiinfowithpartialinfo-values)) => void | 是 | - | - |  | \n\n#### UniWifiInfoWithPartialInfo 的属性值 @uniwifiinfowithpartialinfo-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| SSID | string | 是 | - | - | - |\n",
    "returnValue": "",
    "tutorial": "\n### 参见\n\n- [参见uni-app相关文档](https://uniapp.dcloud.net.cn/api/system/wifi.html#onWifiConnectedWithPartialInfo)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=onWifiConnectedWithPartialInfo&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=onWifiConnectedWithPartialInfo&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=onWifiConnectedWithPartialInfo&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=onWifiConnectedWithPartialInfo&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=onWifiConnectedWithPartialInfo&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=onWifiConnectedWithPartialInfo)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=onWifiConnectedWithPartialInfo&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.device.wifi.onWifiConnectedWithPartialInfo)"
  },
  "offWifiConnected": {
    "name": "## uni.offWifiConnected(callback?) @offwificonnected",
    "description": "移除连接上 Wi-Fi 的事件的监听函数。<br/><br/><br/>> 本 API 是 [uni ext api](https://uniapp.dcloud.net.cn/api/extapi.html),需下载插件:[uni-wifi](https://ext.dcloud.net.cn/plugin?name=uni-wifi)<br/>",
    "compatibility": "### offWifiConnected  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | 3.9.0 | 4.11 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| callback | () => void \\| null | 否 | - | - |  | \n",
    "returnValue": "",
    "tutorial": "\n### 参见\n\n- [参见uni-app相关文档](https://uniapp.dcloud.net.cn/api/system/wifi.html#offWifiConnected)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=offWifiConnected&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=offWifiConnected&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=offWifiConnected&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=offWifiConnected&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=offWifiConnected&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=offWifiConnected)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=offWifiConnected&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.device.wifi.offWifiConnected)"
  },
  "onMemoryWarning": {
    "name": "## uni.onMemoryWarning(callback) @onmemorywarning",
    "description": "开启监听内存警告<br/><br/><br/>> 本 API 是 [uni ext api](https://uniapp.dcloud.net.cn/api/extapi.html),需下载插件:[uni-memorywarning](https://ext.dcloud.net.cn/plugin?name=uni-memorywarning)<br/>",
    "compatibility": "### onMemoryWarning  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | 3.9.0 | 4.11 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| callback | (res: [MemoryWarningCallbackResult](#memorywarningcallbackresult-values)) => void | 是 | - | - |  | \n\n#### MemoryWarningCallbackResult 的属性值 @memorywarningcallbackresult-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| level | number | 是 | - | - | 内存警告等级(仅安卓平台有效,iOS始终是0) |\n",
    "returnValue": "",
    "tutorial": "\n### 参见\n\n- [参见uni-app相关文档](https://uniapp.dcloud.net.cn/api/system/memory.html#onmemorywarning)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=onMemoryWarning&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=onMemoryWarning&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=onMemoryWarning&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=onMemoryWarning&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=onMemoryWarning&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=onMemoryWarning)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=onMemoryWarning&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.device.memory.onMemoryWarning)"
  },
  "offMemoryWarning": {
    "name": "## uni.offMemoryWarning(callback?) @offmemorywarning",
    "description": "取消监听内存不足告警事件<br/><br/><br/>> 本 API 是 [uni ext api](https://uniapp.dcloud.net.cn/api/extapi.html),需下载插件:[uni-memorywarning](https://ext.dcloud.net.cn/plugin?name=uni-memorywarning)<br/>",
    "compatibility": "### offMemoryWarning  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | 3.9.0 | 4.11 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| callback | (res: [MemoryWarningCallbackResult](#memorywarningcallbackresult-values)) => void \\| null | 否 | - | - |  | \n\n#### MemoryWarningCallbackResult 的属性值 @memorywarningcallbackresult-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| level | number | 是 | - | - | 内存警告等级(仅安卓平台有效,iOS始终是0) |\n",
    "returnValue": "",
    "tutorial": "\n### 参见\n\n- [参见uni-app相关文档](https://uniapp.dcloud.net.cn/api/system/memory.html#offmemorywarning)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=offMemoryWarning&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=offMemoryWarning&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=offMemoryWarning&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=offMemoryWarning&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=offMemoryWarning&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=offMemoryWarning)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=offMemoryWarning&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.device.memory.offMemoryWarning)"
  },
  "onUserCaptureScreen": {
    "name": "## uni.onUserCaptureScreen(callback?) @onusercapturescreen",
    "description": "开启截屏监听<br/><br/><br/>> 本 API 是 [uni ext api](https://uniapp.dcloud.net.cn/api/extapi.html),需下载插件:[uni-usercapturescreen](https://ext.dcloud.net.cn/plugin?name=uni-usercapturescreen)<br/>",
    "compatibility": "### onUserCaptureScreen  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | 3.9.0 | 4.11 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| callback | (res: [OnUserCaptureScreenCallbackResult](#onusercapturescreencallbackresult-values)) => void \\| null | 否 | - | - |  | \n\n#### OnUserCaptureScreenCallbackResult 的属性值 @onusercapturescreencallbackresult-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| path | string | 否 | - | - | 截屏文件路径(仅Android返回) |\n",
    "returnValue": "",
    "tutorial": "\n### 参见\n\n- [参见uni-app相关文档](https://uniapp.dcloud.net.cn/api/system/capture-screen.html#onusercapturescreen)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=onUserCaptureScreen&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=onUserCaptureScreen&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=onUserCaptureScreen&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=onUserCaptureScreen&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=onUserCaptureScreen&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=onUserCaptureScreen)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=onUserCaptureScreen&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.device.captureScreen.onUserCaptureScreen)"
  },
  "offUserCaptureScreen": {
    "name": "## uni.offUserCaptureScreen(callback?) @offusercapturescreen",
    "description": "关闭截屏监听<br/><br/><br/>> 本 API 是 [uni ext api](https://uniapp.dcloud.net.cn/api/extapi.html),需下载插件:[uni-usercapturescreen](https://ext.dcloud.net.cn/plugin?name=uni-usercapturescreen)<br/>",
    "compatibility": "### offUserCaptureScreen  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | 3.9.0 | 4.11 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| callback | (res: [OnUserCaptureScreenCallbackResult](#onusercapturescreencallbackresult-values)) => void \\| null | 否 | - | - |  | \n\n#### OnUserCaptureScreenCallbackResult 的属性值 @onusercapturescreencallbackresult-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| path | string | 否 | - | - | 截屏文件路径(仅Android返回) |\n",
    "returnValue": "",
    "tutorial": "\n### 参见\n\n- [参见uni-app相关文档](https://uniapp.dcloud.net.cn/api/system/capture-screen.html#offusercapturescreen)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=offUserCaptureScreen&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=offUserCaptureScreen&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=offUserCaptureScreen&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=offUserCaptureScreen&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=offUserCaptureScreen&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=offUserCaptureScreen)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=offUserCaptureScreen&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.device.captureScreen.offUserCaptureScreen)"
  },
  "createRequestPermissionListener": {
    "name": "## uni.createRequestPermissionListener() @createrequestpermissionlistener",
    "description": "创建一个监听权限申请的对象。",
    "compatibility": "### createRequestPermissionListener  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | 4.0 | - |\n",
    "param": "",
    "returnValue": "### 返回值  兼容性 \n\n| 类型 |\n| :- |\n| [RequestPermissionListener](#requestpermissionlistener-values) |\n\n#### RequestPermissionListener 的方法 @requestpermissionlistener-values \n\n#### onRequest(callback) @onrequest\n监听申请系统权限\n##### onRequest  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| callback | (permissions: Array\\<string\\>) => void | 是 | - | - | 申请系统权限回调,permissions为触发权限申请的所有权限 | \n\n\n#### onConfirm(callback) @onconfirm\n监听弹出系统权限授权框\n##### onConfirm  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| callback | (permissions: Array\\<string\\>) => void | 是 | - | - | 弹出系统权限授权框回调,permissions为触发弹出权限授权框的所有权限 | \n\n\n#### onComplete(callback) @oncomplete\n监听权限申请完成\n##### onComplete  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| callback | (permissions: Array\\<string\\>) => void | 是 | - | - | 权限申请完成回调,permissions为申请完成的所有权限 | \n\n\n#### stop() @stop\n取消所有监听\n##### stop  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n\n \n",
    "tutorial": "\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=createRequestPermissionListener&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=createRequestPermissionListener&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=createRequestPermissionListener&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=createRequestPermissionListener&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=createRequestPermissionListener&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=createRequestPermissionListener)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=createRequestPermissionListener&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.device.createRequestPermissionListener)",
    "example": "### 示例 \n> [hello uni-app x](https://gitcode.net/dcloud/hello-uni-app-x/-/blob/dev/pages/API/create-request-permission-listener/create-request-permission-listener.uvue) \n >\n> 该 API 不支持 Web,请运行 hello uni-app x 到 App 平台体验 \n```uvue\n<template>\n  <!-- #ifdef APP -->\n  <scroll-view style=\"flex:1\">\n  <!-- #endif -->\n    <page-head title=\"权限申请监听\"></page-head>\n    <view class=\"permission-alert\" id=\"permission-alert\" :style=\"{'transform':isPermissionAlertShow ? 'translateY(0)':'translateY(-110px)'}\">\n      <text style=\"font-size: 20px;margin-bottom: 10px;margin-top: 5px;\">访问日历权限申请说明:</text>\n      <text style=\"color: darkgray;\">uni-app x正在申请访问日历权限用于演示,允许或拒绝均不会获取任何隐私信息。</text>\n    </view>\n    <button type=\"primary\" style=\"margin: 10px;\" @click=\"requestPermission\">点击申请日历权限</button>\n\n  <!-- #ifdef APP -->\n  </scroll-view>\n  <!-- #endif -->\n</template>\n\n<script>\n  export default {\n    data() {\n      return {\n        isPermissionAlertShow: false,\n        permissionAlert: null as UniElement | null,\n        timeoutId: -1,\n        permissionListener: null as RequestPermissionListener | null\n      }\n    },\n\n    onReady() {\n      this.watchPermissionRRequest()\n    },\n    onUnload() {\n      this.permissionListener?.stop()\n      this.permissionListener = null\n      clearTimeout(this.timeoutId)\n    },\n    methods: {\n      watchPermissionRRequest() {\n        this.permissionListener = uni.createRequestPermissionListener()\n        this.permissionListener!.onConfirm((_) => {\n          // TODO 目前onConfirm监听实现的在时间上不够精确,暂时需要延迟弹框,后续修复\n          // TODO 这里的弹框仅为演示,实际开发中监听权限申请的代码应该在app.uvue中,弹框应全局处理,可参考https://gitcode.net/dcloud/uni-api/-/tree/master/uni_modules/uni-prompt/utssdk/app-android 代码自行封装一个uts的全局弹框\n          this.timeoutId = setTimeout(() => {\n            this.isPermissionAlertShow = true\n          }, 100)\n        })\n        this.permissionListener!.onComplete((_) => {\n          clearTimeout(this.timeoutId)\n          this.isPermissionAlertShow = false\n        })\n      },\n      requestPermission() {\n        // #ifdef APP-ANDROID\n        if (UTSAndroid.checkSystemPermissionGranted(UTSAndroid.getUniActivity()!, [\"android.permission.READ_CALENDAR\"])) {\n          uni.showToast({\n            title: \"权限已经同意了,不需要再申请\",\n            position: \"bottom\"\n          })\n          return\n        }\n        UTSAndroid.requestSystemPermission(UTSAndroid.getUniActivity()!, [\"android.permission.READ_CALENDAR\"], (_ : boolean, p : string[]) => {\n          console.log(p)\n        }, (_ : boolean, p : string[]) => {\n          uni.showToast({\n            title: \"权限被拒绝了\",\n            position: \"bottom\"\n          })\n          console.log(p)\n        })\n        // #endif\n      }\n    }\n  }\n</script>\n\n<style>\n  .permission-alert {\n    width: 90%;\n    height: 100px;\n    margin: 10px 5%;\n    position: absolute;\n    top: 0px;\n    z-index: 3;\n    border-radius: 5px;\n    transition-property: transform;\n    transition-duration: 200ms;\n    background-color: white;\n    padding: 10px;\n  }\n</style>\n\n```"
  },
  "chooseImage": {
    "name": "## uni.chooseImage(options) @chooseimage",
    "description": "从本地相册选择图片或使用相机拍照",
    "compatibility": "### chooseImage  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.9 | 4.11 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | [ChooseImageOptions](#chooseimageoptions-values) | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| count | number \\| null | 否 | 9 | - | 最多可以选择的图片张数,app端不限制,微信小程序最多可支持20个。 |\n@| sourceType | Array\\<string\\> \\| null | 否 | ['album','camera'\\] | - | album 从相册选图,camera 使用相机,默认二者都有 |\n@| success | (callback: [ChooseImageSuccess](#chooseimagesuccess-values)) => void \\| null | 否 | - | - | 成功则返回图片的本地文件路径列表 tempFilePaths |\n@| fail | (callback: [IMediaError](#imediaerror-values)) => void \\| null | 否 | - | - | 接口调用失败的回调函数 |\n@| complete | (callback: any) => void \\| null | 否 | - | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n##### ChooseImageSuccess 的属性值 @chooseimagesuccess-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errSubject | string | 是 | - | - | 调用API的名称 |\n| errMsg | string | 是 | - | - | 描述信息 |\n| tempFilePaths | Array\\<string\\> | 是 | - | - | 图片的本地文件路径列表 |\n| tempFiles | any | 是 | - | - | 图片的本地文件列表 |\n\n##### IMediaError 的属性值 @imediaerror-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errCode | 1101001 \\| 1101002 \\| 1101003 \\| 1101004 \\| 1101005 \\| 1101006 \\| 1101007 \\| 1101008 \\| 1101009 \\| 1101010 | 是 | - | - | 错误码<br/>- 1101001 用户取消<br/>- 1101002 urls至少包含一张图片地址<br/>- 1101003 文件不存在<br/>- 1101004 图片加载失败<br/>- 1101005 未获取权限<br/>- 1101006 图片或视频保存失败<br/>- 1101007 图片裁剪失败<br/>- 1101008 拍照或录像失败<br/>- 1101009 图片压缩失败<br/>- 1101010 其他错误 |\n| errSubject | string | 是 | - | - | 统一错误主题(模块)名称 |\n| data | any \\| null | 否 | - | - | 错误信息中包含的数据 |\n| cause | [Error](https://uniapp.dcloud.net.cn/tutorial/err-spec.html#unierror) \\| null | 否 | - | - | 源错误信息,可以包含多个错误,详见SourceError |\n| errMsg | string | 是 | - | - | - |\n",
    "returnValue": "",
    "tutorial": "\n### 参见\n\n- [参见uni-app相关文档](http://uniapp.dcloud.io/api/media/image?id=chooseimage)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=chooseImage&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=chooseImage&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=chooseImage&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=chooseImage&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=chooseImage&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=chooseImage)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=chooseImage&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.media.chooseImage)",
    "example": "### 示例 \n> [hello uni-app x](https://gitcode.net/dcloud/hello-uni-app-x/-/blob/dev/pages/API/choose-image/choose-image.uvue) \n ::: preview https://hellouniappx.dcloud.net.cn/web/#/pages/API/choose-image/choose-image\n>Template\n```vue\n<template>\n  <!-- #ifdef APP -->\n  <scroll-view class=\"page-scroll-view\">\n  <!-- #endif -->\n    <view>\n      <page-head :title=\"title\"></page-head>\n      <view class=\"uni-common-mt\">\n        <view class=\"uni-list\">\n          <view class=\"uni-list-cell cell-pd\">\n            <view class=\"uni-list-cell-left uni-label\">\n              图片来源\n            </view>\n            <view class=\"uni-list-cell-right\" @click=\"chooseImageSource\">\n              <text class=\"click-t\">{{sourceType[sourceTypeIndex]}}</text>\n            </view>\n          </view>\n\n          <view class=\"uni-list-cell cell-pd\">\n            <view class=\"uni-list-cell-left uni-label\">\n              图片质量\n            </view>\n            <view class=\"uni-list-cell-right\" @click=\"chooseImageType\">\n              <text class=\"click-t\">{{sizeType[sizeTypeIndex]}}</text>\n            </view>\n          </view>\n\n          <view class=\"uni-list-cell cell-pd\">\n            <view class=\"uni-list-cell-left uni-label\">\n              数量限制\n            </view>\n            <view class=\"uni-list-cell-right\">\n              <input class=\"click-t\" :value=\"countIndex+1\" type=\"number\" :maxlength=\"1\" @confirm=\"chooseImageCount\" confirm-type=\"done\" />\n            </view>\n          </view>\n          <view class=\"uni-list-cell cell-pd\">\n            <view class=\"uni-list-cell-left uni-label\">\n              图像裁剪\n            </view>\n            <view class=\"uni-list-cell-right\">\n              <switch :checked=\"isCrop\" @change=\"switchCrop\"></switch>\n            </view>\n          </view>\n          <view ref=\"cropOptionNode\" class=\"crop-option\" :style=\"{'height':isCrop?'200px':'0px','margin-bottom':isCrop?'11px':'0px'}\">\n            <view class=\"uni-list-cell cell-pd\">\n              <view class=\"uni-list-cell-left item_width\">\n                图片质量(%)\n              </view>\n              <view class=\"uni-list-cell-right\">\n                <input :value=\"cropPercent\" @confirm=\"cropPercentConfim\" type=\"number\" maxlength=\"-1\"/>\n              </view>\n            </view>\n            <view class=\"uni-list-cell cell-pd\">\n              <view class=\"uni-list-cell-left item_width\">\n                裁剪宽度(px)\n              </view>\n              <view class=\"uni-list-cell-right\">\n                <input :value=\"cropWidth\" @confirm=\"cropWidthConfim\" type=\"number\" maxlength=\"-1\"/>\n              </view>\n            </view>\n            <view class=\"uni-list-cell cell-pd\">\n              <view class=\"uni-list-cell-left item_width\">\n                裁剪高度(px)\n              </view>\n              <view class=\"uni-list-cell-right\">\n                <input :value=\"cropHeight\" @confirm=\"cropHeightConfim\" type=\"number\" maxlength=\"-1\"/>\n              </view>\n            </view>\n            <view class=\"uni-list-cell cell-pd\">\n              <view class=\"uni-list-cell-left item_width\">\n                保留原宽高\n              </view>\n              <view class=\"uni-list-cell-right\">\n                <switch :checked=\"cropResize\" @change=\"cropResizeChange\"></switch>\n              </view>\n            </view>\n          </view>\n        </view>\n\n        <view class=\"uni-list list-pd\" style=\"padding: 15px;\">\n          <view class=\"uni-flex\" style=\"margin-bottom: 10px;\">\n            <view class=\"uni-list-cell-left\">点击可预览选好的图片</view>\n            <view style=\"margin-left: auto;\">\n              <text class=\"click-t\">{{imageList.length}}/{{countIndex+1}}</text>\n            </view>\n          </view>\n          <view class=\"uni-flex\" style=\"flex-wrap: wrap;\">\n            <view v-for=\"(image,index) in imageList\" :key=\"index\" class=\"uni-uploader__input-box\" style=\"border: 0;\">\n              <image style=\"width: 104px; height: 104px;\" :src=\"image\" :data-src=\"image\" @tap=\"previewImage(index)\">\n              </image>\n              <image src=\"/static/plus.png\" class=\"image-remove\" @click=\"removeImage(index)\"></image>\n            </view>\n            <image class=\"uni-uploader__input-box\" @tap=\"chooseImage\" src=\"/static/plus.png\"></image>\n          </view>\n        </view>\n      </view>\n    </view>\n  <!-- #ifdef APP -->\n  </scroll-view>\n  <!-- #endif -->\n</template>\n\n\n\n<style>\n  .cell-pd {\n    padding: 11px 15px;\n  }\n\n  .click-t {\n    color: darkgray;\n  }\n\n  .list-pd {\n    margin-top: 25px;\n  }\n\n  .uni-uploader__input-box {\n    margin: 5px;\n    width: 104px;\n    height: 104px;\n    border: 1px solid #D9D9D9;\n  }\n\n  .uni-uploader__input {\n    position: absolute;\n    z-index: 1;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n    opacity: 0;\n  }\n\n  .image-remove {\n    transform: rotate(45deg);\n    width: 25px;\n    height: 25px;\n    position: absolute;\n    top: 0;\n    right: 0;\n    border-radius: 13px;\n    background-color: rgba(200, 200, 200, 0.8);\n  }\n\n  .item_width {\n    width: 130px;\n  }\n\n  .crop-option {\n    margin-left: 11px;\n    margin-right: 11px;\n    border-radius: 11px;\n    background-color: #eee;\n    transition-property: height, margin-bottom;\n    transition-duration: 200ms;\n  }\n</style>\n\n```\n>Script\n```uts\n\n  var sourceTypeArray = [\n    ['camera'],\n    ['album'],\n    ['camera', 'album']\n  ]\n  var sizeTypeArray = [\n    ['compressed'],\n    ['original'],\n    ['compressed', 'original']\n  ]\n  export default {\n    data() {\n      return {\n        title: 'chooseImage',\n        imageList: [] as Array<string>,\n        sourceTypeIndex: 2,\n        sourceType: ['拍照', '相册', '拍照或相册'],\n        sizeTypeIndex: 2,\n        sizeType: ['压缩', '原图', '压缩或原图'],\n        countIndex: 8,\n        count: [1, 2, 3, 4, 5, 6, 7, 8, 9],\n        isCrop: false,\n        cropPercent: 80,\n        cropWidth: 100,\n        cropHeight: 100,\n        cropResize: false\n      }\n    },\n    onUnload() {\n      this.imageList = [];\n      this.sourceTypeIndex = 2\n      this.sourceType = ['拍照', '相册', '拍照或相册']\n      this.sizeTypeIndex = 2\n      this.sizeType = ['压缩', '原图', '压缩或原图']\n      this.countIndex = 8\n    },\n    methods: {\n      cropHeightConfim(e : InputConfirmEvent) {\n        let value = parseInt(e.detail.value)\n        if (value > 0) {\n          this.cropHeight = value\n        } else {\n          uni.showToast({\n            position: \"bottom\",\n            title: \"裁剪高度需要大于0\"\n          })\n        }\n      },\n      cropWidthConfim(e : InputConfirmEvent) {\n        let value = parseInt(e.detail.value)\n        if (value > 0) {\n          this.cropWidth = value\n        } else {\n          uni.showToast({\n            position: \"bottom\",\n            title: \"裁剪宽度需要大于0\"\n          })\n        }\n      },\n      cropPercentConfim(e : InputConfirmEvent) {\n        let value = parseInt(e.detail.value)\n        if (value > 0 && value <= 100) {\n          this.cropPercent = value\n        } else {\n          uni.showToast({\n            position: \"bottom\",\n            title: \"请输入0~100之间的值\"\n          })\n        }\n      },\n      cropResizeChange(e : UniSwitchChangeEvent) {\n        this.cropResize = e.detail.value\n      },\n      switchCrop(e : UniSwitchChangeEvent) {\n        this.isCrop = e.detail.value\n      },\n      removeImage(index : number) {\n        this.imageList.splice(index, 1)\n      },\n      chooseImageSource() {\n        uni.showActionSheet({\n          itemList: ['拍照', '相册', '拍照或相册'],\n          success: (e) => {\n            this.sourceTypeIndex = e.tapIndex!\n          }\n        })\n      },\n      chooseImageType() {\n        uni.showActionSheet({\n          itemList: ['压缩', '原图', '压缩或原图'],\n          success: (e) => {\n            this.sizeTypeIndex = e.tapIndex!\n          }\n        })\n      },\n      chooseImageCount(event : InputConfirmEvent) {\n        let count = parseInt(event.detail.value) - 1\n        if (count < 0) {\n          uni.showToast({\n            position: \"bottom\",\n            title: \"图片数量应该大于0\"\n          })\n          return\n        }\n        this.countIndex = count\n      },\n      chooseImage: function () {\n        // var cropOption:ChooseImageCropOptions|null = this.isCrop ? null : new ChooseImageCropOptions(  )\n        if (this.imageList.length >= 9) {\n          uni.showToast({\n            position: \"bottom\",\n            title: \"已经有9张图片了,请删除部分图片之后重新选择\"\n          })\n          return\n        }\n        uni.chooseImage({\n          sourceType: sourceTypeArray[this.sourceTypeIndex],\n          sizeType: sizeTypeArray[this.sizeTypeIndex],\n          crop: this.isCrop ? { \"quality\": this.cropPercent, \"width\": this.cropWidth, \"height\": this.cropHeight, \"resize\": this.cropResize } as ChooseImageCropOptions : null,\n          count: this.imageList.length + this.count[this.countIndex] > 9 ? 9 - this.imageList.length : this.count[this.countIndex],\n          success: (res) => {\n            this.imageList = this.imageList.concat(res.tempFilePaths);\n          },\n          fail: (err) => {\n            console.log(\"err: \", JSON.stringify(err));\n          }\n        })\n      },\n      previewImage: function (index : number) {\n        uni.previewImage({\n          current: index,\n          urls: this.imageList\n        })\n      }\n    }\n  }\n\n```\n:::"
  },
  "previewImage": {
    "name": "## uni.previewImage(options) @previewimage",
    "description": "预览图片",
    "compatibility": "### previewImage  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.9 | 4.11 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | [PreviewImageOptions](#previewimageoptions-values) | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| current | any \\| null | 否 | - | - | current 为当前显示图片的链接/索引值,不填或填写的值无效则为 urls 的第一张。APP平台仅支持索引值。 |\n@| urls | Array\\<[string.ImageURIString](/uts/data-type.md#ide-string)\\> | 是 | - | - | 需要预览的图片链接列表 |\n@| indicator | string \\| null | 否 | - | - | 图片指示器样式<br/>- default: 底部圆点指示器<br/>- number: 顶部数字指示器<br/>- none: 不显示指示器 |\n@| loop | boolean \\| null | 否 | - | - | 是否可循环预览 |\n@| success | (callback: [PreviewImageSuccess](#previewimagesuccess-values)) => void \\| null | 否 | - | - | 接口调用成功的回调函数 |\n@| fail | (callback: [IMediaError](#imediaerror-values)) => void \\| null | 否 | - | - | 接口调用失败的回调函数 |\n@| complete | (callback: any) => void \\| null | 否 | - | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n##### PreviewImageSuccess 的属性值 @previewimagesuccess-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errSubject | string | 是 | - | - | 调用API的名称 |\n| errMsg | string | 是 | - | - | 描述信息 |\n\n##### IMediaError 的属性值 @imediaerror-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errCode | 1101001 \\| 1101002 \\| 1101003 \\| 1101004 \\| 1101005 \\| 1101006 \\| 1101007 \\| 1101008 \\| 1101009 \\| 1101010 | 是 | - | - | 错误码<br/>- 1101001 用户取消<br/>- 1101002 urls至少包含一张图片地址<br/>- 1101003 文件不存在<br/>- 1101004 图片加载失败<br/>- 1101005 未获取权限<br/>- 1101006 图片或视频保存失败<br/>- 1101007 图片裁剪失败<br/>- 1101008 拍照或录像失败<br/>- 1101009 图片压缩失败<br/>- 1101010 其他错误 |\n| errSubject | string | 是 | - | - | 统一错误主题(模块)名称 |\n| data | any \\| null | 否 | - | - | 错误信息中包含的数据 |\n| cause | [Error](https://uniapp.dcloud.net.cn/tutorial/err-spec.html#unierror) \\| null | 否 | - | - | 源错误信息,可以包含多个错误,详见SourceError |\n| errMsg | string | 是 | - | - | - |\n",
    "returnValue": "",
    "tutorial": "\n### 参见\n\n- [参见uni-app相关文档](http://uniapp.dcloud.io/api/media/image?id=previewimage)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=previewImage&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=previewImage&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=previewImage&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=previewImage&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=previewImage&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=previewImage)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=previewImage&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.media.previewImage.previewImage)",
    "example": "### 示例 \n> [hello uni-app x](https://gitcode.net/dcloud/hello-uni-app-x/-/blob/dev/pages/API/preview-image/preview-image.uvue) \n ::: preview https://hellouniappx.dcloud.net.cn/web/#/pages/API/preview-image/preview-image\n>Template\n```vue\n<template>\n  <!-- #ifdef APP -->\n  <scroll-view style=\"flex: 1\">\n  <!-- #endif -->\n    <view style=\"padding-left: 8px; padding-right: 8px\">\n      <view>\n        <text class=\"text-desc\">图片指示器样式</text>\n        <radio-group class=\"cell-ct\" style=\"background-color: white\" @change=\"onIndicatorChanged\">\n          <view class=\"indicator-it\" v-for=\"(item, index) in indicator\" :key=\"item.value\">\n            <radio :checked=\"index == 0\" :value=\"item.value\">{{\n              item.name\n            }}</radio>\n          </view>\n        </radio-group>\n      </view>\n      <view>\n        <checkbox-group @change=\"onCheckboxChange\" style=\"margin-top: 16px; margin-bottom: 16px; margin-left: 8px\">\n          <checkbox :checked=\"isLoop\" style=\"margin-right: 15px\">循环播放</checkbox>\n        </checkbox-group>\n      </view>\n      <view style=\"background-color: white\">\n        <text class=\"text-desc\">点击图片开始预览</text>\n        <view class=\"cell-ct\" style=\"margin: 8px;\">\n          <view class=\"cell cell-choose-image\" v-for=\"(image, index) in imageList\" :key=\"index\">\n            <image style=\"width: 100px; height: 100px\" mode=\"aspectFit\" :src=\"image\" @click=\"previewImage(index)\">\n            </image>\n          </view>\n          <image class=\"cell cell-choose-image\" src=\"/static/plus.png\" @click=\"chooseImage\">\n            <view></view>\n          </image>\n        </view>\n      </view>\n    </view>\n  <!-- #ifdef APP -->\n  </scroll-view>\n  <!-- #endif -->\n</template>\n\n\n\n<style>\n  .text-desc {\n    margin-top: 16px;\n    margin-left: 8px;\n    margin-bottom: 16px;\n    font-weight: bold;\n  }\n\n  .cell-ct {\n    display: flex;\n    flex-wrap: wrap;\n    flex-direction: row;\n  }\n\n  .cell {\n    margin-left: 3px;\n    margin-right: 3px;\n    width: 100px;\n    height: 100px;\n  }\n\n  .cell-choose-image {\n    border-width: 1px;\n    border-style: solid;\n    border-color: lightgray;\n  }\n\n  .indicator-it {\n    margin: 8px;\n  }\n</style>\n\n```\n>Script\n```uts\n\n  type ItemType = {\n    value : string,\n    name : string\n  }\n\n  export default {\n    data() {\n      return {\n        imageList: [\"https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/uni@2x.png\", \"/static/uni.png\"],\n        indicator: [{\n          value: \"default\",\n          name: \"圆点\"\n        }, {\n          value: \"number\",\n          name: \"数字\"\n        }, {\n          value: \"none\",\n          name: \"不显示\"\n        }] as ItemType[],\n        currentIndicator: \"default\",\n        isLoop: true\n      }\n    },\n    methods: {\n      previewImage(index : number) {\n        uni.previewImage({\n          urls: this.imageList,\n          current: index,\n          indicator: this.currentIndicator,\n          loop: this.isLoop\n        })\n      },\n      chooseImage() {\n        uni.chooseImage({\n          sourceType: ['album'],\n          success: (e) => {\n            this.imageList = this.imageList.concat(e.tempFilePaths)\n          },\n          fail(_) {\n          }\n        })\n      },\n      onIndicatorChanged(e : UniRadioGroupChangeEvent) {\n        this.currentIndicator = e.detail.value\n      },\n      onCheckboxChange(_ : UniCheckboxGroupChangeEvent) {\n        this.isLoop = !this.isLoop\n      }\n    }\n  }\n\n```\n:::"
  },
  "closePreviewImage": {
    "name": "## uni.closePreviewImage(options) @closepreviewimage",
    "description": "关闭图片预览",
    "compatibility": "### closePreviewImage  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.9 | 4.11 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | [ClosePreviewImageOptions](#closepreviewimageoptions-values) | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| success | (callback: [ClosePreviewImageSuccess](#closepreviewimagesuccess-values)) => void \\| null | 否 | - | - | 接口调用成功的回调函数 |\n@| fail | (callback: [IMediaError](#imediaerror-values)) => void \\| null | 否 | - | - | 接口调用失败的回调函数 |\n@| complete | (callback: any) => void \\| null | 否 | - | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n##### ClosePreviewImageSuccess 的属性值 @closepreviewimagesuccess-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errMsg | string | 是 | - | - | 错误信息 |\n\n##### IMediaError 的属性值 @imediaerror-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errCode | 1101001 \\| 1101002 \\| 1101003 \\| 1101004 \\| 1101005 \\| 1101006 \\| 1101007 \\| 1101008 \\| 1101009 \\| 1101010 | 是 | - | - | 错误码<br/>- 1101001 用户取消<br/>- 1101002 urls至少包含一张图片地址<br/>- 1101003 文件不存在<br/>- 1101004 图片加载失败<br/>- 1101005 未获取权限<br/>- 1101006 图片或视频保存失败<br/>- 1101007 图片裁剪失败<br/>- 1101008 拍照或录像失败<br/>- 1101009 图片压缩失败<br/>- 1101010 其他错误 |\n| errSubject | string | 是 | - | - | 统一错误主题(模块)名称 |\n| data | any \\| null | 否 | - | - | 错误信息中包含的数据 |\n| cause | [Error](https://uniapp.dcloud.net.cn/tutorial/err-spec.html#unierror) \\| null | 否 | - | - | 源错误信息,可以包含多个错误,详见SourceError |\n| errMsg | string | 是 | - | - | - |\n",
    "returnValue": "",
    "tutorial": "\n### 参见\n\n- [参见uni-app相关文档](http://uniapp.dcloud.io/api/media/image?id=closepreviewimage)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=closePreviewImage&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=closePreviewImage&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=closePreviewImage&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=closePreviewImage&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=closePreviewImage&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=closePreviewImage)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=closePreviewImage&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.media.previewImage.closePreviewImage)"
  },
  "saveImageToPhotosAlbum": {
    "name": "## uni.saveImageToPhotosAlbum(options) @saveimagetophotosalbum",
    "description": "保存图片到系统相册",
    "compatibility": "### saveImageToPhotosAlbum  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| x | 3.9 | 4.11 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | [SaveImageToPhotosAlbumOptions](#saveimagetophotosalbumoptions-values) | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| filePath | [string.ImageURIString](/uts/data-type.md#ide-string) | 是 | - | - | 图片文件路径,可以是临时文件路径也可以是永久文件路径,不支持网络图片路径 |\n@| success | (callback: [SaveImageToPhotosAlbumSuccess](#saveimagetophotosalbumsuccess-values)) => void \\| null | 否 | - | - | 接口调用成功的回调函数 |\n@| fail | (callback: [IMediaError](#imediaerror-values)) => void \\| null | 否 | - | - | 接口调用失败的回调函数 |\n@| complete | (callback: any) => void \\| null | 否 | - | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n##### SaveImageToPhotosAlbumSuccess 的属性值 @saveimagetophotosalbumsuccess-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| path | string | 是 | - | - | 保存到相册的图片路径 |\n\n##### IMediaError 的属性值 @imediaerror-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errCode | 1101001 \\| 1101002 \\| 1101003 \\| 1101004 \\| 1101005 \\| 1101006 \\| 1101007 \\| 1101008 \\| 1101009 \\| 1101010 | 是 | - | - | 错误码<br/>- 1101001 用户取消<br/>- 1101002 urls至少包含一张图片地址<br/>- 1101003 文件不存在<br/>- 1101004 图片加载失败<br/>- 1101005 未获取权限<br/>- 1101006 图片或视频保存失败<br/>- 1101007 图片裁剪失败<br/>- 1101008 拍照或录像失败<br/>- 1101009 图片压缩失败<br/>- 1101010 其他错误 |\n| errSubject | string | 是 | - | - | 统一错误主题(模块)名称 |\n| data | any \\| null | 否 | - | - | 错误信息中包含的数据 |\n| cause | [Error](https://uniapp.dcloud.net.cn/tutorial/err-spec.html#unierror) \\| null | 否 | - | - | 源错误信息,可以包含多个错误,详见SourceError |\n| errMsg | string | 是 | - | - | - |\n",
    "returnValue": "",
    "tutorial": "\n### 参见\n\n- [参见uni-app相关文档](http://uniapp.dcloud.io/api/media/image?id=saveimagetophotosalbum)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=saveImageToPhotosAlbum&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=saveImageToPhotosAlbum&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=saveImageToPhotosAlbum&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=saveImageToPhotosAlbum&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=saveImageToPhotosAlbum&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=saveImageToPhotosAlbum)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=saveImageToPhotosAlbum&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.media.saveImageToPhotosAlbum)",
    "example": "### 示例 \n> [hello uni-app x](https://gitcode.net/dcloud/hello-uni-app-x/-/blob/dev/pages/API/save-image-to-photos-album/save-image-to-photos-album.uvue) \n >\n> 该 API 不支持 Web,请运行 hello uni-app x 到 App 平台体验 \n```uvue\n<template>\n  <!-- #ifdef APP -->\n  <scroll-view style=\"flex:1\">\n  <!-- #endif -->\n    <page-head :title=\"title\"></page-head>\n    <view class=\"uni-padding-wrap\">\n      <image class=\"image\" src=\"/static/uni.png\"></image>\n      <button class=\"margin-top-10\" type=\"primary\" @click=\"saveImage\">将图片保存到手机相册</button>\n    </view>\n  <!-- #ifdef APP -->\n  </scroll-view>\n  <!-- #endif -->\n</template>\n\n<script>\n  export default {\n    data() {\n      return {\n        title: \"saveImageToPhotosAlbum\",\n        // 自动化测试\n        success: false\n      }\n    },\n    methods: {\n      saveImage() {\n        uni.saveImageToPhotosAlbum({\n          filePath: \"/static/uni.png\",\n          success: (res) => {\n            console.log(\"saveImageToPhotosAlbum success\", JSON.stringify(res));\n            uni.showToast({\n              position: \"center\",\n              icon: \"none\",\n              title: \"图片保存成功,请到手机相册查看\"\n            });\n            this.success = true;\n          },\n          fail: (err) => {\n            uni.showModal({\n              title: \"保存图片到相册失败\",\n              content: JSON.stringify(err),\n              showCancel: false\n            });\n            this.success = false;\n          }\n        })\n      }\n    }\n  }\n</script>\n\n<style>\n  .margin-top-10 {\n    margin-top: 10px;\n  }\n\n  .image {\n    width: 196px;\n    height: 196px;\n    align-self: center;\n  }\n</style>\n\n```"
  },
  "getImageInfo": {
    "name": "## uni.getImageInfo(options) @getimageinfo",
    "description": "获取图片信息",
    "compatibility": "### getImageInfo  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 4.18 | - |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | [GetImageInfoOptions](#getimageinfooptions-values) | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| src | [string.ImageURIString](/uts/data-type.md#ide-string) | 是 | - | - | 图片的路径,可以是相对路径,临时文件路径,存储文件路径,网络图片路径 |\n@| success | (callback: [GetImageInfoSuccess](#getimageinfosuccess-values)) => void \\| null | 否 | - | - | 接口调用成功的回调函数 |\n@| fail | (callback: [IMediaError](#imediaerror-values)) => void \\| null | 否 | - | - | 接口调用失败的回调函数 |\n@| complete | (callback: any) => void \\| null | 否 | - | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n##### GetImageInfoSuccess 的属性值 @getimageinfosuccess-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| width | number | 是 | - | - | 图片宽度,单位px |\n| height | number | 是 | - | - | 图片高度,单位px |\n| path | string | 是 | - | - | 返回图片的本地路径 |\n\n##### IMediaError 的属性值 @imediaerror-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errCode | 1101001 \\| 1101002 \\| 1101003 \\| 1101004 \\| 1101005 \\| 1101006 \\| 1101007 \\| 1101008 \\| 1101009 \\| 1101010 | 是 | - | - | 错误码<br/>- 1101001 用户取消<br/>- 1101002 urls至少包含一张图片地址<br/>- 1101003 文件不存在<br/>- 1101004 图片加载失败<br/>- 1101005 未获取权限<br/>- 1101006 图片或视频保存失败<br/>- 1101007 图片裁剪失败<br/>- 1101008 拍照或录像失败<br/>- 1101009 图片压缩失败<br/>- 1101010 其他错误 |\n| errSubject | string | 是 | - | - | 统一错误主题(模块)名称 |\n| data | any \\| null | 否 | - | - | 错误信息中包含的数据 |\n| cause | [Error](https://uniapp.dcloud.net.cn/tutorial/err-spec.html#unierror) \\| null | 否 | - | - | 源错误信息,可以包含多个错误,详见SourceError |\n| errMsg | string | 是 | - | - | - |\n",
    "returnValue": "",
    "tutorial": "\n### 参见\n\n- [参见uni-app相关文档](http://uniapp.dcloud.io/api/media/image?id=getimageinfo)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=getImageInfo&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=getImageInfo&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=getImageInfo&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=getImageInfo&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=getImageInfo&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=getImageInfo)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=getImageInfo&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.media.getImageInfo)",
    "example": "### 示例 \n> [hello uni-app x](https://gitcode.net/dcloud/hello-uni-app-x/-/blob/dev/pages/API/get-image-info/get-image-info.uvue) \n ::: preview https://hellouniappx.dcloud.net.cn/web/#/pages/API/get-image-info/get-image-info\n>Template\n```vue\n<template>\n  <!-- #ifdef APP -->\n  <scroll-view style=\"flex:1\">\n  <!-- #endif -->\n    <page-head :title=\"title\"></page-head>\n    <view class=\"uni-padding-wrap\">\n      <view class=\"uni-title\">\n        <text class=\"uni-subtitle-text\">获取本地相对路径图片信息</text>\n      </view>\n      <image class=\"image\" :src=\"relativeImagePath\" mode=\"aspectFit\"></image>\n      <text class=\"margin-top-10\">{{absoluteImageInfo}}</text>\n      <view class=\"uni-title\">\n        <text class=\"uni-subtitle-text\">获取网络路径图片信息</text>\n      </view>\n      <image class=\"image\" :src=\"remoteImagePath\" mode=\"aspectFit\"></image>\n      <text class=\"margin-top-10\">{{remoteImageInfo}}</text>\n      <view class=\"uni-title\">\n        <text class=\"uni-subtitle-text\">获取本地绝对路径图片信息</text>\n      </view>\n      <image class=\"image\" :src=\"absoluteImagePath\" mode=\"aspectFit\"></image>\n      <text class=\"margin-top-10\">{{relativeImageInfo}}</text>\n      <view class=\"uni-btn-v\">\n        <button type=\"primary\" @click=\"chooseImage\">拍摄照片或从相册中选择照片</button>\n      </view>\n    </view>\n  <!-- #ifdef APP -->\n  </scroll-view>\n  <!-- #endif -->\n</template>\n\n\n\n<style>\n  .image {\n    align-self: center;\n  }\n\n  .margin-top-10 {\n    margin-top: 10px;\n  }\n</style>\n\n```\n>Script\n```uts\n\n  export default {\n    data() {\n      return {\n        title: \"getImageInfo\",\n        relativeImagePath: \"/static/test-image/logo.png\",\n        relativeImageInfo: \"\",\n        absoluteImagePath: \"\",\n        absoluteImageInfo: \"\",\n        remoteImagePath: \"https://qiniu-web-assets.dcloud.net.cn/uni-app-x/static/img/building.jpg\",\n        remoteImageInfo: \"\",\n        // 自动化测试\n        imageInfoForTest: null as UTSJSONObject | null,\n      }\n    },\n    methods: {\n      chooseImage() {\n        uni.chooseImage({\n          count: 1,\n          success: (res) => {\n            this.absoluteImagePath = res.tempFilePaths[0];\n            uni.getImageInfo({\n              src: res.tempFilePaths[0],\n              success: (_res) => {\n                console.log(\"getImageInfo success\", JSON.stringify(res));\n                this.relativeImageInfo = `图片宽度: ${_res.width}\\n图片高度: ${_res.height}\\n图片路径: ${_res.path}\\n图片方向: ${_res.orientation}\\n图片格式: ${_res.type}`;\n              },\n              fail: (err) => {\n                uni.showModal({\n                  title: \"获取图片信息失败\",\n                  content: JSON.stringify(err),\n                  showCancel: false\n                });\n              }\n            });\n          }\n        });\n      }\n    },\n    onReady() {\n      uni.getImageInfo({\n        src: this.relativeImagePath,\n        success: (res) => {\n          console.log(\"getImageInfo success\", JSON.stringify(res));\n          this.absoluteImageInfo = `图片宽度: ${res.width}\\n图片高度: ${res.height}\\n图片路径: ${res.path}\\n图片方向: ${res.orientation}\\n图片格式: ${res.type}`;\n          this.imageInfoForTest = {\n            \"width\": res.width,\n            \"height\": res.height,\n            \"path\": res.path.slice(res.path.indexOf('/static')),\n            \"orientation\": res.orientation,\n            \"type\": res.type\n          };\n        },\n        fail: (err) => {\n          uni.showModal({\n            title: \"获取图片信息失败\",\n            content: JSON.stringify(err),\n            showCancel: false\n          });\n          this.imageInfoForTest = null;\n        }\n      });\n      uni.getImageInfo({\n        src: this.remoteImagePath,\n        success: (res) => {\n          console.log(\"getImageInfo success\", JSON.stringify(res));\n          this.remoteImageInfo = `图片宽度: ${res.width}\\n图片高度: ${res.height}\\n图片路径: ${res.path}\\n图片方向: ${res.orientation}\\n图片格式: ${res.type}`;\n        },\n        fail: (err) => {\n          uni.showModal({\n            title: \"获取图片信息失败\",\n            content: JSON.stringify(err),\n            showCancel: false\n          });\n        }\n      });\n    }\n  }\n\n```\n:::"
  },
  "compressImage": {
    "name": "## uni.compressImage(options) @compressimage",
    "description": "压缩图片",
    "compatibility": "### compressImage  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 4.18 | - |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | [CompressImageOptions](#compressimageoptions-values) | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| src | [string.ImageURIString](/uts/data-type.md#ide-string) | 是 | - | - | 图片路径,图片的路径,可以是相对路径、临时文件路径、存储文件路径 |\n@| quality | number \\| null | 否 | - | - | 压缩质量,范围0~100,数值越小,质量越低,压缩率越高(仅对jpg有效) |\n@| rotate | number \\| null | 否 | - | - | 旋转度数,范围0~360 |\n@| ~~width~~ | string \\| null | 否 | - | - | 缩放图片的宽度  **已废弃** |\n@| ~~height~~ | string \\| null | 否 | - | - | 缩放图片的高度  **已废弃** |\n@| compressedHeight | number \\| null | 否 | - | - | 压缩后图片的高度,单位为px,若不填写则默认以compressedWidth为准等比缩放 |\n@| compressedWidth | number \\| null | 否 | - | - | 压缩后图片的宽度,单位为px,若不填写则默认以compressedHeight为准等比缩放。 |\n@| success | (callback: [CompressImageSuccess](#compressimagesuccess-values)) => void \\| null | 否 | - | - | 接口调用成功的回调函数 |\n@| fail | (callback: [IMediaError](#imediaerror-values)) => void \\| null | 否 | - | - | 接口调用失败的回调函数 |\n@| complete | (callback: any) => void \\| null | 否 | - | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n##### CompressImageSuccess 的属性值 @compressimagesuccess-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| tempFilePath | string | 是 | - | - | 压缩后图片的临时文件路径 |\n\n##### IMediaError 的属性值 @imediaerror-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errCode | 1101001 \\| 1101002 \\| 1101003 \\| 1101004 \\| 1101005 \\| 1101006 \\| 1101007 \\| 1101008 \\| 1101009 \\| 1101010 | 是 | - | - | 错误码<br/>- 1101001 用户取消<br/>- 1101002 urls至少包含一张图片地址<br/>- 1101003 文件不存在<br/>- 1101004 图片加载失败<br/>- 1101005 未获取权限<br/>- 1101006 图片或视频保存失败<br/>- 1101007 图片裁剪失败<br/>- 1101008 拍照或录像失败<br/>- 1101009 图片压缩失败<br/>- 1101010 其他错误 |\n| errSubject | string | 是 | - | - | 统一错误主题(模块)名称 |\n| data | any \\| null | 否 | - | - | 错误信息中包含的数据 |\n| cause | [Error](https://uniapp.dcloud.net.cn/tutorial/err-spec.html#unierror) \\| null | 否 | - | - | 源错误信息,可以包含多个错误,详见SourceError |\n| errMsg | string | 是 | - | - | - |\n",
    "returnValue": "",
    "tutorial": "\n### 参见\n\n- [参见uni-app相关文档](http://uniapp.dcloud.io/api/media/image?id=compressimage)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=compressImage&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=compressImage&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=compressImage&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=compressImage&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=compressImage&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=compressImage)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=compressImage&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.media.compressImage)",
    "example": "### 示例 \n> [hello uni-app x](https://gitcode.net/dcloud/hello-uni-app-x/-/blob/dev/pages/API/compress-image/compress-image.uvue) \n >\n> 该 API 不支持 Web,请运行 hello uni-app x 到 App 平台体验 \n```uvue\n<template>\n  <!-- #ifdef APP -->\n  <scroll-view style=\"flex:1\">\n  <!-- #endif -->\n    <page-head :title=\"title\"></page-head>\n    <view class=\"uni-padding-wrap\">\n      <view class=\"image-container\">\n        <image class=\"image\" :src=\"beforeCompressPath\" mode=\"aspectFit\"></image>\n        <image class=\"image\" :src=\"afterCompressPath\" mode=\"aspectFit\"></image>\n      </view>\n      <view class=\"uni-title\">\n        <text class=\"uni-subtitle-text\">压缩前图片信息</text>\n      </view>\n      <text>{{beforeCompressImageInfo}}</text>\n      <view class=\"uni-title\">\n        <text class=\"uni-subtitle-text\">压缩后图片信息</text>\n      </view>\n      <text>{{afterCompressImageInfo}}</text>\n      <view class=\"uni-btn-v\">\n        <button type=\"primary\" @click=\"chooseImage\">从相册中选取待压缩的图片</button>\n      </view>\n      <view class=\"uni-btn-v\">\n        <button type=\"primary\" @click=\"compressImage\">压缩图片</button>\n      </view>\n    </view>\n    <input-data defaultValue=\"80\" title=\"压缩质量,范围0~100,数值越小,质量越低,压缩率越高(仅对jpg有效)\" type=\"number\"\n      @confirm=\"onQualityConfirm\"></input-data>\n    <input-data title=\"压缩后图片的宽度,单位px\" type=\"string\" @confirm=\"onCompressedWidthConfirm\"></input-data>\n    <input-data title=\"压缩后图片的高度,单位px\" type=\"string\" @confirm=\"onCompressedHeightConfirm\"></input-data>\n<!--    <input-data defaultValue=\"auto\" title=\"压缩后图片的宽度,支持px、%、auto\" type=\"string\" @confirm=\"onWidthConfirm\"></input-data>\n    <input-data defaultValue=\"auto\" title=\"压缩后图片的高度,支持px、%、auto\" type=\"string\" @confirm=\"onHeightConfirm\"></input-data> -->\n    <input-data defaultValue=\"0\" title=\"旋转度数,范围0~360\" type=\"number\" @confirm=\"onRotateConfirm\"></input-data>\n  <!-- #ifdef APP -->\n  </scroll-view>\n  <!-- #endif -->\n</template>\n\n<script>\n  // #ifdef APP-ANDROID\n  import FileInputStream from 'java.io.FileInputStream';\n  // #endif\n  export default {\n    data() {\n      return {\n        title: \"compressImage\",\n        beforeCompressImageInfo: \"\",\n        afterCompressImageInfo: \"\",\n        beforeCompressPath: \"\",\n        afterCompressPath: \"\",\n        quality: 80,\n        compressedWidth: null as number | null,\n        compressedHeight: null as number | null,\n        width: \"auto\",\n        height: \"auto\",\n        rotate: 0,\n        // 自动化测试\n        imageInfoForTest: null,\n        imageSrcForTest: '/static/test-image/logo.png'\n      }\n    },\n    methods: {\n      compressImage() {\n        if (this.beforeCompressPath == \"\") {\n          uni.showToast({\n            title: \"请先选择图片\",\n            icon: \"error\"\n          });\n          return;\n        }\n        uni.showLoading({\n          title: \"图片压缩中\"\n        });\n        uni.compressImage({\n          src: this.beforeCompressPath,\n          quality: this.quality,\n          compressedWidth: this.compressedWidth,\n          compressedHeight: this.compressedHeight,\n          width: this.width,\n          height: this.height,\n          rotate: this.rotate,\n          success: (res) => {\n            console.log(\"compressImage success\", JSON.stringify(res));\n            this.afterCompressPath = res.tempFilePath;\n            uni.showToast({\n              title: \"压缩成功\",\n              icon: null\n            });\n            uni.getImageInfo({\n              src: res.tempFilePath,\n              success: (_res) => {\n                this.afterCompressImageInfo = `图片宽度: ${_res.width}\\n图片高度: ${_res.height}\\n`;\n                // #ifdef APP-ANDROID\n                const size = new FileInputStream(res.tempFilePath.substring(\"file://\".length)).available() / 1024;\n                this.afterCompressImageInfo = this.afterCompressImageInfo.concat(`图片大小: ${size}KB`);\n                // #endif\n              }\n            });\n          },\n          fail: (err) => {\n            uni.showModal({\n              title: \"压缩图片失败\",\n              content: JSON.stringify(err),\n              showCancel: false\n            });\n          },\n          complete: (_) => {\n            uni.hideLoading();\n          }\n        });\n      },\n      chooseImage() {\n        uni.chooseImage({\n          count: 1,\n          sizeType: [\"original\"],\n          sourceType: [\"album\"],\n          success: (res) => {\n            this.beforeCompressPath = res.tempFilePaths[0];\n            uni.getImageInfo({\n              src: res.tempFilePaths[0],\n              success: (_res) => {\n                this.beforeCompressImageInfo = `图片宽度: ${_res.width}\\n图片高度: ${_res.height}\\n`;\n                // #ifdef APP-ANDROID\n                const size = new FileInputStream(res.tempFilePaths[0].substring(\"file://\".length)).available() / 1024;\n                this.beforeCompressImageInfo = this.beforeCompressImageInfo.concat(`图片大小: ${size}KB`);\n                // #endif\n              }\n            });\n          }\n        });\n      },\n      onQualityConfirm(value : number) {\n        this.quality = value;\n      },\n      onCompressedWidthConfirm(value : string) {\n        this.compressedWidth = parseInt(value);\n      },\n      onCompressedHeightConfirm(value : string) {\n        this.compressedHeight = parseInt(value);\n      },\n      onWidthConfirm(value : string) {\n        this.width = value;\n      },\n      onHeightConfirm(value : string) {\n        this.height = value;\n      },\n      onRotateConfirm(value : number) {\n        this.rotate = value;\n      },\n      testCompressImage() {\n        uni.compressImage({\n          src: this.imageSrcForTest,\n          quality: 50,\n          compressedWidth: 100,\n          compressedHeight: 100,\n          success: (res) => {\n            uni.getImageInfo({\n              src: res.tempFilePath,\n              success: (_res) => {\n                let beforeCompressSize: number, afterComoressSize: number;\n                // #ifdef APP-ANDROID\n                beforeCompressSize = new FileInputStream(UTSAndroid.convert2AbsFullPath(this.imageSrcForTest)).available();\n                afterComoressSize = new FileInputStream(res.tempFilePath.substring(\"file://\".length)).available();\n                // #endif\n                this.imageInfoForTest = {\n                  \"width\": _res.width,\n                  \"height\": _res.height,\n                  \"isSizeReduce\": afterComoressSize < beforeCompressSize\n                };\n              }\n            });\n          },\n          fail: (_) => {\n            this.imageInfoForTest = null;\n          }\n        });\n      }\n    }\n  }\n</script>\n\n<style>\n  .image {\n    flex: 1;\n  }\n\n  .image-container {\n    flex-direction: row;\n  }\n</style>\n\n```"
  },
  "chooseVideo": {
    "name": "## uni.chooseVideo(options) @choosevideo",
    "description": "拍摄视频或从手机相册中选视频,返回视频的临时文件路径。",
    "compatibility": "### chooseVideo  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 4.18 | 4.18 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | [ChooseVideoOptions](#choosevideooptions-values) | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| sourceType | Array\\<string\\> \\| null | 否 | - | - | album 从相册选视频,camera 使用相机拍摄,默认为:['album', 'camera'\\] |\n@| success | (callback: [ChooseVideoSuccess](#choosevideosuccess-values)) => void \\| null | 否 | - | - | 接口调用成功,返回视频文件的临时文件路径,详见返回参数说明 |\n@| fail | (callback: [IMediaError](#imediaerror-values)) => void \\| null | 否 | - | - | 接口调用失败的回调函数 |\n@| complete | (callback: any) => void \\| null | 否 | - | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n##### ChooseVideoSuccess 的属性值 @choosevideosuccess-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| tempFilePath | string | 是 | - | - | 选定视频的临时文件路径 |\n| duration | number | 是 | - | - | 选定视频的时间长度 |\n| size | number | 是 | - | - | 选定视频的数据量大小 |\n| height | number | 是 | - | - | 返回选定视频的长 |\n| width | number | 是 | - | - | 返回选定视频的宽 |\n\n##### IMediaError 的属性值 @imediaerror-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errCode | 1101001 \\| 1101002 \\| 1101003 \\| 1101004 \\| 1101005 \\| 1101006 \\| 1101007 \\| 1101008 \\| 1101009 \\| 1101010 | 是 | - | - | 错误码<br/>- 1101001 用户取消<br/>- 1101002 urls至少包含一张图片地址<br/>- 1101003 文件不存在<br/>- 1101004 图片加载失败<br/>- 1101005 未获取权限<br/>- 1101006 图片或视频保存失败<br/>- 1101007 图片裁剪失败<br/>- 1101008 拍照或录像失败<br/>- 1101009 图片压缩失败<br/>- 1101010 其他错误 |\n| errSubject | string | 是 | - | - | 统一错误主题(模块)名称 |\n| data | any \\| null | 否 | - | - | 错误信息中包含的数据 |\n| cause | [Error](https://uniapp.dcloud.net.cn/tutorial/err-spec.html#unierror) \\| null | 否 | - | - | 源错误信息,可以包含多个错误,详见SourceError |\n| errMsg | string | 是 | - | - | - |\n",
    "returnValue": "",
    "tutorial": "\n### 参见\n\n- [参见uni-app相关文档](http://uniapp.dcloud.io/api/media/video?id=choosevideo)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=chooseVideo&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=chooseVideo&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=chooseVideo&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=chooseVideo&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=chooseVideo&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=chooseVideo)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=chooseVideo&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.media.chooseVideo)",
    "example": "### 示例 \n> [hello uni-app x](https://gitcode.net/dcloud/hello-uni-app-x/-/blob/dev/pages/API/choose-video/choose-video.uvue) \n ::: preview https://hellouniappx.dcloud.net.cn/web/#/pages/API/choose-video/choose-video\n>Template\n```vue\n<template>\n  <!-- #ifdef APP -->\n  <scroll-view style=\"flex:1\">\n  <!-- #endif -->\n    <page-head :title=\"title\"></page-head>\n    <view class=\"uni-padding-wrap\">\n      <video class=\"video\" :src=\"src\" :controls=\"true\"></video>\n      <view class=\"uni-title\">\n        <text class=\"uni-subtitle-text\">视频信息</text>\n      </view>\n      <text>{{videoInfo}}</text>\n      <view class=\"uni-btn-v\">\n        <button type=\"primary\" @click=\"chooseVideo\">选取视频</button>\n      </view>\n      <enum-data title=\"视频来源\" :items=\"sourceTypeItemTypes\" @change=\"onSourceTypeChange\"></enum-data>\n      <enum-data title=\"摄像头\" :items=\"cameraItemTypes\" @change=\"onCameraChange\"></enum-data>\n    </view>\n    <input-data title=\"最长拍摄时间,单位秒\" defaultValue=\"60\" type=\"number\" @confirm=\"onMaxDurationConfirm\"></input-data>\n    <!-- #ifdef APP -->\n    <view class=\"uni-padding-wrap\">\n      <boolean-data title=\"是否压缩\" :defaultValue=\"true\" @change=\"onCompressedChange\"></boolean-data>\n    </view>\n    <!-- #endif -->\n  <!-- #ifdef APP -->\n  </scroll-view>\n  <!-- #endif -->\n</template>\n\n\n\n<style>\n  .video {\n    align-self: center;\n    width: 300px;\n    height: 225px;\n  }\n</style>\n\n```\n>Script\n```uts\n\n  import { ItemType } from '@/components/enum-data/enum-data';\n  export default {\n    data() {\n      return {\n        title: \"chooseVideo\",\n        src: \"\",\n        sourceTypeItemTypes: [{ \"value\": 0, \"name\": \"从相册中选择视频\" }, { \"value\": 1, \"name\": \"拍摄视频\" }, { \"value\": 2, \"name\": \"从相册中选择视频或拍摄视频\" }] as ItemType[],\n        sourceTypeItems: [[\"album\"], [\"camera\"], [\"album\", \"camera\"]],\n        cameraItemTypes: [{ \"value\": 0, \"name\": \"后置摄像头\" }, { \"value\": 1, \"name\": \"前置摄像头\" }] as ItemType[],\n        cameraItems: [\"back\", \"front\"],\n        sourceType: [\"album\", \"camera\"],\n        compressed: true,\n        maxDuration: 60,\n        camera: \"back\",\n        videoInfo: \"\"\n      }\n    },\n    methods: {\n      chooseVideo() {\n        uni.chooseVideo({\n          sourceType: this.sourceType,\n          // #ifdef APP\n          compressed: this.compressed,\n          // #endif\n          maxDuration: this.maxDuration,\n          camera: this.camera,\n          success: (res) => {\n            console.log(\"chooseVideo success\", JSON.stringify(res));\n            this.src = res.tempFilePath;\n            this.videoInfo = `视频长度: ${res.duration}s\\n视频大小: ${Math.ceil(res.size / 1024)}KB\\n视频宽度: ${res.width}\\n视频高度: ${res.height}\\n`;\n          },\n          fail: (err) => {\n            uni.showModal({\n              title: \"选择视频失败\",\n              content: JSON.stringify(err),\n              showCancel: false\n            });\n          }\n        });\n      },\n      onSourceTypeChange(value : number) {\n        this.sourceType = this.sourceTypeItems[value];\n      },\n      onCompressedChange(value : boolean) {\n        this.compressed = value;\n      },\n      onMaxDurationConfirm(value : number) {\n        this.maxDuration = value;\n      },\n      onCameraChange(value : number) {\n        this.camera = this.cameraItems[value];\n      }\n    }\n  }\n\n```\n:::"
  },
  "saveVideoToPhotosAlbum": {
    "name": "## uni.saveVideoToPhotosAlbum(options) @savevideotophotosalbum",
    "description": "保存视频到系统相册",
    "compatibility": "### saveVideoToPhotosAlbum  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| x | 4.18 | 4.18 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | [SaveVideoToPhotosAlbumOptions](#savevideotophotosalbumoptions-values) | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| filePath | [string.VideoURIString](/uts/data-type.md#ide-string) | 是 | - | - | 视频文件路径,可以是临时文件路径也可以是永久文件路径 |\n@| success | (callback: SaveVideoToPhotosAlbumSuccess) => void \\| null | 否 | - | - | 接口调用成功的回调函数 |\n@| fail | (callback: [IMediaError](#imediaerror-values)) => void \\| null | 否 | - | - | 接口调用失败的回调函数 |\n@| complete | (callback: any) => void \\| null | 否 | - | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n##### IMediaError 的属性值 @imediaerror-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errCode | 1101001 \\| 1101002 \\| 1101003 \\| 1101004 \\| 1101005 \\| 1101006 \\| 1101007 \\| 1101008 \\| 1101009 \\| 1101010 | 是 | - | - | 错误码<br/>- 1101001 用户取消<br/>- 1101002 urls至少包含一张图片地址<br/>- 1101003 文件不存在<br/>- 1101004 图片加载失败<br/>- 1101005 未获取权限<br/>- 1101006 图片或视频保存失败<br/>- 1101007 图片裁剪失败<br/>- 1101008 拍照或录像失败<br/>- 1101009 图片压缩失败<br/>- 1101010 其他错误 |\n| errSubject | string | 是 | - | - | 统一错误主题(模块)名称 |\n| data | any \\| null | 否 | - | - | 错误信息中包含的数据 |\n| cause | [Error](https://uniapp.dcloud.net.cn/tutorial/err-spec.html#unierror) \\| null | 否 | - | - | 源错误信息,可以包含多个错误,详见SourceError |\n| errMsg | string | 是 | - | - | - |\n",
    "returnValue": "",
    "tutorial": "\n### 参见\n\n- [参见uni-app相关文档](http://uniapp.dcloud.io/api/media/video?id=savevideotophotosalbum)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=saveVideoToPhotosAlbum&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=saveVideoToPhotosAlbum&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=saveVideoToPhotosAlbum&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=saveVideoToPhotosAlbum&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=saveVideoToPhotosAlbum&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=saveVideoToPhotosAlbum)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=saveVideoToPhotosAlbum&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.media.saveVideoToPhotosAlbum)",
    "example": "### 示例 \n> [hello uni-app x](https://gitcode.net/dcloud/hello-uni-app-x/-/blob/dev/pages/API/save-video-to-photos-album/save-video-to-photos-album.uvue) \n >\n> 该 API 不支持 Web,请运行 hello uni-app x 到 App 平台体验 \n```uvue\n<template>\n  <!-- #ifdef APP -->\n  <scroll-view style=\"flex:1\">\n  <!-- #endif -->\n    <page-head :title=\"title\"></page-head>\n    <view class=\"uni-padding-wrap\">\n      <video class=\"video\" :src=\"src\" :controls=\"true\"></video>\n      <button type=\"primary\" class=\"margin-top-10\" @click=\"saveVideo\">将视频保存到手机相册</button>\n    </view>\n  <!-- #ifdef APP -->\n  </scroll-view>\n  <!-- #endif -->\n</template>\n\n<script>\n  export default {\n    data() {\n      return {\n        title: 'saveVideoToPhotosAlbum',\n        src: '/static/test-video/10second-demo.mp4',\n        // 自动化测试\n        success: false\n      }\n    },\n    methods: {\n      saveVideo() {\n        uni.saveVideoToPhotosAlbum({\n          filePath: this.src,\n          success: (_) => {\n            console.log(\"saveVideoToPhotosAlbum success\");\n            uni.showToast({\n              position: \"center\",\n              icon: \"none\",\n              title: \"视频保存成功,请到手机相册查看\"\n            });\n            this.success = true;\n          },\n          fail: (err) => {\n            uni.showModal({\n              title: \"保存视频到相册失败\",\n              content: JSON.stringify(err),\n              showCancel: false\n            });\n            this.success = false;\n          }\n        });\n      }\n    }\n  }\n</script>\n\n<style>\n  .video {\n    align-self: center;\n  }\n\n  .margin-top-10 {\n    margin-top: 10px;\n  }\n</style>\n\n```"
  },
  "getVideoInfo": {
    "name": "## uni.getVideoInfo(options) @getvideoinfo",
    "description": "获取视频详细信息",
    "compatibility": "### getVideoInfo  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 4.18 | - |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | [GetVideoInfoOptions](#getvideoinfooptions-values) | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| src | [string.VideoURIString](/uts/data-type.md#ide-string) | 是 | - | - | 视频文件路径,可以是临时文件路径也可以是永久文件路径 |\n@| success | (callback: [GetVideoInfoSuccess](#getvideoinfosuccess-values)) => void \\| null | 否 | - | - | 接口调用成功的回调函数 |\n@| fail | (callback: [IMediaError](#imediaerror-values)) => void \\| null | 否 | - | - | 接口调用失败的回调函数 |\n@| complete | (callback: any) => void \\| null | 否 | - | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n##### GetVideoInfoSuccess 的属性值 @getvideoinfosuccess-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| duration | number | 是 | - | - | 视频长度 |\n| size | number | 是 | - | - | 视频大小,单位 kB |\n| height | number | 是 | - | - | 视频的长,单位 px |\n| width | number | 是 | - | - | 视频的宽,单位 px |\n\n##### IMediaError 的属性值 @imediaerror-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errCode | 1101001 \\| 1101002 \\| 1101003 \\| 1101004 \\| 1101005 \\| 1101006 \\| 1101007 \\| 1101008 \\| 1101009 \\| 1101010 | 是 | - | - | 错误码<br/>- 1101001 用户取消<br/>- 1101002 urls至少包含一张图片地址<br/>- 1101003 文件不存在<br/>- 1101004 图片加载失败<br/>- 1101005 未获取权限<br/>- 1101006 图片或视频保存失败<br/>- 1101007 图片裁剪失败<br/>- 1101008 拍照或录像失败<br/>- 1101009 图片压缩失败<br/>- 1101010 其他错误 |\n| errSubject | string | 是 | - | - | 统一错误主题(模块)名称 |\n| data | any \\| null | 否 | - | - | 错误信息中包含的数据 |\n| cause | [Error](https://uniapp.dcloud.net.cn/tutorial/err-spec.html#unierror) \\| null | 否 | - | - | 源错误信息,可以包含多个错误,详见SourceError |\n| errMsg | string | 是 | - | - | - |\n",
    "returnValue": "",
    "tutorial": "\n### 参见\n\n- [参见uni-app相关文档](http://uniapp.dcloud.io/api/media/video?id=getvideoinfo)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=getVideoInfo&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=getVideoInfo&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=getVideoInfo&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=getVideoInfo&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=getVideoInfo&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=getVideoInfo)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=getVideoInfo&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.media.getVideoInfo)",
    "example": "### 示例 \n> [hello uni-app x](https://gitcode.net/dcloud/hello-uni-app-x/-/blob/dev/pages/API/get-video-info/get-video-info.uvue) \n ::: preview https://hellouniappx.dcloud.net.cn/web/#/pages/API/get-video-info/get-video-info\n>Template\n```vue\n<template>\n  <!-- #ifdef APP -->\n  <scroll-view style=\"flex:1\">\n  <!-- #endif -->\n    <page-head :title=\"title\"></page-head>\n    <view class=\"uni-padding-wrap\">\n      <view class=\"uni-title\">\n        <text class=\"uni-subtitle-text\">获取本地绝对路径视频信息</text>\n      </view>\n      <video class=\"video\" :src=\"absoluteVideoPath\" :controls=\"true\"></video>\n      <text class=\"margin-top-10\">{{absoluteVideoInfo}}</text>\n      <view class=\"uni-btn-v\">\n        <button type=\"primary\" @click=\"chooseVideo\">拍摄视频或从相册中选择视频</button>\n      </view>\n    </view>\n  <!-- #ifdef APP -->\n  </scroll-view>\n  <!-- #endif -->\n</template>\n\n\n\n<style>\n  .video {\n    align-self: center;\n  }\n\n  .margin-top-10 {\n    margin-top: 10px;\n  }\n</style>\n\n```\n>Script\n```uts\n\n  export default {\n    data() {\n      return {\n        title: \"getVideoInfo\",\n        absoluteVideoPath: \"\",\n        absoluteVideoInfo: \"\",\n        // 自动化测试\n        videoInfoForTest: null as UTSJSONObject | null\n      }\n    },\n    methods: {\n      chooseVideo() {\n        uni.chooseVideo({\n          compressed: false,\n          success: (res) => {\n            this.absoluteVideoPath = res.tempFilePath;\n            uni.getVideoInfo({\n              src: res.tempFilePath,\n              success: (_res) => {\n                console.log(\"getVideoInfo success\", JSON.stringify(res));\n                this.absoluteVideoInfo = `视频画面方向: ${_res.orientation}\\n视频格式: ${_res.type}\\n视频长度: ${_res.duration}s\\n视频大小: ${_res.size}KB\\n视频宽度: ${_res.width}\\n视频高度: ${_res.height}\\n视频帧率: ${_res.fps}fps\\n视频码率: ${_res.bitrate}kbps`;\n              },\n              fail: (err) => {\n                uni.showModal({\n                  title: \"获取视频信息失败\",\n                  content: JSON.stringify(err),\n                  showCancel: false\n                });\n              }\n            });\n          }\n        });\n      },\n      testGetVideoInfo() {\n        uni.getVideoInfo({\n          src: '/static/test-video/10second-demo.mp4',\n          success: (res) => {\n            this.videoInfoForTest = {\n              \"orientation\": res.orientation,\n              \"type\": res.type,\n              \"duration\": res.duration.toInt(),\n              \"size\": res.size,\n              \"width\": res.width,\n              \"height\": res.height,\n              \"fps\": res.fps,\n              \"bitrate\": res.bitrate\n            };\n          },\n          fail: (_) => {\n            this.videoInfoForTest = null;\n          }\n        });\n      }\n    }\n  }\n\n```\n:::"
  },
  "compressVideo": {
    "name": "## uni.compressVideo(options) @compressvideo",
    "description": "压缩视频",
    "compatibility": "### compressVideo  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 4.18 | - |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | [CompressVideoOptions](#compressvideooptions-values) | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| src | [string.VideoURIString](/uts/data-type.md#ide-string) | 是 | - | - | 视频文件路径,可以是临时文件路径也可以是永久文件路径 |\n@| quality | string \\| null | 否 | - | - | 压缩质量<br/>- low: 低<br/>- medium: 中<br/>- high: 高 |\n@| resolution | number \\| null | 否 | - | - | 相对于原视频的分辨率比例,取值范围(0, 1\\] |\n@| success | (callback: [CompressVideoSuccess](#compressvideosuccess-values)) => void \\| null | 否 | - | - | 接口调用成功的回调函数 |\n@| fail | (callback: [IMediaError](#imediaerror-values)) => void \\| null | 否 | - | - | 接口调用失败的回调函数 |\n@| complete | (callback: any) => void \\| null | 否 | - | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n##### CompressVideoSuccess 的属性值 @compressvideosuccess-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| tempFilePath | string | 是 | - | - | 压缩后的临时文件地址 |\n| size | number | 是 | - | - | 压缩后的大小,单位 kB |\n\n##### IMediaError 的属性值 @imediaerror-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errCode | 1101001 \\| 1101002 \\| 1101003 \\| 1101004 \\| 1101005 \\| 1101006 \\| 1101007 \\| 1101008 \\| 1101009 \\| 1101010 | 是 | - | - | 错误码<br/>- 1101001 用户取消<br/>- 1101002 urls至少包含一张图片地址<br/>- 1101003 文件不存在<br/>- 1101004 图片加载失败<br/>- 1101005 未获取权限<br/>- 1101006 图片或视频保存失败<br/>- 1101007 图片裁剪失败<br/>- 1101008 拍照或录像失败<br/>- 1101009 图片压缩失败<br/>- 1101010 其他错误 |\n| errSubject | string | 是 | - | - | 统一错误主题(模块)名称 |\n| data | any \\| null | 否 | - | - | 错误信息中包含的数据 |\n| cause | [Error](https://uniapp.dcloud.net.cn/tutorial/err-spec.html#unierror) \\| null | 否 | - | - | 源错误信息,可以包含多个错误,详见SourceError |\n| errMsg | string | 是 | - | - | - |\n",
    "returnValue": "",
    "tutorial": "\n### 参见\n\n- [参见uni-app相关文档](http://uniapp.dcloud.io/api/media/video?id=compressvideo)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=compressVideo&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=compressVideo&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=compressVideo&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=compressVideo&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=compressVideo&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=compressVideo)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=compressVideo&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.media.compressVideo)",
    "example": "### 示例 \n> [hello uni-app x](https://gitcode.net/dcloud/hello-uni-app-x/-/blob/dev/pages/API/compress-video/compress-video.uvue) \n >\n> 该 API 不支持 Web,请运行 hello uni-app x 到 App 平台体验 \n```uvue\n<template>\n  <!-- #ifdef APP -->\n  <scroll-view style=\"flex:1\">\n  <!-- #endif -->\n    <page-head :title=\"title\"></page-head>\n    <view class=\"uni-padding-wrap\">\n      <video class=\"video\" :src=\"beforeCompressPath\" :controls=\"true\"></video>\n      <view class=\"uni-title\">\n        <text class=\"uni-subtitle-text\">压缩前视频信息</text>\n      </view>\n      <text>{{beforeCompressVideoInfo}}</text>\n      <video class=\"video\" :src=\"afterCompressPath\" :controls=\"true\"></video>\n      <view class=\"uni-title\">\n        <text class=\"uni-subtitle-text\">压缩后视频信息</text>\n      </view>\n      <text>{{afterCompressVideoInfo}}</text>\n      <view class=\"uni-btn-v\">\n        <button type=\"primary\" @click=\"chooseVideo\">从相册中选取待压缩的视频</button>\n      </view>\n      <view class=\"uni-btn-v\">\n        <button type=\"primary\" @click=\"compressVideo\">压缩视频</button>\n      </view>\n      <enum-data title=\"压缩质量\" :items=\"qualityItemTypes\" @change=\"onQualityChange\"></enum-data>\n      <view class=\"uni-common-mt\">\n        <text class=\"uni-title uni-title-text\">相对于原视频的分辨率比例,取值范围(0, 1]</text>\n        <slider :min=\"0.1\" :max=\"1\" :step=\"0.1\" :show-value=\"true\" @change=\"onResolutionChange\"></slider>\n      </view>\n    </view>\n  <!-- #ifdef APP -->\n  </scroll-view>\n  <!-- #endif -->\n</template>\n\n<script>\n  import { ItemType } from '@/components/enum-data/enum-data';\n  export default {\n    data() {\n      return {\n        title: \"compressVideo\",\n        beforeCompressVideoInfo: \"\",\n        afterCompressVideoInfo: \"\",\n        beforeCompressPath: \"\",\n        afterCompressPath: \"\",\n        quality: null as string | null,\n        bitrate: null as number | null,\n        fps: null as number | null,\n        resolution: null as number | null,\n        qualityItemTypes: [{ \"value\": 0, \"name\": \"low(低)\" }, { \"value\": 1, \"name\": \"medium(中)\" }, { \"value\": 2, \"name\": \"high(高)\" }] as ItemType[],\n        qualityItems: [\"low\", \"medium\", \"high\"],\n        // 自动化测试\n        videoInfoForTest: null,\n        videoSrcForTest: '/static/test-video/10second-demo.mp4'\n      }\n    },\n    methods: {\n      compressVideo() {\n        if (this.beforeCompressPath == \"\") {\n          uni.showToast({\n            title: \"请先选择视频\",\n            icon: \"error\"\n          });\n          return;\n        }\n        uni.showLoading({\n          title: \"视频压缩中\"\n        });\n        uni.compressVideo({\n          src: this.beforeCompressPath,\n          quality: this.quality,\n          resolution: this.resolution,\n          success: (res) => {\n            console.log(\"compressVideo success\", JSON.stringify(res));\n            this.afterCompressPath = res.tempFilePath;\n            uni.showToast({\n              title: \"压缩成功\",\n              icon: null\n            });\n            uni.getVideoInfo({\n              src: res.tempFilePath,\n              success: (_res) => {\n                this.afterCompressVideoInfo = `视频画面方向: ${_res.orientation}\\n视频格式: ${_res.type}\\n视频长度: ${_res.duration}s\\n视频大小: ${_res.size}KB\\n视频宽度: ${_res.width}\\n视频高度: ${_res.height}\\n视频帧率: ${_res.fps}fps\\n视频码率: ${_res.bitrate}kbps`;\n              }\n            });\n          },\n          fail: (err) => {\n            uni.showModal({\n              title: \"压缩视频失败\",\n              content: JSON.stringify(err),\n              showCancel: false\n            });\n          },\n          complete: (_) => {\n            uni.hideLoading();\n          }\n        });\n      },\n      chooseVideo() {\n        uni.chooseVideo({\n          sourceType: [\"album\"],\n          compressed: false,\n          success: (res) => {\n            this.beforeCompressPath = res.tempFilePath;\n            uni.getVideoInfo({\n              src: res.tempFilePath,\n              success: (_res) => {\n                this.beforeCompressVideoInfo = `视频画面方向: ${_res.orientation}\\n视频格式: ${_res.type}\\n视频长度: ${_res.duration}s\\n视频大小: ${_res.size}KB\\n视频宽度: ${_res.width}\\n视频高度: ${_res.height}\\n视频帧率: ${_res.fps}fps\\n视频码率: ${_res.bitrate}kbps`;\n              }\n            });\n          }\n        });\n      },\n      onQualityChange(value : number) {\n        this.quality = this.qualityItems[value];\n      },\n      onResolutionChange(event : UniSliderChangeEvent) {\n        this.resolution = event.detail.value;\n      },\n      testCompressVideo() {\n        let beforeCompressSize: number, afterComoressSize: number;\n        uni.compressVideo({\n          src: this.videoSrcForTest,\n          quality: 'medium',\n          success: (res) => {\n            uni.getVideoInfo({\n              src: this.videoSrcForTest,\n              success: (_res) => {\n                beforeCompressSize = _res.size.toInt();\n                uni.getVideoInfo({\n                  src: res.tempFilePath,\n                  success: (__res) => {\n                    afterComoressSize = __res.size.toInt();\n                    this.videoInfoForTest = {\n                      \"width\": __res.width,\n                      \"height\": __res.height,\n                      \"isSizeReduce\": afterComoressSize < beforeCompressSize\n                    };\n                  }\n                });\n              }\n            });\n          },\n          fail: (_) => {\n            this.videoInfoForTest = null;\n          }\n        });\n      }\n    }\n  }\n</script>\n\n<style>\n  .video {\n    align-self: center;\n  }\n\n  .image-container {\n    flex-direction: row;\n  }\n</style>\n\n```"
  },
  "createInnerAudioContext": {
    "name": "## uni.createInnerAudioContext() @createinneraudiocontext",
    "description": "创建并返回 audio 上下文 audioContext 对象<br/>",
    "compatibility": "### createInnerAudioContext  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | x | x |\n",
    "param": "",
    "returnValue": "### 返回值  兼容性 \n\n| 类型 |\n| :- |\n| [InnerAudioContext](#inneraudiocontext-values) |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| duration | number | 是 | - | - | 当前音频的长度(单位:s),只有在当前有合法的 src 时返回 |\n@| currentTime | number | 是 | - | - | 当前音频的播放位置(单位:s),只有在当前有合法的 src 时返回 |\n@| paused | boolean | 是 | - | - | 当前是是否暂停或停止状态,true 表示暂停或停止,false 表示正在播放 |\n@| src | string | 是 | - | - | 音频的数据链接,用于直接播放。 |\n@| startTime | number | 是 | - | - | 音频开始播放的位置(单位:s) |\n@| buffered | number | 是 | - | - | 音频缓冲的时间点,仅保证当前播放时间点到此时间点内容已缓冲 |\n@| autoplay | boolean | 是 | - | - | 是否自动开始播放,默认 false |\n@| loop | boolean | 是 | - | - | 是否循环播放,默认 false |\n@| obeyMuteSwitch | boolean | 是 | - | - | 是否遵循系统静音开关,当此参数为 false 时,即使用户打开了静音开关,也能继续发出声音,默认值 true |\n@| volume | number | 是 | - | - | 音量。范围 0~1。 |\n@| playbackRate | number | 否 | - | - | 播放的倍率。可取值: 0.5/0.8/1.0/1.25/1.5/2.0,默认值为1.0。(仅 App 支持) |\n#### InnerAudioContext 的方法 @inneraudiocontext-values \n\n#### pause() @pause\n暂停\n##### pause  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n\n\n#### stop() @stop\n停止\n##### stop  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n\n\n#### play() @play\n播放\n##### play  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n\n\n#### seek(position) @seek\n跳转到指定位置,单位 s\n##### seek  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| position | number | 是 | - | - | - | \n\n\n#### destroy() @destroy\n销毁当前实例\n##### destroy  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n\n\n#### onCanplay(callback) @oncanplay\n音频进入可以播放状态,但不保证后面可以流畅播放\n##### onCanplay  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| callback | (result: any) => void | 是 | - | - | - | \n\n\n#### onPlay(callback) @onplay\n音频播放事件\n##### onPlay  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| callback | (result: any) => void | 是 | - | - | - | \n\n\n#### onPause(callback) @onpause\n音频暂停事件\n##### onPause  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| callback | (result: any) => void | 是 | - | - | - | \n\n\n#### onStop(callback) @onstop\n音频停止事件\n##### onStop  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| callback | (result: any) => void | 是 | - | - | - | \n\n\n#### onEnded(callback) @onended\n音频自然播放结束事件\n##### onEnded  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| callback | (result: any) => void | 是 | - | - | - | \n\n\n#### onTimeUpdate(callback) @ontimeupdate\n音频播放进度更新事件\n##### onTimeUpdate  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| callback | (result: any) => void | 是 | - | - | - | \n\n\n#### onError(callback) @onerror\n音频播放错误事件\n##### onError  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| callback | (result: any) => void | 是 | - | - | - | \n\n\n#### onWaiting(callback) @onwaiting\n音频加载中事件,当音频因为数据不足,需要停下来加载时会触发\n##### onWaiting  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| callback | (result: any) => void | 是 | - | - | - | \n\n\n#### onSeeking(callback) @onseeking\n音频进行 seek 操作事件\n##### onSeeking  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| callback | (result: any) => void | 是 | - | - | - | \n\n\n#### onSeeked(callback) @onseeked\n音频完成 seek 操作事件\n##### onSeeked  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| callback | (result: any) => void | 是 | - | - | - | \n\n\n#### offCanplay(callback) @offcanplay\n取消监听 onCanplay 事件\n##### offCanplay  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| callback | (result: any) => void | 是 | - | - | - | \n\n\n#### offPlay(callback) @offplay\n取消监听 onPlay 事件\n##### offPlay  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| callback | (result: any) => void | 是 | - | - | - | \n\n\n#### offPause(callback) @offpause\n取消监听 onPause 事件\n##### offPause  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| callback | (result: any) => void | 是 | - | - | - | \n\n\n#### offStop(callback) @offstop\n取消监听 onStop 事件\n##### offStop  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| callback | (result: any) => void | 是 | - | - | - | \n\n\n#### offEnded(callback) @offended\n取消监听 onEnded 事件\n##### offEnded  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| callback | (result: any) => void | 是 | - | - | - | \n\n\n#### offTimeUpdate(callback) @offtimeupdate\n取消监听 onTimeUpdate 事件\n##### offTimeUpdate  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| callback | (result: any) => void | 是 | - | - | - | \n\n\n#### offError(callback) @offerror\n取消监听 onWaiting 事件\n##### offError  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| callback | (result: any) => void | 是 | - | - | - | \n\n\n#### offWaiting(callback) @offwaiting\n取消监听 onWaiting 事件\n##### offWaiting  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| callback | (result: any) => void | 是 | - | - | - | \n\n\n#### offSeeking(callback) @offseeking\n取消监听 onSeeking 事件\n##### offSeeking  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| callback | (result: any) => void | 是 | - | - | - | \n\n\n#### offSeeked(callback) @offseeked\n取消监听 onSeeked 事件\n##### offSeeked  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| callback | (result: any) => void | 是 | - | - | - | \n\n \n",
    "tutorial": "\n### 参见\n - [参见uni-app相关文档](https://uniapp.dcloud.io/api/media/audio-context.html)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=createInnerAudioContext&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=createInnerAudioContext&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=createInnerAudioContext&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=createInnerAudioContext&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=createInnerAudioContext&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=createInnerAudioContext)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=createInnerAudioContext&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.media.createInnerAudioContext)",
    "example": "### 示例 \n> [hello uni-app x](https://gitcode.net/dcloud/hello-uni-app-x/-/blob/dev/pages/API/create-inner-audio-context/create-inner-audio-context.uvue) \n ::: preview https://hellouniappx.dcloud.net.cn/web/#/pages/API/create-inner-audio-context/create-inner-audio-context\n>Template\n```vue\n<template>\n  <view class=\"uni-padding-wrap\">\n    <page-head title=\"audio\"></page-head>\n    <view class=\"uni-common-mt\">\n      <slider :value=\"position\" :min=\"0\" :max=\"duration\" @changing=\"onchanging\" @change=\"onchange\"></slider>\n    </view>\n    <view class=\"uni-title\">\n      <text class=\"uni-title-text\">属性示例</text>\n    </View>\n    <text class=\"uni-text-box uni-common-mt\">当前音频播放位置(保留小数点后 6 位):{{currentTime}} s</text>\n    <text class=\"uni-text-box\">音频的长度(单位:s):{{duration}} s</text>\n    <text class=\"uni-text-box\">当前是否停止状态:{{isPaused}}</text>\n    <text class=\"uni-text-box\">音频缓冲的时间点:{{buffered}}</text>\n    <text class=\"uni-text-box\">当前音量:{{volume}}</text>\n    <!-- 设置音量无效 -->\n    <!-- <button plain :disabled=\"volume == 1\" @click=\"increaseVolume\">增加音量</button>\n    <button plain :disabled=\"volume == 0\" @click=\"decreaseVolume\">减少音量</button> -->\n\n    <text class=\"uni-subtitle-text uni-title\">开始播放的位置(单位:s)</text>\n    <input :value=\"startTime\" type=\"number\" placeholder=\"开始播放的位置(单位:s)\" class=\"uni-input\"\n      @input=\"startTimeInput\"></input>\n    <boolean-data :defaultValue=\"false\" title=\"是否自动开始播放\" @change=\"setAutoplay\"></boolean-data>\n    <boolean-data :defaultValue=\"false\" title=\"是否循环播放\" @change=\"setLoop\"></boolean-data>\n    <view class=\"uni-title\">\n      <text class=\"uni-title-text\">方法示例</text>\n    </View>\n    <button :disabled=\"isPlaying\" type=\"primary\" @click=\"play\" class=\"uni-btn\">播放</button>\n    <button :disabled=\"!isPlaying\" type=\"primary\" @click=\"pause\" class=\"uni-btn\">暂停</button>\n    <button :disabled=\"!isPlaying && !isPaused\" type=\"primary\" @click=\"stop\" class=\"uni-btn\">停止</button>\n    <button type=\"primary\" @click=\"onchange(20)\" class=\"uni-btn\">跳转到指定位置20</button>\n\n    <view class=\"uni-title\">\n      <text class=\"uni-title-text\">格式/路径示例</text>\n    </View>\n    <navigator url=\"/pages/API/create-inner-audio-context/inner-audio-format\" class=\"uni-btn\">\n      <button type=\"primary\" @click=\"pause\">音频格式示例</button>\n    </navigator>\n    <navigator url=\"/pages/API/create-inner-audio-context/inner-audio-path\" class=\"uni-btn uni-common-mb\">\n      <button type=\"primary\" @click=\"pause\">音频路径示例</button>\n    </navigator>\n  </view>\n</template>\n\n<style>\n  .play-time-area {\n    display: flex;\n    flex-direction: row;\n    margin-top: 20px;\n  }\n\n  .duration {\n    margin-left: auto;\n  }\n\n  .play-button-area {\n    display: flex;\n    flex-direction: row;\n    justify-content: center;\n    margin: 50px 0;\n  }\n\n  .icon-play {\n    width: 60px;\n    height: 60px;\n  }\n</style>\n\n```\n>Script\n```uts\n\n  const audioUrl = 'https://web-ext-storage.dcloud.net.cn/uni-app/ForElise.mp3'\n  export default {\n    data() {\n      return {\n        title: \"innerAudioContext\",\n        currentTime: 0,\n        duration: 100,\n        startTime: 0,\n        buffered: 0,\n        volume: 0.5,\n        isCanplay: false,\n        isPlaying: false,\n        isPaused: true,\n        isPlayEnd: false,\n        _isChanging: false,\n        _audioContext: null as InnerAudioContext | null,\n        // 自动化测试\n        onSeekingTest:false,\n        onSeekedTest:false,\n        onWaitingTest:false\n      }\n    },\n    computed: {\n      position() {\n        return this.isPlayEnd ? 0 : this.currentTime;\n      },\n    },\n    onReady() {\n      this._audioContext = uni.createInnerAudioContext();\n      this._audioContext!.src = audioUrl;\n      this.volume = this._audioContext!.volume;\n      this.onCanplay()\n    },\n    onUnload() {\n      if (this._audioContext != null && this.isPlaying) {\n        this.stop();\n        this._audioContext!.destroy()\n      }\n    },\n    methods: {\n      onCanplay() {\n        this._audioContext!.onCanplay(() => {\n          console.log('音频进入可以播放状态事件');\n          this.isCanplay = true;\n          // 当音频可以播放时,获取缓冲信息\n          this.buffered = this._audioContext!.buffered;\n          this.duration = this._audioContext!.duration || 0;\n        });\n      },\n      onchanging() {\n        this._isChanging = true;\n      },\n      onchange(e) {\n        console.log(e, 'e');\n        let pos = typeof e === \"number\" ? e : e.detail.value;\n        this._audioContext!.seek(pos);\n        this.onSeeking()\n        this.onSeeked()\n        this._isChanging = false;\n      },\n      startTimeInput(e : InputEvent) {\n        let startTimeValue = Number(e.detail.value)\n        this._audioContext!.startTime = startTimeValue;\n        this.onchange(startTimeValue)\n      },\n      setAutoplay() {\n        this._audioContext!.autoplay = !this._audioContext!.autoplay;\n        console.log(this._audioContext!.autoplay, 'autoplay');\n      },\n      setLoop() {\n        this._audioContext!.loop = !this._audioContext!.loop;\n        console.log(this._audioContext!.loop, 'loop');\n      },\n      play() {\n        if (!this.isCanplay) {\n          uni.showToast({\n            title: '音频未进入可以播放状态,请稍后再试'\n          });\n          return;\n        }\n        this.isPlaying = true;\n        this._audioContext!.play();\n        this.isPlayEnd = false;\n        if (this._audioContext!.startTime > 0) {\n          this.onchange(this._audioContext!.startTime)\n        }\n        this._audioContext!.onPlay(() => {\n          this.isPaused = false;\n          console.log('开始播放',this.isPaused);\n        });\n        this.onTimeUpdate()\n        this.onWaiting()\n        this.onError()\n        this.onEnded()\n      },\n      onSeeking() {\n        this._audioContext!.onSeeking(() => {\n          console.log('音频进行 seek 操作事件');\n          this.onSeekingTest = true\n        });\n      },\n      onSeeked() {\n        this._audioContext!.onSeeked(() => {\n          console.log('音频完成 seek 操作事件');\n          this.onSeekedTest = true\n        });\n      },\n      onWaiting() {\n        this._audioContext!.onWaiting(() => {\n          console.log('音频加载中事件');\n          this.onWaitingTest = true\n        });\n      },\n      onTimeUpdate() {\n        this._audioContext!.onTimeUpdate(() => {\n          // console.log('onTimeUpdate:音频播放进度更新事件,currentTime',this._audioContext!.currentTime);\n          if (this._isChanging === true) { return; }\n          this.currentTime = this._audioContext!.currentTime || 0;\n          if (this.currentTime > this.buffered) {\n            console.log('缓冲不足');\n          }\n        });\n      },\n      increaseVolume() {\n        this.volume = Math.min(this.volume + 0.1, 1);\n        this.volume = parseFloat(this.volume.toFixed(1));\n        console.log('增加音量', this.volume);\n      },\n      decreaseVolume() {\n        this.volume = Math.max(this.volume - 0.1, 0);\n        this.volume = parseFloat(this.volume.toFixed(1));\n        console.log('减少音量', this.volume);\n      },\n      onEnded() {\n        this._audioContext!.onEnded(() => {\n          console.log('播放结束');\n          this.currentTime = 0;\n          this.startTime = 0\n          this.isPlaying = false;\n          this.isPaused = true;\n          this.isPlayEnd = true;\n        });\n      },\n      onError() {\n        this._audioContext!.onError((err) => {\n          console.log('err', err);\n          this.isPlaying = false;\n          this.isPaused = true;\n        });\n      },\n      pause() {\n        this._audioContext!.pause();\n        this._audioContext!.onPause(() => {\n          console.log('音频暂停事件');\n          this.isPaused = true;\n        });\n        this.isPlaying = false;\n      },\n      stop() {\n        console.log('stop');\n        this._audioContext!.stop();\n        this._audioContext!.onStop(() => {\n          // 第一次点停止时,不触发\n          this.isPaused = true;\n          console.log('音频停止事件');\n        });\n        this.isPlaying = false;\n        console.log('stop',this.isPaused);\n      }\n    }\n  }\n\n```\n:::"
  },
  "getLocation": {
    "name": "## uni.getLocation(options) @getlocation",
    "description": "获取当前的地理位置、速度",
    "compatibility": "### getLocation  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.9.0 | 4.11 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | [GetLocationOptions](#getlocationoptions-values) | 是 | - | - |  |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| type | \"wgs84\" \\| \"gcj02\" | 否 | wgs84 | - | 默认为 wgs84 返回 gps 坐标,gcj02 返回可用于uni.openLocation的坐标,web端需配置定位 SDK 信息才可支持 gcj02 |\n@| altitude | boolean \\| null | 否 | false | - | 传入 true 会返回高度信息,由于获取高度需要较高精确度,会减慢接口返回速度 |\n@| geocode | boolean \\| null | 否 | false | - | 传入 true 会解析地址 |\n@| highAccuracyExpireTime | number \\| null | 否 | 3000 | - | 高精度定位超时时间(ms),指定时间内返回最高精度,该值3000ms以上高精度定位才有效果 |\n@| isHighAccuracy | boolean \\| null | 否 | false | - | 开启高精度定位 |\n@| success | (result: [GetLocationSuccess](#getlocationsuccess-values)) => void \\| null | 否 | - | - | 接口调用成功的回调函数 |\n@| fail | (result: [IGetLocationFail](#igetlocationfail-values)) => void \\| null | 否 | - | - | 接口调用失败的回调函数 |\n@| complete | (result: any) => void \\| null | 否 | - | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n##### GetLocationSuccess 的属性值 @getlocationsuccess-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| latitude | number | 是 | 0 | - | 纬度,浮点数,范围为-90~90,负数表示南纬 |\n| longitude | number | 是 | 0 | - | 经度,范围为-180~180,负数表示西经 |\n| speed | number | 是 | 0 | - | 速度,浮点数,单位m/s |\n| accuracy | number | 是 | - | - | 位置的精确度 |\n| altitude | number | 是 | 0 | - | 高度,单位 m |\n| verticalAccuracy | number | 是 | 0 | - | 垂直精度,单位 m(Android 无法获取,返回 0) |\n| horizontalAccuracy | number | 是 | 0 | - | 水平精度,单位 m |\n| address | any \\| null | 否 | null | - | 地址信息 |\n\n##### IGetLocationFail 的属性值 @igetlocationfail-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errCode | 1505004 \\| 1505005 \\| 1505021 \\| 1505022 \\| 1505023 \\| 1505024 \\| 1505025 \\| 1505026 | 是 | - | - | 错误码<br/>- 1505004  缺失权限<br/>- 1505005  缺失高精度权限授权(iOS特有)<br/>- 1505021  超时<br/>- 1505022  不支持的定位类型<br/>- 1505023  不支持逆地理编码<br/>- 1505024  没有找到具体的定位引擎,请定位开关是否已打开<br/>- 1505025  逆地理编码捕获失败<br/>- 1505026  捕获定位失败 |\n| errSubject | string | 是 | - | - | 统一错误主题(模块)名称 |\n| data | any \\| null | 否 | - | - | 错误信息中包含的数据 |\n| cause | [Error](https://uniapp.dcloud.net.cn/tutorial/err-spec.html#unierror) \\| null | 否 | - | - | 源错误信息,可以包含多个错误,详见SourceError |\n| errMsg | string | 是 | - | - | - |\n",
    "returnValue": "",
    "tutorial": "\n### 参见\n\n- [参见uni-app相关文档](http://uniapp.dcloud.io/api/location/location?id=getlocation)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=getLocation&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=getLocation&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=getLocation&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=getLocation&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=getLocation&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=getLocation)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=getLocation&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.location.getLocation)",
    "example": "### 示例 \n> [hello uni-app x](https://gitcode.net/dcloud/hello-uni-app-x/-/blob/dev/pages/API/get-location/get-location.uvue) \n ::: preview https://hellouniappx.dcloud.net.cn/web/#/pages/API/get-location/get-location\n>Template\n```vue\n<template>\r\n  <page-head :title=\"title\"></page-head>\r\n  <view style=\"padding: 4px\">\r\n    <text class=\"hello-text\">\r\n      定位功能默认调用操作系统定位API实现。\\n\r\n      部分手机因gms兼容不好可能导致无法定位。\\n\r\n      gcj国标、逆地理信息等功能需三方sdk定位。如果需要类似能力可以下载腾讯定位插件,打包自定义基座。参考示例:</text>\r\n    <u-link :href=\"'https://ext.dcloud.net.cn/plugin?id=14569'\" :text=\"'https://ext.dcloud.net.cn/plugin?id=14569'\"\r\n      :inWhiteList=\"true\"></u-link>\r\n  </view>\r\n\r\n  <view class=\"uni-padding-wrap uni-common-mt\">\r\n    <view class=\"uni-list-cell-db\">定位服务商provider(如系统定位,腾讯定位等)</view>\r\n    <view class=\"uni-list\" style=\"margin-bottom: 20px\">\r\n      <radio-group @change=\"radioChangePV\">\r\n        <radio class=\"uni-list-cell uni-list-cell-pd\" v-for=\"(item, index) in providerList\" :key=\"item.id\"\r\n          :class=\"index < providerList.length - 1 ? 'uni-list-cell-line' : ''\" :value=\"item.id\"\r\n          :checked=\"index === currentProvider\">\r\n          {{ item.name }}\r\n        </radio>\r\n      </radio-group>\r\n    </view>\r\n    <view class=\"uni-list-cell-db\">定位类型1</view>\r\n    <view class=\"uni-list\">\r\n      <radio-group @change=\"radioChange\">\r\n        <radio class=\"uni-list-cell uni-list-cell-pd\" v-for=\"(item, index) in items\" :key=\"item.value\"\r\n          :class=\"index < items.length - 1 ? 'uni-list-cell-line' : ''\" :value=\"item.value\"\r\n          :checked=\"index === current\">\r\n          {{ item.name }}\r\n        </radio>\r\n      </radio-group>\r\n    </view>\r\n    <view class=\"uni-list-cell uni-list-cell-pd\" style=\"margin-top: 20px\">\r\n      <view class=\"uni-list-cell-db\">高度信息</view>\r\n      <switch :checked=\"altitudeSelect\" @change=\"altitudeChange\" />\r\n    </view>\r\n    <view class=\"uni-list-cell uni-list-cell-pd\">\r\n      <view class=\"uni-list-cell-db\">开启高精度定位</view>\r\n      <switch :checked=\"isHighAccuracySelect\" @change=\"highAccuracySelectChange\" />\r\n    </view>\r\n    <view class=\"uni-list-cell uni-list-cell-pd\">\r\n      <view class=\"uni-list-cell-db\">是否解析地址信息</view>\r\n      <switch :checked=\"geocodeSelect\" @change=\"geocodeChange\" />\r\n    </view>\r\n    <text>{{ exeRet }}</text>\r\n    <view class=\"uni-btn-v\">\r\n      <button class=\"uni-btn\" type=\"default\" @tap=\"getLocationTap\">\r\n        获取定位\r\n      </button>\r\n    </view>\r\n  </view>\r\n</template>\r\n\n\n```\n>Script\n```uts\n\r\n  export type LocationItem = { id : string, name : string, provider ?: UniProvider }\r\n  export type ItemType = { value : string, name : string }\r\n\r\n  export default {\r\n    data() {\r\n      return {\r\n        title: 'get-location',\r\n        altitudeSelect: false,\r\n        isHighAccuracySelect: false,\r\n        geocodeSelect: false,\r\n        exeRet: '',\r\n        items: [\r\n          {\r\n            value: 'wgs84',\r\n            name: 'wgs84'\r\n          },\r\n          {\r\n            value: 'gcj02',\r\n            name: 'gcj02'\r\n          }\r\n        ] as ItemType[],\r\n        providerList: [] as LocationItem[],\r\n        current: 0,\r\n        currentProvider: 0\r\n      }\r\n    },\r\n    onLoad: function () {\r\n      this.getProvider()\r\n    },\r\n    methods: {\r\n      getProvider() {\r\n        uni.getProvider({\r\n          service: \"location\",\r\n          success: (e) => {\r\n            console.log(\"location success:\" + JSON.stringify(e), e.providers.length);\r\n            let array = e.provider as string[]\r\n            array.forEach((value : string) => {\r\n              let locationProvider = e.providers.find((item) : boolean => {\r\n                return item.id == value\r\n              })\r\n              if (locationProvider != null) {\r\n                this.providerList.push({\r\n                  name: locationProvider.description,\r\n                  id: locationProvider.id,\r\n                  provider: e.providers.find((item) : boolean => {\r\n                    return item.id == locationProvider.id\r\n                  })\r\n                } as LocationItem);\r\n              }\r\n            })\r\n          },\r\n          fail: (e) => {\r\n            console.log(\"获取支付通道失败:\", e);\r\n          }\r\n        });\r\n\r\n\r\n\r\n      },\r\n      altitudeChange: function (e : UniSwitchChangeEvent) {\r\n        this.altitudeSelect = e.detail.value\r\n      },\r\n      geocodeChange: function (e : UniSwitchChangeEvent) {\r\n        this.geocodeSelect = e.detail.value\r\n      },\r\n      highAccuracySelectChange: function (e : UniSwitchChangeEvent) {\r\n        this.isHighAccuracySelect = e.detail.value\r\n      },\r\n      radioChange(e : UniRadioGroupChangeEvent) {\r\n        for (let i = 0; i < this.items.length; i++) {\r\n          if (this.items[i].value === e.detail.value) {\r\n            this.current = i;\r\n            break;\r\n          }\r\n        }\r\n      },\r\n      radioChangePV(e : UniRadioGroupChangeEvent) {\r\n        for (let i = 0; i < this.providerList.length; i++) {\r\n          if (this.providerList[i].id === e.detail.value) {\r\n            this.currentProvider = i;\r\n            break;\r\n          }\r\n        }\r\n      },\r\n      getLocationTap: function () {\r\n        if (this.providerList.length == 0) {\r\n          return\r\n        }\r\n        uni.showLoading({\r\n          title: '定位中'\r\n        })\r\n        console.log(\"provider\", this.providerList[this.currentProvider].id)\r\n        let locationProvider = this.providerList[this.currentProvider]\r\n\r\n        if (locationProvider.provider?.isAppExist == false && 'tencent' == locationProvider.provider?.id) {\r\n          uni.showToast({\r\n            title: '需要打自定义基座',\r\n            icon: \"error\"\r\n          })\r\n          return\r\n        }\r\n        uni.getLocation(({\r\n          provider: this.providerList[this.currentProvider].id,\r\n          type: this.items[this.current].value,\r\n          altitude: this.altitudeSelect,\r\n          isHighAccuracy: this.isHighAccuracySelect,\r\n          geocode: this.geocodeSelect,\r\n          success: (res : any) => {\r\n            uni.hideLoading()\r\n            console.log(res);\r\n            this.exeRet = JSON.stringify(res)\r\n          },\r\n          fail: (res : any) => {\r\n            uni.hideLoading()\r\n            console.log(res);\r\n            this.exeRet = JSON.stringify(res)\r\n          },\r\n          complete: (res : any) => {\r\n            uni.hideLoading()\r\n            console.log(res);\r\n            this.exeRet = JSON.stringify(res)\r\n          }\r\n        }));\r\n\r\n\r\n      }\r\n\r\n    }\r\n  }\r\n\n```\n:::"
  },
  "openLocation": {
    "name": "## uni.openLocation(options) @openlocation",
    "description": "使用地图查看位置<br/>",
    "compatibility": "### openLocation  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | x | x |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | [OpenLocationOptions](#openlocationoptions-values) | 是 | - | - | uni.openLocation |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| latitude | number | 是 | - | - | 纬度,范围为-90~90,负数表示南纬 |\n@| longitude | number | 是 | - | - | 经度,范围为-180~180,负数表示西经 |\n@| scale | number | 否 | - | - | 缩放比例,范围5~18,默认为18 |\n@| name | string | 否 | - | - | 位置名称 |\n@| address | string | 否 | - | - | 地址的详细说明 |\n@| success | (res: OpenLocationSuccess) => void | 否 | - | - | uni.openLocation成功回调函数定义 |\n@| fail | (res: [IOpenLocationError](#iopenlocationerror-values)) => void | 否 | - | - | uni.openLocation失败回调函数定义 |\n@| complete | (res: any) => void | 否 | - | - | uni.openLocation完成回调函数定义 | \n\n##### IOpenLocationError 的属性值 @iopenlocationerror-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errCode | number | 是 | - | - | - |\n| errSubject | string | 是 | - | - | 统一错误主题(模块)名称 |\n| data | any \\| null | 否 | - | - | 错误信息中包含的数据 |\n| cause | [Error](https://uniapp.dcloud.net.cn/tutorial/err-spec.html#unierror) \\| null | 否 | - | - | 源错误信息,可以包含多个错误,详见SourceError |\n| errMsg | string | 是 | - | - | - |\n",
    "returnValue": "",
    "tutorial": "\n### 参见\n - [参见uni-app相关文档](https://uniapp.dcloud.io/api/location/open-location.html)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=openLocation&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=openLocation&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=openLocation&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=openLocation&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=openLocation&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=openLocation)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=openLocation&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.location.openLocation)",
    "example": "### 示例 \n> [hello uni-app x](https://gitcode.net/dcloud/hello-uni-app-x/-/blob/dev/pages/API/open-location/open-location.uvue) \n ::: preview https://hellouniappx.dcloud.net.cn/web/#/pages/API/open-location/open-location\n>Template\n```vue\n<template>\n\t<view>\n\t\t<page-head :title=\"title\"></page-head>\n\t\t<view class=\"uni-common-mt\">\n\t\t\t<form @submit=\"openLocation\">\n\t\t\t\t<view class=\"uni-list\">\n\t\t\t\t\t<view class=\"uni-list-cell\">\n\t\t\t\t\t\t<view class=\"uni-list-cell-left\">\n\t\t\t\t\t\t\t<view class=\"uni-label\">经度</view>\n\t\t\t\t\t\t</view>\n\t\t\t\t\t\t<view class=\"uni-list-cell-db\">\n\t\t\t\t\t\t\t<input class=\"uni-input\" type=\"text\" :disabled=\"true\" value=\"116.39747\" name=\"longitude\"/>\n\t\t\t\t\t\t</view>\n\t\t\t\t\t</view>\n\t\t\t\t\t<view class=\"uni-list-cell\">\n\t\t\t\t\t\t<view class=\"uni-list-cell-left\">\n\t\t\t\t\t\t\t<view class=\"uni-label\">纬度</view>\n\t\t\t\t\t\t</view>\n\t\t\t\t\t\t<view class=\"uni-list-cell-db\">\n\t\t\t\t\t\t\t<input class=\"uni-input\" type=\"text\" :disabled=\"true\" value=\"39.9085\" name=\"latitude\"/>\n\t\t\t\t\t\t</view>\n\t\t\t\t\t</view>\n\t\t\t\t\t<view class=\"uni-list-cell\">\n\t\t\t\t\t\t<view class=\"uni-list-cell-left\">\n\t\t\t\t\t\t\t<view class=\"uni-label\">位置名称</view>\n\t\t\t\t\t\t</view>\n\t\t\t\t\t\t<view class=\"uni-list-cell-db\">\n\t\t\t\t\t\t\t<input class=\"uni-input\" type=\"text\" :disabled=\"true\" value=\"天安门\" name=\"name\"/>\n\t\t\t\t\t\t</view>\n\t\t\t\t\t</view>\n\t\t\t\t\t<view class=\"uni-list-cell\">\n\t\t\t\t\t\t<view class=\"uni-list-cell-left\">\n\t\t\t\t\t\t\t<view class=\"uni-label\">详细位置</view>\n\t\t\t\t\t\t</view>\n\t\t\t\t\t\t<view class=\"uni-list-cell-db\">\n\t\t\t\t\t\t\t<input class=\"uni-input\" type=\"text\" :disabled=\"true\" value=\"北京市东城区东长安街\" name=\"address\"/>\n\t\t\t\t\t\t</view>\n\t\t\t\t\t</view>\n\t\t\t\t</view>\n\t\t\t\t<view class=\"uni-padding-wrap\">\n\t\t\t\t\t<view class=\"uni-btn-v uni-common-mt\">\n\t\t\t\t\t\t<button type=\"primary\" formType=\"submit\">查看位置</button>\n\t\t\t\t\t</view>\n\t\t\t\t</view>\n\t\t\t</form>\n\t\t</view>\n\t</view>\n</template>\n\n\n<style>\n\t.uni-list-cell-left {\n\t\tpadding: 0 30rpx;\n\t}\n</style>\n\n```\n>Script\n```uts\n\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\ttitle: 'openLocation'\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\topenLocation: function (e) {\n\t\t\t\tconsole.log(e)\n\t\t\t\tvar value = e.detail.value\n\t\t\t\tuni.openLocation({\n\t\t\t\t\tlongitude: Number(value.longitude),\n\t\t\t\t\tlatitude: Number(value.latitude),\n\t\t\t\t\tname: value.name,\n\t\t\t\t\taddress: value.address\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t}\n\n```\n:::"
  },
  "chooseLocation": {
    "name": "## uni.chooseLocation(options) @chooselocation",
    "description": "打开地图选择位置。",
    "compatibility": "### chooseLocation  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | x | x |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | [ChooseLocationOptions](#chooselocationoptions-values) | 是 | - | - | uni.chooseLocation |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| latitude | number | 否 | - | - | 目标地纬度 |\n@| longitude | number | 否 | - | - | 目标地经度 |\n@| keyword | string | 否 | - | - | 搜索关键字 |\n@| success | (res: [ChooseLocationSuccess](#chooselocationsuccess-values)) => void | 否 | - | - | uni.chooseLocation成功回调函数定义 |\n@| fail | (res: [IChooseLocationError](#ichooselocationerror-values)) => void | 否 | - | - | uni.chooseLocation失败回调函数定义 |\n@| complete | (res: any) => void | 否 | - | - | uni.chooseLocation完成回调函数定义 | \n\n##### ChooseLocationSuccess 的属性值 @chooselocationsuccess-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| name | string | 是 | - | - | 位置名称 |\n| address | string | 是 | - | - | 详细地址 |\n| latitude | number | 是 | - | - | 纬度,浮点数,范围为-90~90,负数表示南纬 |\n| longitude | number | 是 | - | - | 经度,范围为-180~180,负数表示西经 |\n\n##### IChooseLocationError 的属性值 @ichooselocationerror-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errCode | number | 是 | - | - | - |\n| errSubject | string | 是 | - | - | 统一错误主题(模块)名称 |\n| data | any \\| null | 否 | - | - | 错误信息中包含的数据 |\n| cause | [Error](https://uniapp.dcloud.net.cn/tutorial/err-spec.html#unierror) \\| null | 否 | - | - | 源错误信息,可以包含多个错误,详见SourceError |\n| errMsg | string | 是 | - | - | - |\n",
    "returnValue": "",
    "tutorial": "\n### 参见\n - [参见uni-app相关文档](http://localhost:8080/api/location/location.html)\n- [参见uni-app x相关文档](https://doc.dcloud.net.cn/uni-app-x/api/get-location.html)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=chooseLocation&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=chooseLocation&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=chooseLocation&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=chooseLocation&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=chooseLocation&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=chooseLocation)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=chooseLocation&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.location.chooseLocation)",
    "example": "### 示例 \n> [hello uni-app x](https://gitcode.net/dcloud/hello-uni-app-x/-/blob/dev/pages/API/choose-location/choose-location.uvue) \n ::: preview https://hellouniappx.dcloud.net.cn/web/#/pages/API/choose-location/choose-location\n>Template\n```vue\n<template>\n\t<view>\n\t\t<page-head :title=\"title\"></page-head>\n\t\t<view class=\"uni-padding-wrap\">\n\t\t\t<view style=\"background:#FFFFFF; padding:40rpx;\">\n\t\t\t\t<view class=\"uni-hello-text uni-center\">当前位置信息</view>\n\t\t\t\t<block v-if=\"hasLocation === false\">\n\t\t\t\t\t<view class=\"uni-h2 uni-center uni-common-mt\">未选择位置</view>\n\t\t\t\t</block>\n\t\t\t\t<block v-if=\"hasLocation === true\">\n\t\t\t\t\t<view class=\"uni-hello-text uni-center\" style=\"margin-top:10px;\">\n\t\t\t\t\t\t{{locationAddress}}\n\t\t\t\t\t</view>\n\t\t\t\t\t<view class=\"uni-h2 uni-center uni-common-mt\">\n\t\t\t\t\t\t<text>E: {{location.longitude[0]}}°{{location.longitude[1]}}′</text>\n\t\t\t\t\t\t<text>\\nN: {{location.latitude[0]}}°{{location.latitude[1]}}′</text>\n\t\t\t\t\t</view>\n\t\t\t\t</block>\n\t\t\t</view>\n\t\t\t<view class=\"uni-btn-v\">\n\t\t\t\t<button type=\"primary\" @tap=\"chooseLocation\">选择位置</button>\n\t\t\t\t<button @tap=\"clear\">清空</button>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n\n<style>\n\t.page-body-info {\n\t\tpadding-bottom: 0;\n\t\theight: 440rpx;\n\t}\n</style>\n\n```\n>Script\n```uts\n\n\tfunction formatLocation(longitude, latitude) {\n\t\tif (typeof longitude === 'string' && typeof latitude === 'string') {\n\t\t\tlongitude = parseFloat(longitude)\n\t\t\tlatitude = parseFloat(latitude)\n\t\t}\n\t\tlongitude = longitude.toFixed(2)\n\t\tlatitude = latitude.toFixed(2)\n\t\treturn {\n\t\t\tlongitude: longitude.toString().split('.'),\n\t\t\tlatitude: latitude.toString().split('.')\n\t\t}\n\t}\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\ttitle: 'chooseLocation',\n\t\t\t\thasLocation: false,\n\t\t\t\tlocation: {},\n\t\t\t\tlocationAddress: ''\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\tchooseLocation: function () {\n\t\t\t\tuni.chooseLocation({\n\t\t\t\t\tsuccess: (res) => {\n            console.log(res,123)\n\t\t\t\t\t\tthis.hasLocation = true,\n\t\t\t\t\t\tthis.location = formatLocation(res.longitude, res.latitude),\n\t\t\t\t\t\tthis.locationAddress = res.address\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t},\n\t\t\tclear: function () {\n\t\t\t\tthis.hasLocation = false\n\t\t\t}\n\t\t}\n\t}\n\n```\n:::"
  },
  "getStorageInfo": {
    "name": "## uni.getStorageInfo(options) @getstorageinfo",
    "description": "uni.getStorageInfo函数定义<br/>异步获取当前 storage 的相关信息。<br/>",
    "compatibility": "### getStorageInfo  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.9.0 | 4.11 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | [GetStorageInfoOptions](#getstorageinfooptions-values) | 是 | - | - |  |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| success | (res: [GetStorageInfoSuccess](#getstorageinfosuccess-values)) => void \\| null | 否 | - | - | uni.getStorageInfo成功回调函数定义 |\n@| fail | (res: [UniError](https://uniapp.dcloud.net.cn/tutorial/err-spec.html#unierror)) => void \\| null | 否 | - | - | uni.getStorageInfo失败回调函数定义 |\n@| complete | (res: any) => void \\| null | 否 | - | - | uni.getStorageInfo完成回调函数定义 | \n\n##### GetStorageInfoSuccess 的属性值 @getstorageinfosuccess-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| keys | Array\\<string\\> | 是 | - | - | 当前 storage 中所有的 key |\n| currentSize | number | 是 | - | - | 当前占用的空间大小, 单位:kb |\n| limitSize | number | 是 | - | - | 限制的空间大小, 单位:kb |\n",
    "returnValue": "",
    "tutorial": "\n### 参见\n\n- [参见uni-app相关文档](https://uniapp.dcloud.net.cn/api/storage/storage.html#getstorageinfo)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=getStorageInfo&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=getStorageInfo&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=getStorageInfo&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=getStorageInfo&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=getStorageInfo&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=getStorageInfo)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=getStorageInfo&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.storage.storage.getStorageInfo)"
  },
  "getStorageInfoSync": {
    "name": "## uni.getStorageInfoSync() @getstorageinfosync",
    "description": "uni.getStorageInfoSync函数定义<br/>同步获取当前 storage 的相关信息。<br/><br/>",
    "compatibility": "### getStorageInfoSync  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.9.0 | 4.11 |\n",
    "param": "",
    "returnValue": "### 返回值  兼容性 \n\n| 类型 |\n| :- |\n| **GetStorageInfoSuccess** |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| keys | Array\\<string\\> | 是 | - | - | 当前 storage 中所有的 key |\n@| currentSize | number | 是 | - | - | 当前占用的空间大小, 单位:kb |\n@| limitSize | number | 是 | - | - | 限制的空间大小, 单位:kb | \n",
    "tutorial": "\n### 参见\n\n- [参见uni-app相关文档](https://uniapp.dcloud.net.cn/api/storage/storage.html#getstorageinfosync)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=getStorageInfoSync&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=getStorageInfoSync&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=getStorageInfoSync&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=getStorageInfoSync&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=getStorageInfoSync&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=getStorageInfoSync)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=getStorageInfoSync&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.storage.storage.getStorageInfoSync)"
  },
  "getStorage": {
    "name": "## uni.getStorage(options) @getstorage",
    "description": "uni.getStorage函数定义<br/>从本地存储中异步获取指定 key 对应的内容。<br/>",
    "compatibility": "### getStorage  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.9.0 | 4.11 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | [GetStorageOptions](#getstorageoptions-values) | 是 | - | - |  |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| key | string | 是 | - | - | 本地存储中的指定的 key |\n@| success | (res: [GetStorageSuccess](#getstoragesuccess-values)) => void \\| null | 否 | - | - | uni.getStorage成功回调函数定义 |\n@| fail | (res: [UniError](https://uniapp.dcloud.net.cn/tutorial/err-spec.html#unierror)) => void \\| null | 否 | - | - | uni.getStorage失败回调函数定义 |\n@| complete | (res: any) => void \\| null | 否 | - | - | uni.getStorage完成回调函数定义 | \n\n##### GetStorageSuccess 的属性值 @getstoragesuccess-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| data | any \\| null | 否 | - | - | key 对应的内容 |\n",
    "returnValue": "",
    "tutorial": "\n### 参见\n\n- [参见uni-app相关文档](https://uniapp.dcloud.net.cn/api/storage/storage.html#getstorage)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=getStorage&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=getStorage&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=getStorage&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=getStorage&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=getStorage&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=getStorage)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=getStorage&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.storage.storage.getStorage)"
  },
  "getStorageSync": {
    "name": "## uni.getStorageSync(key) @getstoragesync",
    "description": "uni.getStorageSync函数定义<br/>从本地存储中同步获取指定 key 对应的内容。<br/>",
    "compatibility": "### getStorageSync  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.9.0 | 4.11 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| key | string | 是 | - | - | 本地存储中的指定的 key | \n",
    "returnValue": "### 返回值  兼容性 \n\n| 类型 | 必备 |\n| :- | :- |\n| any \\| null | 否 |\n \n",
    "tutorial": "\n### 参见\n\n- [参见uni-app相关文档](https://uniapp.dcloud.net.cn/api/storage/storage.html#getstoragesync)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=getStorageSync&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=getStorageSync&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=getStorageSync&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=getStorageSync&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=getStorageSync&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=getStorageSync)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=getStorageSync&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.storage.storage.getStorageSync)"
  },
  "setStorage": {
    "name": "## uni.setStorage(options) @setstorage",
    "description": "uni.setStorage函数定义<br/>将数据存储在本地storage存储中指定的 key 中,会覆盖掉原来该 key 对应的内容,这是一个异步接口。  <br/>",
    "compatibility": "### setStorage  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.9.0 | 4.11 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | **SetStorageOptions** | 是 | - | - |  |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| key | string | 是 | - | - | 本地存储中的指定的 key |\n@| data | any | 是 | - | - | 需要存储的内容,只支持能通过 JSON.stringify 序列化的对象 |\n@| success | (res: SetStorageSuccess) => void \\| null | 否 | - | - | uni.setStorage成功回调函数定义 |\n@| fail | (res: [UniError](https://uniapp.dcloud.net.cn/tutorial/err-spec.html#unierror)) => void \\| null | 否 | - | - | uni.setStorage失败回调函数定义 |\n@| complete | (res: any) => void \\| null | 否 | - | - | uni.setStorage完成回调函数定义 | \n",
    "returnValue": "",
    "tutorial": "\n### 参见\n\n- [参见uni-app相关文档](https://uniapp.dcloud.net.cn/api/storage/storage.html#setstorage)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=setStorage&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=setStorage&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=setStorage&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=setStorage&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=setStorage&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=setStorage)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=setStorage&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.storage.storage.setStorage)"
  },
  "setStorageSync": {
    "name": "## uni.setStorageSync(key, data) @setstoragesync",
    "description": "uni.setStorageSync函数定义<br/>将 data 存储在本地storage存储中指定的 key 中,会覆盖掉原来该 key 对应的内容,这是一个同步接口。<br/>",
    "compatibility": "### setStorageSync  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.9.0 | 4.11 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| key | string | 是 | - | - | 本地storage存储中的指定的 key |\n| data | any | 是 | - | - | 需要存储的内容,只支持能通过 JSON.stringify 序列化的对象 | \n",
    "returnValue": "",
    "tutorial": "\n### 参见\n\n- [参见uni-app相关文档](https://uniapp.dcloud.net.cn/api/storage/storage.html#setstoragesync)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=setStorageSync&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=setStorageSync&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=setStorageSync&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=setStorageSync&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=setStorageSync&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=setStorageSync)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=setStorageSync&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.storage.storage.setStorageSync)"
  },
  "removeStorage": {
    "name": "## uni.removeStorage(options) @removestorage",
    "description": "uni.removeStorage函数定义<br/>从本地存储中异步移除指定 key。<br/>",
    "compatibility": "### removeStorage  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.9.0 | 4.11 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | **RemoveStorageOptions** | 是 | - | - |  |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| key | string | 是 | - | - | 本地存储中的指定的 key |\n@| success | (res: RemoveStorageSuccess) => void \\| null | 否 | - | - | uni.removeStorage成功回调函数定义 |\n@| fail | (res: [UniError](https://uniapp.dcloud.net.cn/tutorial/err-spec.html#unierror)) => void \\| null | 否 | - | - | uni.removeStorage失败回调函数定义 |\n@| complete | (res: any) => void \\| null | 否 | - | - | uni.removeStorage完成回调函数定义 | \n",
    "returnValue": "",
    "tutorial": "\n### 参见\n\n- [参见uni-app相关文档](hhttps://uniapp.dcloud.net.cn/api/storage/storage.html#removestorage)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=removeStorage&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=removeStorage&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=removeStorage&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=removeStorage&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=removeStorage&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=removeStorage)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=removeStorage&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.storage.storage.removeStorage)"
  },
  "removeStorageSync": {
    "name": "## uni.removeStorageSync(key) @removestoragesync",
    "description": "uni.removeStorageSync函数定义<br/>从本地存储中同步移除指定 key。<br/>",
    "compatibility": "### removeStorageSync  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.9.0 | 4.11 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| key | string | 是 | - | - | 本地存储中的指定的 key | \n",
    "returnValue": "",
    "tutorial": "\n### 参见\n\n- [参见uni-app相关文档](https://uniapp.dcloud.net.cn/api/storage/storage.html#removestoragesync)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=removeStorageSync&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=removeStorageSync&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=removeStorageSync&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=removeStorageSync&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=removeStorageSync&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=removeStorageSync)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=removeStorageSync&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.storage.storage.removeStorageSync)"
  },
  "clearStorage": {
    "name": "## uni.clearStorage(option?) @clearstorage",
    "description": "uni.clearStorage函数定义<br/>清除本地数据存储。<br/>",
    "compatibility": "### clearStorage  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.9.0 | 4.11 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| option | **ClearStorageOptions** \\| null | 否 | - | - | uni.removeStorage参数定义 |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| success | (res: ClearStorageSuccess) => void \\| null | 否 | - | - | uni.clearStorage 成功回调函数定义 |\n@| fail | (res: [UniError](https://uniapp.dcloud.net.cn/tutorial/err-spec.html#unierror)) => void \\| null | 否 | - | - | uni.clearStorage 失败回调函数定义 |\n@| complete | (res: any) => void \\| null | 否 | - | - | uni.clearStorage 完成回调函数定义 | \n",
    "returnValue": "",
    "tutorial": "\n### 参见\n\n- [参见uni-app相关文档](https://uniapp.dcloud.net.cn/api/storage/storage.html#clearstorage)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=clearStorage&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=clearStorage&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=clearStorage&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=clearStorage&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=clearStorage&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=clearStorage)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=clearStorage&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.storage.storage.clearStorage)"
  },
  "clearStorageSync": {
    "name": "## uni.clearStorageSync() @clearstoragesync",
    "description": "uni.clearStorageSync函数定义<br/>清除本地数据存储。<br/>",
    "compatibility": "### clearStorageSync  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.9.0 | 4.11 |\n",
    "param": "",
    "returnValue": "",
    "tutorial": "\n### 参见\n\n- [参见uni-app相关文档](https://uniapp.dcloud.net.cn/api/storage/storage.html#clearstoragesync)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=clearStorageSync&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=clearStorageSync&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=clearStorageSync&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=clearStorageSync&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=clearStorageSync&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=clearStorageSync)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=clearStorageSync&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.storage.storage.clearStorageSync)"
  },
  "storage": {
    "example": "## 示例 \n> [hello uni-app x](https://gitcode.net/dcloud/hello-uni-app-x/-/blob/dev/pages/API/storage/storage.uvue) \n ::: preview https://hellouniappx.dcloud.net.cn/web/#/pages/API/storage/storage\n>Template\n```vue\n<template>\n  <!-- #ifdef APP -->\n  <scroll-view class=\"page-scroll-view\">\n  <!-- #endif -->\n    <view>\n      <page-head :title=\"title\"></page-head>\n      <view class=\"uni-common-mt\">\n        <view class=\"uni-list\">\n          <view class=\"uni-list-cell uni-list-cell-line\">\n            <view class=\"uni-list-cell-left\">\n              <view class=\"uni-label\">key</view>\n            </view>\n            <view class=\"uni-list-cell-db\">\n              <input class=\"uni-input\" type=\"text\" placeholder=\"请输入key\" name=\"key\" :value=\"key\" maxlength=\"-1\" @input=\"keyChange\" />\n            </view>\n          </view>\n          <view class=\"uni-list-cell\">\n            <view class=\"uni-list-cell-left\">\n              <view class=\"uni-label\">value</view>\n            </view>\n            <view class=\"uni-list-cell-db\">\n              <input class=\"uni-input\" type=\"text\" placeholder=\"请输入value\" name=\"data\"\n                :value=\"typeof data === 'string' ? data : JSON.stringify(data)\" maxlength=\"-1\" @input=\"dataChange\" />\n            </view>\n          </view>\n        </view>\n        <view class=\"uni-padding-wrap\">\n          <view class=\"uni-btn-v\">\n            <button class=\"uni-btn btn-getStorageInfoASync\" type=\"primary\" @tap=\"getStorageInfo\">\n              获取存储概述信息-异步\n            </button>\n            <button class=\"uni-btn btn-getStorageInfoSync\" @tap=\"getStorageInfoSync\">\n              获取存储概述信息-同步\n            </button>\n          </view>\n          <text>{{ storageInfo }}</text>\n          <view class=\"uni-flex uni-row\">\n            <button type=\"default\" style=\"width:50%\" @tap=\"strMock\">\n              填充字符串\n            </button>\n            <button type=\"default\" style=\"width:50%\" @tap=\"complexMock\">\n              填充复杂对象\n            </button>\n          </view>\n          <view class=\"uni-flex uni-row\">\n            <button type=\"default\" style=\"width:50%\" @tap=\"numberMock\">\n              填充整型\n            </button>\n            <button type=\"default\" style=\"width:50%\" @tap=\"floatMock\">\n              填充浮点型\n            </button>\n          </view>\n          <view class=\"uni-flex uni-row\">\n            <button type=\"default\" style=\"width:50%\" @tap=\"jsonLikeMock\">\n              填充json字符串\n            </button>\n            <button type=\"default\" style=\"width:50%\" @tap=\"longLikeMock\">\n              填充整数字符串\n            </button>\n          </view>\n          <view class=\"uni-flex uni-row\">\n            <button type=\"default\" style=\"width:50%\" @tap=\"floatLikeMock\">\n              填充浮点字符串\n            </button>\n            <button type=\"default\" style=\"width:50%\" @tap=\"negativeLikeMock\">\n              填充负数字符串\n            </button>\n          </view>\n        </view>\n        <view class=\"uni-padding-wrap\">\n          <view class=\"uni-btn-v\">\n            <button type=\"primary\" class=\"uni-btn btn-setstorageAsync\" @tap=\"setStorage\">\n              存储数据-异步\n            </button>\n            <button class=\"uni-btn btn-getstorageAsync\" @tap=\"getStorage\">读取数据-异步</button>\n            <button class=\"uni-btn btn-removeStorageInfoASync\" @tap=\"removeStorage\">移除数据-异步</button>\n            <button class=\"uni-btn btn-clearStorageInfoASync\" @tap=\"clearStorage\">清理数据-异步</button>\n          </view>\n\n          <view class=\"uni-btn-v\">\n            <button type=\"primary\" class=\"uni-btn btn-setstorageSync\" @tap=\"setStorageSync\">\n              存储数据-同步\n            </button>\n            <button class=\"uni-btn btn-getstorageSync\" @tap=\"getStorageSync\">读取数据-同步</button>\n            <button class=\"uni-btn btn-removeStorageInfoSync\" @tap=\"removeStorageSync\">\n              移除数据-同步\n            </button>\n            <button class=\"uni-btn btn-clearStorageInfoSync\" @tap=\"clearStorageSync\">\n              清理数据-同步\n            </button>\n          </view>\n        </view>\n      </view>\n    </view>\n  <!-- #ifdef APP -->\n  </scroll-view>\n  <!-- #endif -->\n</template>\n\n\n\n<style>\n</style>\n\n```\n>Script\n```uts\n\n  export default {\n    data() {\n      return {\n        title: 'get/set/clearStorage',\n        key: '',\n        data: '' as any,\n        apiGetData: '' as any | null,\n        storageInfo: '',\n      }\n    },\n    methods: {\n      getStorageInfo() {\n        uni.getStorageInfo({\n          success: (res) => {\n            this.apiGetData = res\n            this.storageInfo = JSON.stringify(res)\n          },\n        })\n      },\n      getStorageInfoSync() {\n        try {\n          const res = uni.getStorageInfoSync()\n          this.apiGetData = res\n          this.storageInfo = JSON.stringify(res)\n        } catch (e) {\n          // error\n          console.log(e)\n        }\n      },\n      jsonLikeMock() {\n        this.key = 'key_' + Math.random()\n        this.data = JSON.stringify({\n          name: \"james\",\n          age: 12,\n          from: \"american\"\n        });\n\n      },\n      longLikeMock() {\n        this.key = 'key_' + Math.random()\n        this.data = \"1234567890\"\n      },\n      floatLikeMock() {\n        this.key = 'key_' + Math.random()\n        this.data = \"321456.1234567890\"\n      },\n      negativeLikeMock() {\n        this.key = 'key_' + Math.random()\n        this.data = \"-321456\"\n      },\n      strMock() {\n        this.key = 'key_' + Math.random()\n        this.data = '测试字符串数据,长度为16个字符'\n      },\n      complexMock() {\n        this.key = 'key_' + Math.random()\n        let jsonObj = {\n          name: '张三',\n          age: 12,\n          classMate: [\n            {\n              id: 1001,\n              name: '李四',\n            },\n            {\n              id: 1002,\n              name: 'jack ma',\n            },\n          ],\n        }\n        this.data = jsonObj\n      },\n      numberMock() {\n        this.key = 'key_' + Math.random()\n        this.data = 10011\n      },\n      floatMock() {\n        this.key = 'key_' + Math.random()\n        this.data = 3.1415926535893384626\n      },\n\n      keyChange: function (e : InputEvent) {\n        this.key = e.detail.value\n      },\n      dataChange: function (e : InputEvent) {\n        this.data = e.detail.value\n      },\n      getStorage: function () {\n        var key = this.key\n        if (key.length == 0) {\n          uni.showModal({\n            title: '读取数据失败',\n            content: 'key 不能为空',\n            showCancel: false,\n          })\n        } else {\n          let that = this\n          uni.getStorage({\n            key: key,\n            success: (res) => {\n\n              that.apiGetData = res.data\n              let desc : string = typeof this.apiGetData\n              if (\"object\" == desc) {\n                desc = desc + \": \" + JSON.stringify(this.apiGetData)\n              } else {\n                desc = desc + \": \" + this.apiGetData\n              }\n\n              uni.showModal({\n                title: '读取数据成功',\n                content: desc,\n                showCancel: false,\n              })\n            },\n            fail: () => {\n              uni.showModal({\n                title: '读取数据失败',\n                content: '找不到 key 对应的数据',\n                showCancel: false,\n              })\n            },\n          })\n        }\n      },\n      getStorageSync: function () {\n        var key = this.key\n        if (key.length == 0) {\n          uni.showModal({\n            title: '读取数据失败',\n            content: 'key 不能为空',\n            showCancel: false,\n          })\n        } else {\n          this.apiGetData = uni.getStorageSync(key)\n\n          let desc : string = typeof this.apiGetData\n          if (\"object\" == desc) {\n            desc = desc + \": \" + JSON.stringify(this.apiGetData)\n          } else {\n            desc = desc + \": \" + this.apiGetData\n          }\n\n          uni.showModal({\n            title: '读取数据成功',\n            content: desc,\n            showCancel: false,\n          })\n        }\n      },\n      setStorage: function () {\n        var key = this.key\n        var data = this.data\n        if (key.length == 0) {\n          uni.showModal({\n            title: '保存数据失败',\n            content: 'key 不能为空',\n            showCancel: false,\n          })\n        } else {\n          uni.setStorage({\n            key: key,\n            data: data,\n            success: () => {\n              uni.showModal({\n                title: '存储数据成功',\n                showCancel: false,\n              })\n            },\n            fail: () => {\n              uni.showModal({\n                title: '储存数据失败!',\n                showCancel: false,\n              })\n            },\n          })\n        }\n      },\n      setStorageSync: function () {\n        var key = this.key\n        var data = this.data\n        if (key.length == 0) {\n          uni.showModal({\n            title: '保存数据失败',\n            content: 'key 不能为空',\n            showCancel: false,\n          })\n        } else {\n          uni.setStorageSync(key, data)\n          uni.showModal({\n            title: '存储数据成功',\n            showCancel: false,\n          })\n        }\n      },\n      removeStorage: function () {\n        uni.removeStorage({\n          key: this.key,\n          success: () => {\n            uni.showModal({\n              title: '移除数据成功',\n              showCancel: false,\n            })\n          },\n          fail: () => {\n            uni.showModal({\n              title: '移除数据失败',\n              showCancel: false,\n            })\n          },\n        })\n      },\n      removeStorageSync: function () {\n        uni.removeStorageSync(this.key)\n        uni.showModal({\n          title: '移除数据成功',\n          showCancel: false,\n        })\n      },\n      clearStorage: function () {\n        this.key = ''\n        this.data = ''\n        uni.clearStorage({\n          success: function (_) {\n            uni.showModal({\n              title: '清除数据成功',\n              showCancel: false,\n            })\n          },\n          fail: function (_) {\n            uni.showModal({\n              title: '清除数据失败',\n              showCancel: false,\n            })\n          },\n        })\n      },\n      clearStorageSync: function () {\n        this.key = ''\n        this.data = ''\n        uni.clearStorageSync()\n        uni.showModal({\n          title: '清除数据成功',\n          content: ' ',\n          showCancel: false,\n        })\n      },\n    },\n  }\n\n```\n:::"
  },
  "getFileSystemManager": {
    "name": "## uni.getFileSystemManager() @getfilesystemmanager",
    "description": "获取文件管理器",
    "compatibility": "### getFileSystemManager  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| x | 3.9.0 | 4.11 |\n",
    "param": "",
    "returnValue": "### 返回值  兼容性 \n\n| 类型 |\n| :- |\n| [FileSystemManager](#filesystemmanager-values) |\n\n#### FileSystemManager 的方法 @filesystemmanager-values \n\n#### readFile(options) @readfile\n读取本地文件内容\n##### readFile  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| x | 3.9.0 | 4.11 |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | [ReadFileOptions](#readfileoptions-values) | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| encoding | \"base64\" \\| \"utf-8\" | 是 | - | - | base64 / utf-8 |\n@| filePath | [string.URIString](/uts/data-type.md#ide-string) | 是 | - | - | 文件路径,支持相对地址和绝对地址,app-android平台支持代码包文件目录 |\n@| success | (res: [ReadFileSuccessResult](#readfilesuccessresult-values)) => void \\| null | 否 | - | - | 接口调用的回调函数 |\n@| fail | (res: [IFileSystemManagerFail](#ifilesystemmanagerfail-values)) => void \\| null | 否 | - | - | 通用的错误返回结果回调 |\n@| complete | (res: any) => void \\| null | 否 | - | - | 通用的结束返回结果回调 | \n\n###### ReadFileSuccessResult 的属性值 @readfilesuccessresult-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| data | string | 是 | - | - | - |\n\n###### IFileSystemManagerFail 的属性值 @ifilesystemmanagerfail-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errCode | 1200002 \\| 1300002 \\| 1300013 \\| 1300021 \\| 1300022 \\| 1300066 \\| 1301003 \\| 1301005 \\| 1300201 \\| 1300202 \\| 1301111 \\| 1302003 \\| 1300009 | 是 | - | - | 错误码<br/>- 1200002  类型错误。仅支持 base64 / utf-8<br/>- 1300002  未找到文件<br/>- 1300013  无权限<br/>- 1300021  是目录<br/>- 1300022  参数无效<br/>- 1300066  目录非空<br/>- 1301003  对目录的非法操作<br/>- 1301005  文件已存在<br/>- 1300201  系统错误<br/>- 1300202  超出文件存储限制的最大尺寸<br/>- 1301111  brotli解压失败<br/>- 1302003  标志无效<br/>- 1300009  文件描述符错误 |\n| errSubject | string | 是 | - | - | 统一错误主题(模块)名称 |\n| data | any \\| null | 否 | - | - | 错误信息中包含的数据 |\n| cause | [Error](https://uniapp.dcloud.net.cn/tutorial/err-spec.html#unierror) \\| null | 否 | - | - | 源错误信息,可以包含多个错误,详见SourceError |\n| errMsg | string | 是 | - | - | - |\n\n\n#### readFileSync(filePath, encoding?) @readfilesync\nFileSystemManager.readFile 的同步版本参数\n##### readFileSync  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| x | 4.13 | x |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| filePath | string | 是 | - | - | 文件路径,支持相对地址和绝对地址,app-android平台支持代码包文件目录 |\n| encoding | string \\| null | 否 | - | - | base64 / utf-8 | \n\n##### 返回值  兼容性 \n\n| 类型 |\n| :- |\n| string |\n \n\n#### writeFile(options) @writefile\n写文件\n##### writeFile  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| x | 3.9.0 | 4.11 |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | [WriteFileOptions](#writefileoptions-values) | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| filePath | [string.URIString](/uts/data-type.md#ide-string) | 是 | - | - | 文件路径,只支持绝对地址 |\n@| encoding | \"ascii\" \\| \"base64\" \\| \"utf-8\" | 是 | - | - | 指定写入文件的字符编码<br/>支持:ascii base64 utf-8 |\n@| data | string | 是 | - | - | 写入的文本内容 |\n@| success | (res: [FileManagerSuccessResult](#filemanagersuccessresult-values)) => void \\| null | 否 | - | - | 通用的正确返回结果回调 |\n@| fail | (res: [IFileSystemManagerFail](#ifilesystemmanagerfail-values)) => void \\| null | 否 | - | - | 接口调用失败的回调函数 |\n@| complete | (res: any) => void \\| null | 否 | - | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n###### FileManagerSuccessResult 的属性值 @filemanagersuccessresult-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errMsg | string | 是 | - | - | - |\n\n\n#### writeFileSync(filePath, data, encoding) @writefilesync\nFileSystemManager.writeFile 的同步版本\n##### writeFileSync  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| x | 4.13 | x |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| filePath | string | 是 | - | - | 文件路径,只支持绝对地址 |\n| data | string | 是 | - | - | 写入的文本内容 |\n| encoding | string | 是 | - | - | 指定写入文件的字符编码,支持:ascii base64 utf-8 | \n\n\n#### unlink(options) @unlink\n删除文件\n##### unlink  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| x | 3.9.0 | 4.11 |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | **UnLinkOptions** | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| filePath | [string.URIString](/uts/data-type.md#ide-string) | 是 | - | - | 文件路径,只支持绝对地址 |\n@| success | (res: [FileManagerSuccessResult](#filemanagersuccessresult-values)) => void \\| null | 否 | - | - | 接口调用的回调函数 |\n@| fail | (res: [IFileSystemManagerFail](#ifilesystemmanagerfail-values)) => void \\| null | 否 | - | - | 接口调用失败的回调函数 |\n@| complete | (res: any) => void \\| null | 否 | - | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n\n#### unlinkSync(filePath) @unlinksync\nFileSystemManager.unlink 的同步版本\n##### unlinkSync  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| x | 4.13 | x |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| filePath | string | 是 | - | - | 文件路径,只支持绝对地址 | \n\n\n#### mkdir(options) @mkdir\n创建目录\n##### mkdir  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| x | 3.9.0 | 4.11 |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | **MkDirOptions** | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| dirPath | [string.URIString](/uts/data-type.md#ide-string) | 是 | - | - | 创建的目录路径 (本地路径) |\n@| recursive | boolean | 是 | - | - | 是否在递归创建该目录的上级目录后再创建该目录。如果对应的上级目录已经存在,则不创建该上级目录。如 dirPath 为 a/b/c/d 且 recursive 为 true,将创建 a 目录,再在 a 目录下创建 b 目录,以此类推直至创建 a/b/c 目录下的 d 目录。 |\n@| success | (res: [FileManagerSuccessResult](#filemanagersuccessresult-values)) => void \\| null | 否 | - | - | 接口调用的回调函数 |\n@| fail | (res: [IFileSystemManagerFail](#ifilesystemmanagerfail-values)) => void \\| null | 否 | - | - | 接口调用失败的回调函数 |\n@| complete | (res: any) => void \\| null | 否 | - | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n\n#### mkdirSync(dirPath, recursive) @mkdirsync\nFileSystemManager.mkdir 的同步版本\n##### mkdirSync  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| x | 4.13 | x |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| dirPath | string | 是 | - | - | 创建的目录路径 (本地路径) |\n| recursive | boolean | 是 | - | - | 是否在递归创建该目录的上级目录后再创建该目录。如果对应的上级目录已经存在,则不创建该上级目录。如 dirPath 为 a/b/c/d 且 recursive 为 true,将创建 a 目录,再在 a 目录下创建 b 目录,以此类推直至创建 a/b/c 目录下的 d 目录。 | \n\n\n#### rmdir(options) @rmdir\n删除目录\n##### rmdir  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| x | 3.9.0 | 4.11 |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | **RmDirOptions** | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| dirPath | [string.URIString](/uts/data-type.md#ide-string) | 是 | - | - | 要删除的目录路径 (本地路径) |\n@| recursive | boolean | 是 | - | - | 是否递归删除目录。如果为 true,则删除该目录和该目录下的所有子目录以及文件。 |\n@| success | (res: [FileManagerSuccessResult](#filemanagersuccessresult-values)) => void \\| null | 否 | - | - | 接口调用的回调函数 |\n@| fail | (res: [IFileSystemManagerFail](#ifilesystemmanagerfail-values)) => void \\| null | 否 | - | - | 接口调用失败的回调函数 |\n@| complete | (res: any) => void \\| null | 否 | - | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n\n#### rmdirSync(dirPath, recursive) @rmdirsync\nFileSystemManager.rmdir 的同步版本\n##### rmdirSync  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| x | 4.13 | x |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| dirPath | string | 是 | - | - | 要删除的目录路径 (本地路径) |\n| recursive | boolean | 是 | - | - | 是否递归删除目录。如果为 true,则删除该目录和该目录下的所有子目录以及文件。 | \n\n\n#### readdir(options) @readdir\n读取目录内文件列表\n##### readdir  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| x | 3.9.0 | 4.11 |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | [ReadDirOptions](#readdiroptions-values) | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| dirPath | [string.URIString](/uts/data-type.md#ide-string) | 是 | - | - | 要读取的目录路径 (本地路径) |\n@| success | (res: [ReadDirSuccessResult](#readdirsuccessresult-values)) => void \\| null | 否 | - | - | 接口调用的回调函数 |\n@| fail | (res: [IFileSystemManagerFail](#ifilesystemmanagerfail-values)) => void \\| null | 否 | - | - | 接口调用失败的回调函数 |\n@| complete | (res: any) => void \\| null | 否 | - | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n###### ReadDirSuccessResult 的属性值 @readdirsuccessresult-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| files | Array\\<string\\> | 是 | - | - | - |\n\n\n#### readdirSync(dirPath) @readdirsync\nFileSystemManager.readdir 的同步版本\n##### readdirSync  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| x | 4.13 | x |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| dirPath | string | 是 | - | - | 要读取的目录路径 (本地路径) | \n\n##### 返回值  兼容性 \n\n| 类型 | 必备 |\n| :- | :- |\n| Array\\<string\\> \\| null | 否 |\n \n\n#### access(options) @access\n判断文件/目录是否存在\n##### access  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| x | 3.9.0 | 4.11 |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | **AccessOptions** | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| path | [string.URIString](/uts/data-type.md#ide-string) | 是 | - | - | 要判断是否存在的文件/目录路径 (本地路径) |\n@| success | (res: [FileManagerSuccessResult](#filemanagersuccessresult-values)) => void \\| null | 否 | - | - | 接口调用的回调函数 |\n@| fail | (res: [IFileSystemManagerFail](#ifilesystemmanagerfail-values)) => void \\| null | 否 | - | - | 接口调用失败的回调函数 |\n@| complete | (res: any) => void \\| null | 否 | - | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n\n#### accessSync(path) @accesssync\nFileSystemManager.access 的同步版本\n##### accessSync  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| x | 4.13 | x |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| path | string | 是 | - | - | 要判断是否存在的文件/目录路径 (本地路径) | \n\n\n#### rename(options) @rename\n重命名文件。可以把文件从 oldPath 移动到 newPath\n##### rename  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| x | 3.9.0 | 4.11 |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | **RenameOptions** | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| oldPath | [string.URIString](/uts/data-type.md#ide-string) | 是 | - | - | 源文件路径,支持本地路径 |\n@| newPath | [string.URIString](/uts/data-type.md#ide-string) | 是 | - | - | 新文件路径,支持本地路径 |\n@| success | (res: [FileManagerSuccessResult](#filemanagersuccessresult-values)) => void \\| null | 否 | - | - | 接口调用的回调函数 |\n@| fail | (res: [IFileSystemManagerFail](#ifilesystemmanagerfail-values)) => void \\| null | 否 | - | - | 接口调用失败的回调函数 |\n@| complete | (res: any) => void \\| null | 否 | - | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n\n#### renameSync(oldPath, newPath) @renamesync\nFileSystemManager.rename 的同步版本\n##### renameSync  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| x | 4.13 | x |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| oldPath | string | 是 | - | - | 源文件路径,支持本地路径 |\n| newPath | string | 是 | - | - | 新文件路径,支持本地路径 | \n\n\n#### copyFile(options) @copyfile\n复制文件\n##### copyFile  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| x | 3.9.0 | 4.11 |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | **CopyFileOptions** | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| srcPath | [string.URIString](/uts/data-type.md#ide-string) | 是 | - | - | 源文件路径,支持本地路径 |\n@| destPath | [string.URIString](/uts/data-type.md#ide-string) | 是 | - | - | 新文件路径,支持本地路径 |\n@| success | (res: [FileManagerSuccessResult](#filemanagersuccessresult-values)) => void \\| null | 否 | - | - | 接口调用的回调函数 |\n@| fail | (res: [IFileSystemManagerFail](#ifilesystemmanagerfail-values)) => void \\| null | 否 | - | - | 接口调用失败的回调函数 |\n@| complete | (res: any) => void \\| null | 否 | - | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n\n#### copyFileSync(srcPath, destPath) @copyfilesync\nFileSystemManager.copyFile 的同步版本\n##### copyFileSync  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| x | 4.13 | x |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| srcPath | string | 是 | - | - | 源文件路径,支持本地路径 |\n| destPath | string | 是 | - | - | 新文件路径,支持本地路径 | \n\n\n#### getFileInfo(options) @getfileinfo\n获取该本地临时文件 或 本地缓存文件 信息\n##### getFileInfo  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| x | 3.9.0 | 4.11 |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | [GetFileInfoOptions](#getfileinfooptions-values) | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| filePath | [string.URIString](/uts/data-type.md#ide-string) | 是 | - | - | 要读取的文件路径 (本地路径) |\n@| digestAlgorithm | \"md5\" \\| \"sha1\" | 是 | - | - | md5 / sha1 |\n@| success | (res: [GetFileInfoSuccessResult](#getfileinfosuccessresult-values)) => void \\| null | 否 | - | - | 接口调用的回调函数 |\n@| fail | (res: [IFileSystemManagerFail](#ifilesystemmanagerfail-values)) => void \\| null | 否 | - | - | 接口调用失败的回调函数 |\n@| complete | (res: any) => void \\| null | 否 | - | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n###### GetFileInfoSuccessResult 的属性值 @getfileinfosuccessresult-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| digest | string | 是 | - | - | - |\n| size | number | 是 | - | - | - |\n| errMsg | string | 是 | - | - | - |\n\n\n#### stat(options) @stat\n获取文件 Stats 对象\n##### stat  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| x | 3.9.0 | 4.11 |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | [StatOptions](#statoptions-values) | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| path | [string.URIString](/uts/data-type.md#ide-string) | 是 | - | - | 文件/目录路径 (本地路径) |\n@| recursive | boolean | 是 | - | - | 是否递归获取目录下的每个文件的 Stats 信息 |\n@| success | (res: [StatSuccessResult](#statsuccessresult-values)) => void \\| null | 否 | - | - | 接口调用的回调函数 |\n@| fail | (res: [IFileSystemManagerFail](#ifilesystemmanagerfail-values)) => void \\| null | 否 | - | - | 接口调用失败的回调函数 |\n@| complete | (res: any) => void \\| null | 否 | - | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n###### StatSuccessResult 的属性值 @statsuccessresult-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errMsg | string | 是 | - | - | - |\n| stats | Array\\<[FileStats](#filestats-values)\\> | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| path | string | 是 | - | - | - |\n@| stats | [Stats](#stats-values) | 是 | - | - | - |\n@@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@@| :- | :- | :- | :- |  :-: | :- |\n@@| mode | number | 是 | - | - | 文件的类型和存取的权限,对应 POSIX stat.st_mode<br/>注意android中,文件类型只包含是否是目录与文件,<br/>另外在android中这里的权限指的是当前进程对文件或者文件夹是否有读,写,执行的权限,<br/>这里没有与 POSIX stat.st_mode对应的组,其他人等相关权限的数据返回,只有所有者的相关权限 |\n@@| size | number | 是 | - | - | 文件大小,单位:B,对应 POSIX stat.st_size |\n@@| lastAccessedTime | number | 是 | - | - | 文件最近一次被存取或被执行的时间,UNIX 时间戳,对应 POSIX stat.st_atime<br/>注意:android中由于系统限制无法获取该数据 |\n@@| lastModifiedTime | number | 是 | - | - | 文件最后一次被修改的时间,UNIX 时间戳,对应 POSIX stat.st_mtime |\n\n###### Stats 的方法 @stats-values \n\n###### isDirectory() @isdirectory\n判断当前文件是否一个目录\n###### isDirectory  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n\n###### 返回值  兼容性 \n\n| 类型 |\n| :- |\n| boolean |\n \n\n###### isFile() @isfile\n判断当前文件是否一个普通文件\n###### isFile  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n\n###### 返回值  兼容性 \n\n| 类型 |\n| :- |\n| boolean |\n \n\n\n#### statSync(path, recursive) @statsync\nFileSystemManager.stat 的同步版本\n##### statSync  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| x | 4.13 | x |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| path | string | 是 | - | - | 文件/目录路径 (本地路径) |\n| recursive | boolean | 是 | - | - | 是否递归获取目录下的每个文件的 Stats 信息 | \n\n##### 返回值  兼容性 \n\n| 类型 |\n| :- |\n| Array\\<[FileStats](#filestats-values)\\> |\n \n\n#### appendFile(options) @appendfile\n在文件结尾追加内容\n##### appendFile  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| x | 4.13 | x |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | **AppendFileOptions** | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| filePath | [string.URIString](/uts/data-type.md#ide-string) | 是 | - | - | 要追加内容的文件路径 (本地路径) |\n@| encoding | \"ascii\" \\| \"base64\" \\| \"utf-8\" | 是 | - | - | 指定写入文件的字符编码<br/>支持:ascii base64 utf-8 |\n@| data | string | 是 | - | - | 要追加的文本 |\n@| success | (res: [FileManagerSuccessResult](#filemanagersuccessresult-values)) => void \\| null | 否 | - | - | 接口调用的回调函数 |\n@| fail | (res: [IFileSystemManagerFail](#ifilesystemmanagerfail-values)) => void \\| null | 否 | - | - | 接口调用失败的回调函数 |\n@| complete | (res: any) => void \\| null | 否 | - | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n\n#### appendFileSync(filePath, data, encoding) @appendfilesync\nFileSystemManager.appendFile 的同步版本\n##### appendFileSync  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| x | 4.13 | x |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| filePath | string | 是 | - | - | 要追加内容的文件路径 (本地路径) |\n| data | string | 是 | - | - | 要追加的文本 |\n| encoding | string | 是 | - | - | 指定写入文件的字符编码支持:ascii base64 utf-8 | \n\n\n#### saveFile(options) @savefile\n保存临时文件到本地。此接口会移动临时文件,因此调用成功后,tempFilePath 将不可用。\n##### saveFile  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| x | 4.13 | x |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | [SaveFileOptions](#savefileoptions-values) | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| tempFilePath | [string.URIString](/uts/data-type.md#ide-string) | 是 | - | - | 临时存储文件路径 (本地路径) |\n@| filePath | [string.URIString](/uts/data-type.md#ide-string) \\| null | 否 | - | - | 要存储的文件路径 (本地路径) |\n@| success | (res: [SaveFileSuccessResult](#savefilesuccessresult-values)) => void \\| null | 否 | - | - | 接口调用的回调函数 |\n@| fail | (res: [IFileSystemManagerFail](#ifilesystemmanagerfail-values)) => void \\| null | 否 | - | - | 接口调用失败的回调函数 |\n@| complete | (res: any) => void \\| null | 否 | - | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n###### SaveFileSuccessResult 的属性值 @savefilesuccessresult-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| savedFilePath | string | 是 | - | - | 存储后的文件路径 (本地路径) |\n\n\n#### saveFileSync(tempFilePath, filePath?) @savefilesync\nFileSystemManager.saveFile 的同步版本\n##### saveFileSync  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| x | 4.13 | x |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| tempFilePath | string | 是 | - | - | 临时存储文件路径 (本地路径) |\n| filePath | string \\| null | 否 | - | - | 要存储的文件路径 (本地路径) | \n\n##### 返回值  兼容性 \n\n| 类型 |\n| :- |\n| string |\n \n\n#### removeSavedFile(options) @removesavedfile\n删除该小程序下已保存的本地缓存文件\n##### removeSavedFile  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| x | 4.13 | x |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | **RemoveSavedFileOptions** | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| filePath | [string.URIString](/uts/data-type.md#ide-string) | 是 | - | - | 需要删除的文件路径 (本地路径) |\n@| success | (res: [FileManagerSuccessResult](#filemanagersuccessresult-values)) => void \\| null | 否 | - | - | 接口调用的回调函数 |\n@| fail | (res: [IFileSystemManagerFail](#ifilesystemmanagerfail-values)) => void \\| null | 否 | - | - | 接口调用失败的回调函数 |\n@| complete | (res: any) => void \\| null | 否 | - | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n\n#### unzip(options) @unzip\n解压文件\n##### unzip  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| x | 4.13 | x |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | **UnzipFileOptions** | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| zipFilePath | string | 是 | - | - | 源文件路径,支持本地路径, 只可以是 zip 压缩文件 |\n@| targetPath | string | 是 | - | - | 目标目录路径, 支持本地路径 |\n@| success | (res: [FileManagerSuccessResult](#filemanagersuccessresult-values)) => void \\| null | 否 | - | - | 接口调用的回调函数 |\n@| fail | (res: [IFileSystemManagerFail](#ifilesystemmanagerfail-values)) => void \\| null | 否 | - | - | 接口调用失败的回调函数 |\n@| complete | (res: any) => void \\| null | 否 | - | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n\n#### getSavedFileList(options) @getsavedfilelist\n获取该已保存的本地缓存文件列表\n##### getSavedFileList  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| x | 4.13 | x |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | [GetSavedFileListOptions](#getsavedfilelistoptions-values) | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| success | (res: [GetSavedFileListResult](#getsavedfilelistresult-values)) => void \\| null | 否 | - | - | 接口调用的回调函数 |\n@| fail | (res: [IFileSystemManagerFail](#ifilesystemmanagerfail-values)) => void \\| null | 否 | - | - | 接口调用失败的回调函数 |\n@| complete | (res: any) => void \\| null | 否 | - | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n###### GetSavedFileListResult 的属性值 @getsavedfilelistresult-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| fileList | Array\\<string\\> | 是 | - | - | - |\n\n\n#### truncate(options) @truncate\n对文件内容进行截断操作\n##### truncate  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| x | 4.13 | x |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | **TruncateFileOptions** | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| filePath | [string.URIString](/uts/data-type.md#ide-string) | 是 | - | - | 要截断的文件路径 (本地路径) |\n@| length | number | 是 | - | - | 截断位置,默认0。如果 length 小于文件长度(字节),则只有前面 length 个字节会保留在文件中,其余内容会被删除;<br/>如果 length 大于文件长度,不做处理 |\n@| success | (res: [FileManagerSuccessResult](#filemanagersuccessresult-values)) => void \\| null | 否 | - | - | 接口调用的回调函数 |\n@| fail | (res: [IFileSystemManagerFail](#ifilesystemmanagerfail-values)) => void \\| null | 否 | - | - | 接口调用失败的回调函数 |\n@| complete | (res: any) => void \\| null | 否 | - | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n\n#### truncateSync(filePath, length?) @truncatesync\n对文件内容进行截断操作 (truncate 的同步版本)\n##### truncateSync  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| x | 4.13 | x |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| filePath | string | 是 | - | - | 要截断的文件路径 (本地路径) |\n| length | number | 否 | - | - | 截断位置,默认0。如果 length 小于文件长度(字节),则只有前面 length 个字节会保留在文件中,其余内容会被删除;如果 length 大于文件长度,不做处理 | \n\n\n#### readCompressedFile(options) @readcompressedfile\n读取指定压缩类型的本地文件内容\n##### readCompressedFile  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| x | 4.13 | x |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | [ReadCompressedFileOptions](#readcompressedfileoptions-values) | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| filePath | [string.URIString](/uts/data-type.md#ide-string) | 是 | - | - | 要读取的文件的路径 (本地用户文件或代码包文件),app-android平台支持代码包文件目录 |\n@| compressionAlgorithm | string | 是 | - | - | 文件压缩类型,目前仅支持 'br'。 |\n@| success | (res: [ReadCompressedFileResult](#readcompressedfileresult-values)) => void \\| null | 否 | - | - | 接口调用的回调函数 |\n@| fail | (res: [IFileSystemManagerFail](#ifilesystemmanagerfail-values)) => void \\| null | 否 | - | - | 接口调用失败的回调函数 |\n@| complete | (res: any) => void \\| null | 否 | - | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n###### ReadCompressedFileResult 的属性值 @readcompressedfileresult-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| data | string | 是 | - | - | - |\n\n\n#### readCompressedFileSync(filePath, compressionAlgorithm) @readcompressedfilesync\n同步读取指定压缩类型的本地文件内容\n##### readCompressedFileSync  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| x | 4.13 | x |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| filePath | string | 是 | - | - | 要读取的文件的路径 (本地用户文件或代码包文件),app-android平台支持代码包文件目录 |\n| compressionAlgorithm | string | 是 | - | - | 文件压缩类型,目前仅支持 'br'。 | \n\n##### 返回值  兼容性 \n\n| 类型 |\n| :- |\n| string |\n \n\n#### open(options) @open\n打开文件,返回文件描述符\n##### open  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| x | 4.13 | x |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | [OpenFileOptions](#openfileoptions-values) | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| filePath | [string.URIString](/uts/data-type.md#ide-string) | 是 | - | - | 要追加内容的文件路径 (本地路径) |\n@| flag | \"a\" \\| \"ax\" \\| \"a+\" \\| \"ax+\" \\| \"r\" \\| \"r+\" \\| \"w\" \\| \"wx\" \\| \"w+\" \\| \"wx\" \\| \"wx+\" | 是 | - | - | 文件系统标志,默认值: 'r' |\n@| success | (res: [OpenFileSuccessResult](#openfilesuccessresult-values)) => void \\| null | 否 | - | - | 接口调用的回调函数 |\n@| fail | (res: [IFileSystemManagerFail](#ifilesystemmanagerfail-values)) => void \\| null | 否 | - | - | 接口调用失败的回调函数 |\n@| complete | (res: any) => void \\| null | 否 | - | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n###### OpenFileSuccessResult 的属性值 @openfilesuccessresult-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| fd | string | 是 | - | - | - |\n\n\n#### openSync(options) @opensync\n同步打开文件,返回文件描述符\n##### openSync  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| x | 4.13 | x |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | **OpenFileSyncOptions** | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| filePath | [string.URIString](/uts/data-type.md#ide-string) | 是 | - | - | 要追加内容的文件路径 (本地路径) |\n@| flag | \"a\" \\| \"ax\" \\| \"a+\" \\| \"ax+\" \\| \"r\" \\| \"r+\" \\| \"w\" \\| \"wx\" \\| \"w+\" \\| \"wx\" \\| \"wx+\" | 是 | - | - | 文件系统标志,默认值: 'r' | \n\n##### 返回值  兼容性 \n\n| 类型 |\n| :- |\n| string |\n \n\n#### write(options) @write\n写入文件\n##### write  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| x | 4.13 | x |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | [WriteOptions](#writeoptions-values) | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| fd | string | 是 | - | - | 文件描述符。fd 通过 FileSystemManager.open 或 FileSystemManager.openSync 接口获得 |\n@| data | string | 是 | - | - | 写入的内容 |\n@| encoding | \"ascii\" \\| \"base64\" \\| \"utf-8\" | 是 | - | - | 指定写入文件的字符编码<br/>支持:ascii base64 utf-8 |\n@| success | (res: [WriteResult](#writeresult-values)) => void \\| null | 否 | - | - | 接口调用的回调函数 |\n@| fail | (res: [IFileSystemManagerFail](#ifilesystemmanagerfail-values)) => void \\| null | 否 | - | - | 接口调用失败的回调函数 |\n@| complete | (res: any) => void \\| null | 否 | - | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n###### WriteResult 的属性值 @writeresult-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| bytesWritten | number | 是 | - | - | 实际被写入到文件中的字节数(注意,被写入的字节数不一定与被写入的字符串字符数相同) |\n\n\n#### writeSync(options) @writesync\n同步写入文件\n##### writeSync  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| x | 4.13 | x |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | **WriteSyncOptions** | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| fd | string | 是 | - | - | 文件描述符。fd 通过 FileSystemManager.open 或 FileSystemManager.openSync 接口获得 |\n@| data | string | 是 | - | - | 写入的内容 |\n@| encoding | \"ascii\" \\| \"base64\" \\| \"utf-8\" | 是 | - | - | 指定写入文件的字符编码<br/>支持:ascii base64 utf-8 | \n\n##### 返回值  兼容性 \n\n| 类型 |\n| :- |\n| [WriteResult](#writeresult-values) |\n \n\n#### close(options) @close\n关闭文件\n##### close  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| x | 4.13 | x |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | **CloseOptions** | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| fd | string | 是 | - | - | 需要被关闭的文件描述符。fd 通过 FileSystemManager.open 或 FileSystemManager.openSync 接口获得 |\n@| success | (res: [FileManagerSuccessResult](#filemanagersuccessresult-values)) => void \\| null | 否 | - | - | 接口调用的回调函数 |\n@| fail | (res: [IFileSystemManagerFail](#ifilesystemmanagerfail-values)) => void \\| null | 否 | - | - | 接口调用失败的回调函数 |\n@| complete | (res: any) => void \\| null | 否 | - | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n\n#### closeSync(options) @closesync\n同步关闭文件\n##### closeSync  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| x | 4.13 | x |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | **CloseSyncOptions** | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| fd | string | 是 | - | - | 需要被关闭的文件描述符。fd 通过 FileSystemManager.open 或 FileSystemManager.openSync 接口获得 | \n\n\n#### fstat(options) @fstat\n获取文件的状态信息\n##### fstat  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| x | 4.13 | x |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | [FStatOptions](#fstatoptions-values) | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| fd | string | 是 | - | - | 文件描述符。fd 通过 FileSystemManager.open 或 FileSystemManager.openSync 接口获得 |\n@| success | (res: [FStatSuccessResult](#fstatsuccessresult-values)) => void \\| null | 否 | - | - | 接口调用的回调函数 |\n@| fail | (res: [IFileSystemManagerFail](#ifilesystemmanagerfail-values)) => void \\| null | 否 | - | - | 接口调用失败的回调函数 |\n@| complete | (res: any) => void \\| null | 否 | - | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n###### FStatSuccessResult 的属性值 @fstatsuccessresult-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| stats | [Stats](#stats-values) | 是 | - | - | Stats 对象,包含了文件的状态信息 |\n\n\n#### fstatSync(options) @fstatsync\n同步获取文件的状态信息\n##### fstatSync  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| x | 4.13 | x |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | **FStatSyncOptions** | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| fd | string | 是 | - | - | 文件描述符。fd 通过 FileSystemManager.open 或 FileSystemManager.openSync 接口获得 | \n\n##### 返回值  兼容性 \n\n| 类型 |\n| :- |\n| [Stats](#stats-values) |\n \n\n#### ftruncate(options) @ftruncate\n对文件内容进行截断操作\n##### ftruncate  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| x | 4.13 | x |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | **FTruncateFileOptions** | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| fd | string | 是 | - | - | 文件描述符。fd 通过 FileSystemManager.open 或 FileSystemManager.openSync 接口获得 |\n@| length | number | 是 | - | - | 截断位置,默认0。如果 length 小于文件长度(字节),则只有前面 length 个字节会保留在文件中,其余内容会被删除;<br/>如果 length 大于文件长度,不做处理 |\n@| success | (res: [FileManagerSuccessResult](#filemanagersuccessresult-values)) => void \\| null | 否 | - | - | 接口调用的回调函数 |\n@| fail | (res: [IFileSystemManagerFail](#ifilesystemmanagerfail-values)) => void \\| null | 否 | - | - | 接口调用失败的回调函数 |\n@| complete | (res: any) => void \\| null | 否 | - | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n\n#### ftruncateSync(options) @ftruncatesync\n同步对文件内容进行截断操作\n##### ftruncateSync  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| x | 4.13 | x |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | **FTruncateFileSyncOptions** | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| fd | string | 是 | - | - | 文件描述符。fd 通过 FileSystemManager.open 或 FileSystemManager.openSync 接口获得 |\n@| length | number | 是 | - | - | 截断位置,默认0。如果 length 小于文件长度(字节),则只有前面 length 个字节会保留在文件中,其余内容会被删除;<br/>如果 length 大于文件长度,不做处理 | \n\n\n#### readZipEntry(options) @readzipentry\n读取压缩包内的文件\n##### readZipEntry  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| x | 4.13 | x |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | [ReadZipEntryOptions](#readzipentryoptions-values) | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| filePath | [string.URIString](/uts/data-type.md#ide-string) | 是 | - | - | 要读取的压缩包的路径 (本地路径),app-android平台支持代码包文件目录 |\n@| encoding | \"ascii\" \\| \"base64\" \\| \"utf-8\" | 是 | - | - | 统一指定读取文件的字符编码,只在 entries 值为\"all\"时有效。<br/>如果 entries 值为\"all\"且不传 encoding,则以 string 格式读取文件的内容 |\n@| entries | Array\\<**EntryItem**\\> \\| null | 否 | - | - | 要读取的压缩包内的文件列表(当不传入时表示读取压缩包内所有文件) |\n@@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@@| :- | :- | :- | :- |  :-: | :- |\n@@| path | string | 是 | - | - | 压缩包内文件路径 |\n@@| encoding | \"ascii\" \\| \"base64\" \\| \"base64\" | 是 | - | - | 指定写入文件的字符编码<br/>支持:ascii base64 utf-8 |\n@| success | (res: [EntriesResult](#entriesresult-values)) => void \\| null | 否 | - | - | 接口调用的回调函数 |\n@| fail | (res: [IFileSystemManagerFail](#ifilesystemmanagerfail-values)) => void \\| null | 否 | - | - | 接口调用失败的回调函数 |\n@| complete | (res: any) => void \\| null | 否 | - | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n###### EntriesResult 的属性值 @entriesresult-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| result | Map\\<string, ZipFileItem> | 是 | - | - | 文件路径 |\n\n \n",
    "tutorial": "\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=getFileSystemManager&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=getFileSystemManager&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=getFileSystemManager&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=getFileSystemManager&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=getFileSystemManager&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=getFileSystemManager)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=getFileSystemManager&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.file.getFileSystemManager)",
    "example": "### 示例 \n> [hello uni-app x](https://gitcode.net/dcloud/hello-uni-app-x/-/blob/dev/pages/API/get-file-system-manager/get-file-system-manager.uvue) \n >\n> 该 API 不支持 Web,请运行 hello uni-app x 到 App 平台体验 \n```uvue\n<template>\n  <!-- #ifdef APP -->\n  <text>显示简易操作日志,详细日志需真机运行查看</text><button size=\"mini\" @click=\"log=''\">清空日志</button>\n  <text style=\"margin: 2px; padding: 2px; border: 1px solid #000000;\">{{ log }}</text>\n  <scroll-view style=\"flex: 1;\">\n  <!-- #endif -->\n    <button class=\"btnstyle\" type=\"primary\" @tap=\"statFileInfoTest\"\n      id=\"btn-stat-file\">递归获取目录files的Stats对象{{statFile}}</button>\n    <button class=\"btnstyle\" type=\"primary\" @tap=\"mkdirTest\" id=\"btn-mkdir\">创建文件夹{{mkdirFile}}</button>\n    <button class=\"btnstyle\" type=\"primary\" @tap=\"writeFileTest\" id=\"btn-write-file\">覆盖写入文件{{writeFile}}</button>\n    <button class=\"btnstyle\" type=\"primary\" @tap=\"readDirTest\" id=\"btn-read-dir\">读取文件夹{{readDir}}</button>\n    <button class=\"btnstyle\" type=\"primary\" @tap=\"readFileTest\" id=\"btn-read-file\">读取文件{{readFile}}</button>\n    <button class=\"btnstyle\" type=\"primary\" @tap=\"copyFileTest\"\n      id=\"btn-copy-file\">复制文件{{copyFromFile}}到{{copyToFile}}</button>\n    <button class=\"btnstyle\" type=\"primary\" @tap=\"renameFileTest\"\n      id=\"btn-rename-file\">重命名文件{{renameFromFile}}到{{renameToFile}}</button>\n    <button class=\"btnstyle\" type=\"primary\" @tap=\"accessFileTest\" id=\"btn-access-file\">判断文件{{accessFile}}是否存在</button>\n    <button class=\"btnstyle\" type=\"primary\" @tap=\"getFileInfoTest\"\n      id=\"btn-get-file-info\">获取文件信息{{getFileInfoFile}}</button>\n    <button class=\"btnstyle\" type=\"primary\" @tap=\"unlinkTest\" id=\"btn-unlink-file\">删除文件{{unlinkFile}}</button>\n    <button class=\"btnstyle\" type=\"primary\" @tap=\"copyStaticToFilesTest\"\n      id=\"btn-copyStatic-file\">从static目录复制文件到a目录</button>\n    <button class=\"btnstyle\" type=\"primary\" @tap=\"unlinkAllFileTest\"\n      id=\"btn-clear-file\">删除文件夹{{rmDirFile}}下的所有文件</button>\n    <button class=\"btnstyle\" type=\"primary\" @tap=\"rmdirTest\" id=\"btn-remove-dir\">删除文件夹{{rmDirFile}}</button>\n\n\n    <!-- #ifdef APP-ANDROID -->\n    <button class=\"btnstyle\" type=\"primary\" @tap=\"statFileInfoSyncTest\"\n      id=\"btn-stat-file-sync\">同步递归获取目录files的Stats对象{{statFile}}</button>\n    <button class=\"btnstyle\" type=\"primary\" @tap=\"appendFileTest\" id=\"btn-append-file\">在文件{{readFile}}结尾追加内容</button>\n    <button class=\"btnstyle\" type=\"primary\" @tap=\"appendFileSyncTest\"\n      id=\"btn-append-file-sync\">同步在文件{{readFile}}结尾追加内容</button>\n    <button class=\"btnstyle\" type=\"primary\" @tap=\"writeFileSyncTest\"\n      id=\"btn-write-file-sync\">同步覆盖写入文件{{writeFile}}</button>\n    <button class=\"btnstyle\" type=\"primary\" @tap=\"readFileSyncTest\" id=\"btn-read-file-sync\">同步读取文件{{readFile}}</button>\n    <button class=\"btnstyle\" type=\"primary\" @tap=\"unlinkSyncTest\"\n      id=\"btn-unlink-file-sync\">同步删除文件{{unlinkFile}}</button>\n    <button class=\"btnstyle\" type=\"primary\" @tap=\"mkdirSyncTest\" id=\"btn-mkdir-sync\">同步创建文件夹{{mkdirFile}}</button>\n    <button class=\"btnstyle\" type=\"primary\" @tap=\"rmdirSyncTest\" id=\"btn-remove-dir-sync\">同步删除文件夹{{rmDirFile}}</button>\n    <button class=\"btnstyle\" type=\"primary\" @tap=\"readDirSyncTest\" id=\"btn-read-dir-sync\">同步读取文件夹{{readDir}}</button>\n    <button class=\"btnstyle\" type=\"primary\" @tap=\"accessFileSyncTest\"\n      id=\"btn-access-file-sync\">同步判断文件{{accessFile}}是否存在</button>\n    <button class=\"btnstyle\" type=\"primary\" @tap=\"renameFileSync\"\n      id=\"btn-rename-file-sync\">同步重命名文件{{renameFromFile}}到{{renameToFile}}</button>\n    <button class=\"btnstyle\" type=\"primary\" @tap=\"copyFileSyncTest\"\n      id=\"btn-copy-file-sync\">同步复制文件{{copyFromFile}}到{{copyToFile}}</button>\n    <button class=\"btnstyle\" type=\"primary\" @tap=\"saveFileTest\" id=\"btn-save-file\">保存临时文件到本地</button>\n    <button class=\"btnstyle\" type=\"primary\" @tap=\"saveFileSyncTest\" id=\"btn-save-file-sync\">同步保存临时文件到本地</button>\n    <button class=\"btnstyle\" type=\"primary\" @tap=\"removeSavedFileTest\" id=\"btn-remove-saved-file\">删除已保存的本地文件</button>\n    <button class=\"btnstyle\" type=\"primary\" @tap=\"unzipFileTest\" id=\"btn-unzip-file-sync\">解压文件</button>\n    <button class=\"btnstyle\" type=\"primary\" @tap=\"getSavedFileListTest\"\n      id=\"btn-getsaved-filelist\">获取该已保存的本地缓存文件列表</button>\n    <button class=\"btnstyle\" type=\"primary\" @tap=\"truncateFileTest\"\n      id=\"btn-truncate-file\">对文件{{writeFile}}内容进行截断操作</button>\n    <button class=\"btnstyle\" type=\"primary\" @tap=\"truncateFileSyncTest\"\n      id=\"btn-truncate-file-sync\">同步对文件{{writeFile}}内容进行截断操作</button>\n    <button class=\"btnstyle\" type=\"primary\" @tap=\"readCompressedFileTest\"\n      id=\"btn-compressed-file\">读取指定压缩类型的本地文件内容</button>\n    <button class=\"btnstyle\" type=\"primary\" @tap=\"readCompressedFileSyncTest\"\n      id=\"btn-compressed-file-sync\">同步读取指定压缩类型的本地文件内容</button>\n    <button class=\"btnstyle\" type=\"primary\" @tap=\"openFileTest\" id=\"btn-open-file\">打开文件{{readFile}},返回描述符</button>\n    <button class=\"btnstyle\" type=\"primary\" @tap=\"openFileSyncTest('r')\"\n      id=\"btn-open-file-sync\">同步打开文件{{readFile}},返回描述符</button>\n    <button class=\"btnstyle\" type=\"primary\" @tap=\"closeTest\" id=\"btn-close-file\">通过文件描述符关闭文件{{readFile}}</button>\n    <button class=\"btnstyle\" type=\"primary\" @tap=\"closeSyncTest\"\n      id=\"btn-close-file-sync\">通过文件描述符同步关闭文件{{readFile}}</button>\n    <button class=\"btnstyle\" type=\"primary\" @tap=\"writeTest\" id=\"btn-write\">通过文件描述符写入文件{{readFile}}</button>\n    <button class=\"btnstyle\" type=\"primary\" @tap=\"writeSyncTest\" id=\"btn-write-sync\">同步通过文件描述符写入文件{{readFile}}</button>\n    <button class=\"btnstyle\" type=\"primary\" @tap=\"fstatTest\" id=\"btn-fstat-file\">通过文件描述符获取{{statFile}}的状态信息</button>\n    <button class=\"btnstyle\" type=\"primary\" @tap=\"fstatSyncTest\"\n      id=\"btn-fstat-file-sync\">同步通过文件描述符获取{{statFile}}的状态信息</button>\n    <button class=\"btnstyle\" type=\"primary\" @tap=\"ftruncateFileTest\"\n      id=\"btn-ftruncate-file\">通过文件描述符对文件{{writeFile}}内容进行截断</button>\n    <button class=\"btnstyle\" type=\"primary\" @tap=\"ftruncateFileSyncTest\"\n      id=\"btn-ftruncate-file-sync\">同步通过文件描述符对文件{{writeFile}}内容进行截断</button>\n    <button class=\"btnstyle\" type=\"primary\" @tap=\"readZipEntry\" id=\"btn-readzip-entry\">读取压缩包内的文件</button>\n    <view style=\"height: 4px;\"></view>\n    <!-- #endif -->\n  <!-- #ifdef APP -->\n  </scroll-view>\n  <!-- #endif -->\n</template>\n\n<script>\n  export default {\n\n    data() {\n      return {\n        log: \"\",\n        /**\n         * 自动化测试需要关闭log\n         */\n        logAble: true,\n        fileListSuccess: [] as string[],\n        fileListComplete: [] as string[],\n        accessFileRet: '',\n        lastFailError: new UniError(\"uni-file-manager\", 1300000, \"mock error\"),\n        lastCompleteError: new UniError(\"uni-file-manager\", 1300000, \"mock error\"),\n        readDir: 'a',\n        readFileRet: \"\",\n        writeFileContent: \"中文 en.\\r\\n\\t换行\",\n        appendFileContent: \"append content\",\n        getFileInfoAlgorithm: \"md5\",\n        getFileInfoSize: -1,\n        getFileInfoDigest: \"\",\n        unlinkFile: 'a/1.txt',\n        accessFile: 'a/1.txt',\n        writeFile: 'a/1.txt',\n        writeData: 'insert data哈哈哈',\n        brFile: 'a/1.txt.br',\n        temFile: 'a/1.txt',\n        copyFromFile: 'a/1.txt',\n        copyToFile: 'a/2.txt',\n        renameFromFile: 'a/2.txt',\n        renameToFile: 'a/3.txt',\n        getFileInfoFile: 'a/1.txt',\n        statFile: '',\n        rmDirFile: 'a',\n        mkdirFile: 'a',\n        readFile: 'a/1.txt',\n        recursiveVal: true,\n        done: false,\n        writeFileEncoding: \"utf-8\",\n        readFileEncoding: \"utf-8\",\n        statsRet: [] as Array<FileStats>,\n        unzipFile: 'zip/1.zip',\n        targetZip: \"unzip\",\n        renameFileRet: '',\n        saveFileRet: '',\n        removeSavedFileRet: '',\n        fd: '',\n        closeFileRet: '',\n        bytesWritten: 0,\n        fstat: null as Stats | null,\n        ftruncateRet: '',\n        readZipFile: 'to.zip',\n        getSavedFileListRet: '',\n        /**\n         * 待测试的全局环境变量\n         */\n        basePath: uni.env.USER_DATA_PATH,\n        copyToBasePath: uni.env.USER_DATA_PATH,\n        globalTempPath: uni.env.CACHE_PATH,\n        globalRootPath: uni.env.SANDBOX_PATH,\n        globalUserDataPath: uni.env.USER_DATA_PATH\n      }\n    },\n    onLoad() {\n    },\n\n    methods: {\n      statFileInfoTest: function (_ : any) {\n        const fileManager = uni.getFileSystemManager()\n        fileManager.stat({\n          // path: `${this.basePath}${this.statFile}`, //USER_DATA_PATH\n          path: `${this.globalTempPath}${this.statFile}`, //CACHE_PATH\n          recursive: this.recursiveVal,\n          success: (res : StatSuccessResult) => {\n            if (this.logAble) {\n              this.log += 'statFileInfoTest success:' + JSON.stringify(res) + '\\n\\n'\n            }\n            console.log('statFileInfoTest success', res)\n            this.statsRet = res.stats\n            console.log('this.statsRet', this.statsRet)\n          },\n          fail: (res:IUniError ) => {\n            if (this.logAble) {\n              this.log += 'statFileInfoTest fail:' + JSON.stringify(res) + '\\n\\n'\n            }\n            console.log('statFileInfoTest fail', res)\n            this.lastFailError=new UniError(res.errSubject, res.errCode, res.errMsg)\n          },\n          complete: (res : any) => {\n            console.log(\"statFileInfoTest complete\", res)\n            this.done = true\n            if (res instanceof UniError) {\n              this.lastCompleteError = res\n            }\n          }\n        } as StatOptions)\n      },\n\n      getFileInfoTest: function () {\n        const fileManager = uni.getFileSystemManager()\n\n        fileManager.getFileInfo({\n          filePath: `${this.basePath}${this.getFileInfoFile}`,\n          digestAlgorithm: this.getFileInfoAlgorithm,\n          success: (res : GetFileInfoSuccessResult) => {\n            if (this.logAble) {\n              this.log += 'getFileInfoTest success:' + JSON.stringify(res) + '\\n\\n'\n            }\n            console.log('success', res)\n            this.getFileInfoSize = res.size\n            this.getFileInfoDigest = res.digest\n          },\n          fail: (res : IUniError) => {\n            if (this.logAble) {\n              this.log += 'getFileInfoTest fail:' + JSON.stringify(res) + '\\n\\n'\n            }\n            console.log('fail', res)\n            this.lastFailError=new UniError(res.errSubject, res.errCode, res.errMsg)\n          },\n          complete: (res : any) => {\n            console.log(\"complete\", res)\n            this.done = true\n            if (res instanceof UniError) {\n              this.lastCompleteError = res\n            }\n          }\n        } as GetFileInfoOptions)\n      },\n\n      copyFileTest: function () {\n        const fileManager = uni.getFileSystemManager()\n\n        fileManager.copyFile({\n          srcPath: `${this.basePath}${this.copyFromFile}`,\n          destPath: `${this.copyToBasePath}${this.copyToFile}`,\n          success: (res : FileManagerSuccessResult) => {\n            if (this.logAble) {\n              this.log += 'copyFileTest success:' + JSON.stringify(res) + '\\n\\n'\n            }\n            console.log('success', res)\n          },\n          fail: (res : IUniError) => {\n            if (this.logAble) {\n              this.log += 'copyFileTest fail:' + JSON.stringify(res) + '\\n\\n'\n            }\n            console.log('fail', res)\n            this.lastFailError=new UniError(res.errSubject, res.errCode, res.errMsg)\n          },\n          complete: (res : any) => {\n            console.log(\"complete\", res)\n            this.done = true\n            if (res instanceof UniError) {\n              this.lastCompleteError = res\n            }\n          }\n        } as CopyFileOptions)\n      },\n\n      renameFileTest: function () {\n        const fileManager = uni.getFileSystemManager()\n\n        fileManager.rename({\n          oldPath: `${this.basePath}${this.renameFromFile}`,\n          newPath: `${this.basePath}${this.renameToFile}`,\n          success: (res) => {\n            if (this.logAble) {\n              this.log += 'renameFileTest success:' + JSON.stringify(res) + '\\n\\n'\n            }\n            console.log('success', res)\n          },\n          fail: (res : IUniError) => {\n            if (this.logAble) {\n              this.log += 'renameFileTest fail:' + JSON.stringify(res) + '\\n\\n'\n            }\n            console.log('fail', res)\n            this.lastFailError=new UniError(res.errSubject, res.errCode, res.errMsg)\n          },\n          complete: (res : any) => {\n            this.done = true\n            console.log(\"complete\", res)\n            if (res instanceof UniError) {\n              this.lastCompleteError = res\n            }\n          }\n        } as RenameOptions)\n      },\n\n      readDirTest: function () {\n        const fileManager = uni.getFileSystemManager()\n        fileManager.readdir({\n          dirPath: `${this.basePath}${this.readDir}`,\n          success: (res : ReadDirSuccessResult) => {\n            if (this.logAble) {\n              this.log += 'readDirTest success:' + JSON.stringify(res) + '\\n\\n'\n            }\n            console.log(\"success\", res)\n            this.fileListSuccess = res.files\n          },\n          fail: (res : IUniError) => {\n            if (this.logAble) {\n              this.log += 'readDirTest fail:' + JSON.stringify(res) + '\\n\\n'\n            }\n            console.log('fail', res)\n            this.lastFailError=new UniError(res.errSubject, res.errCode, res.errMsg)\n          },\n          complete: (res : any) => {\n            console.log(\"complete\", res)\n            this.done = true\n            if (res instanceof UniError) {\n              this.lastCompleteError = res\n            } else {\n              this.fileListComplete = (res as ReadDirSuccessResult).files\n            }\n          }\n        } as ReadDirOptions)\n      },\n\n      writeFileTest: function (_ : any) {\n        const fileManager = uni.getFileSystemManager()\n\n        fileManager.writeFile({\n          filePath: `${this.basePath}${this.writeFile}`,\n          data: this.writeFileContent,\n          encoding: this.writeFileEncoding,\n          success: (res) => {\n            if (this.logAble) {\n              this.log += 'writeFileTest success:' + JSON.stringify(res) + '\\n\\n'\n            }\n            console.log('success', res)\n          },\n          fail: (res : IUniError) => {\n            if (this.logAble) {\n              this.log += 'writeFileTest fail:' + JSON.stringify(res) + '\\n\\n'\n            }\n            console.log('fail')\n            this.lastFailError=new UniError(res.errSubject, res.errCode, res.errMsg)\n          },\n          complete: (res : any) => {\n            this.done = true\n            console.log(\"complete\")\n            if (res instanceof UniError) {\n              this.lastCompleteError = res\n            }\n\n          }\n        } as WriteFileOptions)\n      },\n\n      readFileTest: function () {\n        const fileManager = uni.getFileSystemManager()\n\n        fileManager.readFile({\n          filePath: `${this.basePath}${this.readFile}`,\n          encoding: this.readFileEncoding,\n          success: (res : ReadFileSuccessResult) => {\n            if (this.logAble) {\n              this.log += 'readFileTest success:' + JSON.stringify(res) + '\\n\\n'\n            }\n            console.log('success', res)\n            this.readFileRet = res.data\n          },\n          fail: (res : IUniError) => {\n            if (this.logAble) {\n              this.log += 'readFileTest fail:' + JSON.stringify(res) + '\\n\\n'\n            }\n            console.log('fail', res)\n            this.lastFailError=new UniError(res.errSubject, res.errCode, res.errMsg)\n          },\n          complete: (res : any) => {\n            console.log(\"complete\", res)\n            this.done = true\n            if (res instanceof UniError) {\n              this.lastCompleteError = res\n            }\n          }\n        } as ReadFileOptions)\n      },\n\n      rmdirTest: function () {\n        const fileManager = uni.getFileSystemManager()\n        fileManager.rmdir({\n          dirPath: `${this.basePath}${this.rmDirFile}`,\n          recursive: this.recursiveVal,\n          success: (res : FileManagerSuccessResult) => {\n            if (this.logAble) {\n              this.log += 'rmdirTest success:' + JSON.stringify(res) + '\\n\\n'\n            }\n            console.log('success', res)\n          },\n          fail: (res : IUniError) => {\n            if (this.logAble) {\n              this.log += 'rmdirTest fail:' + JSON.stringify(res) + '\\n\\n'\n            }\n            console.log('fail', res)\n            this.lastFailError=new UniError(res.errSubject, res.errCode, res.errMsg)\n          },\n          complete: (res : any) => {\n            console.log(\"complete\", res)\n            this.done = true\n            if (res instanceof UniError) {\n              this.lastCompleteError = res\n            }\n          }\n        } as RmDirOptions)\n      },\n\n      mkdirTest: function () {\n        // 准备测试数据\n        const fileManager = uni.getFileSystemManager()\n\n        fileManager.mkdir({\n          dirPath: `${this.basePath}${this.mkdirFile}`,\n          recursive: this.recursiveVal,\n          success: (res : FileManagerSuccessResult) => {\n            if (this.logAble) {\n              this.log += 'mkdirTest success:' + JSON.stringify(res) + '\\n\\n'\n            }\n            console.log('success', res)\n          },\n          fail: (res : IUniError) => {\n            if (this.logAble) {\n              this.log += 'mkdirTest fail:' + JSON.stringify(res) + '\\n\\n'\n            }\n            console.log('fail', res)\n                        this.lastFailError=new UniError(res.errSubject, res.errCode, res.errMsg)\n\n          },\n          complete: (res : any) => {\n            if (res instanceof UniError) {\n              this.lastCompleteError = res\n            }\n            this.done = true\n            console.log(\"complete\", res)\n          }\n        } as MkDirOptions)\n\n      },\n      accessFileTest: function () {\n        this.accessFileRet = ''\n        const fileManager = uni.getFileSystemManager()\n        fileManager.access({\n          path: `${this.basePath}${this.accessFile}`,\n          success: (res : FileManagerSuccessResult) => {\n            if (this.logAble) {\n              this.log += 'accessFileTest success:' + JSON.stringify(res) + '\\n\\n'\n            }\n            console.log('success', res)\n            this.accessFileRet = res.errMsg\n          },\n          fail: (res : IUniError) => {\n            if (this.logAble) {\n              this.log += 'accessFileTest fail:' + JSON.stringify(res) + '\\n\\n'\n            }\n            console.log('fail', res)\n                        this.lastFailError=new UniError(res.errSubject, res.errCode, res.errMsg)\n\n          },\n          complete: (res : any) => {\n            if (res instanceof UniError) {\n              this.lastCompleteError = res\n            }\n            console.log(\"complete\", res)\n            this.done = true\n          }\n        } as AccessOptions)\n\n      },\n      unlinkTest: function () {\n        const fileManager = uni.getFileSystemManager()\n\n        fileManager.unlink({\n          filePath: `${this.basePath}${this.unlinkFile}`,\n          success: (res : FileManagerSuccessResult) => {\n            if (this.logAble) {\n              this.log += 'unlinkTest success:' + JSON.stringify(res) + '\\n\\n'\n            }\n            console.log('success', res)\n          },\n          fail: (res : IUniError) => {\n            if (this.logAble) {\n              this.log += 'unlinkTest fail:' + JSON.stringify(res) + '\\n\\n'\n            }\n            console.log('fail', res)\n                        this.lastFailError=new UniError(res.errSubject, res.errCode, res.errMsg)\n\n          },\n          complete: (res : any) => {\n            if (res instanceof UniError) {\n              this.lastCompleteError = res\n            }\n            console.log(\"complete\", res)\n            this.done = true\n          }\n        } as UnLinkOptions)\n      },\n      unlinkAllFileTest: function () {\n        const fileManager = uni.getFileSystemManager()\n        fileManager.readdir({\n          dirPath: `${this.basePath}${this.rmDirFile}`,\n          success: (res : ReadDirSuccessResult) => {\n            console.log(\"success to readdir\", res)\n            res.files.forEach(element => {\n              console.log(element)\n              let filePath : string\n              if (this.rmDirFile.length <= 0) {\n                filePath = `${this.basePath}${element}`\n              } else {\n                filePath = `${this.basePath}${this.rmDirFile}/${element}`\n              }\n              fileManager.unlink({\n                filePath: filePath,\n                success: (res : FileManagerSuccessResult) => {\n                  if (this.logAble) {\n                    this.log += 'unlinkAllFileTest success:' + JSON.stringify(res) + '\\n\\n'\n                  }\n                  console.log('success unlink', res)\n                },\n                fail: (res : IUniError) => {\n                  if (this.logAble) {\n                    this.log += 'unlinkAllFileTest fail:' + JSON.stringify(res) + '\\n\\n'\n                  }\n                  console.log('fail unlink', res)\n                              this.lastFailError=new UniError(res.errSubject, res.errCode, res.errMsg)\n\n                },\n                complete: (res : any) => {\n                  if (res instanceof UniError) {\n                    this.lastCompleteError = res\n                  }\n                  console.log(\"complete unlink\", res)\n                  this.done = true\n                }\n              } as UnLinkOptions)\n            });\n          },\n          fail: (res : IUniError) => {\n            if (this.logAble) {\n              this.log += 'unlinkAllFileTest fail:' + JSON.stringify(res) + '\\n\\n'\n            }\n            console.log('fail to readdir', res)\n                        this.lastFailError=new UniError(res.errSubject, res.errCode, res.errMsg)\n\n          },\n          complete: (res : any) => {\n            console.log(\"complete readdir\", res)\n            this.done = true\n            if (res instanceof UniError) {\n              this.lastCompleteError = res\n            } else {\n              this.fileListComplete = (res as ReadDirSuccessResult).files\n            }\n          }\n        } as ReadDirOptions)\n      },\n      copyStaticToFilesTest: function () {\n        const fileManager = uni.getFileSystemManager()\n\n        fileManager.copyFile({\n          srcPath: \"/static/list-mock/mock.json\",\n          destPath: `${this.copyToBasePath}/a/mock.json`,\n          success: (res : FileManagerSuccessResult) => {\n            if (this.logAble) {\n              this.log += 'copyFileTest success:' + JSON.stringify(res) + '\\n\\n'\n            }\n            console.log('success', res)\n          },\n          fail: (res : IUniError) => {\n            if (this.logAble) {\n              this.log += 'copyFileTest fail:' + JSON.stringify(res) + '\\n\\n'\n            }\n            console.log('fail', res)\n                        this.lastFailError=new UniError(res.errSubject, res.errCode, res.errMsg)\n\n          },\n          complete: (res : any) => {\n            console.log(\"complete\", res)\n            this.done = true\n            if (res instanceof UniError) {\n              this.lastCompleteError = res\n            }\n          }\n        } as CopyFileOptions)\n      },\n      //start\n      appendFileTest: function (_ : any) {\n        const fileManager = uni.getFileSystemManager()\n        fileManager.appendFile({\n          filePath: `${this.basePath}${this.writeFile}`,\n          data: this.appendFileContent,\n          encoding: this.writeFileEncoding,\n          success: (res : FileManagerSuccessResult) => {\n            if (this.logAble) {\n              this.log += 'appendFileTest success:' + JSON.stringify(res) + '\\n\\n'\n            }\n            console.log('success', res)\n          },\n          fail: (res : IUniError) => {\n            if (this.logAble) {\n              this.log += 'appendFileTest fail:' + JSON.stringify(res) + '\\n\\n'\n            }\n            console.log('fail')\n                        this.lastFailError=new UniError(res.errSubject, res.errCode, res.errMsg)\n\n          },\n          complete: (res : any) => {\n            this.done = true\n            console.log(\"complete\")\n            if (res instanceof UniError) {\n              this.lastCompleteError = res\n            }\n\n          }\n        } as AppendFileOptions)\n      },\n      writeFileSyncTest: function (_ : any) {\n        try {\n          const fileManager = uni.getFileSystemManager()\n          fileManager.writeFileSync(`${this.basePath}${this.writeFile}`, this.writeFileContent, this.writeFileEncoding)\n          if (this.logAble) {\n            this.log += 'writeFileSyncTest success:' + '\\n\\n'\n          }\n          this.done = true\n        } catch (e) {\n          if (this.logAble) {\n            this.log += 'writeFileSyncTest fail:' + e + '\\n\\n'\n          }\n          this.done = true\n        }\n\n      },\n      readFileSyncTest: function () {\n        try {\n          const fileManager = uni.getFileSystemManager()\n          let data = fileManager.readFileSync(\n            `${this.basePath}${this.readFile}`,\n            this.readFileEncoding)\n          if (this.logAble) {\n            this.log += 'readFileSyncTest result:' + data + '\\n\\n'\n          }\n          this.done = true\n          this.readFileRet = data\n        } catch (e) {\n          if (this.logAble) {\n            this.log += 'readFileSyncTest fail:' + e + '\\n\\n'\n          }\n          this.done = true\n        }\n\n      },\n      unlinkSyncTest: function () {\n        try {\n          const fileManager = uni.getFileSystemManager()\n          fileManager.unlinkSync(\n            `${this.basePath}${this.unlinkFile}`)\n          this.done = true\n        } catch (e) {\n          if (this.logAble) {\n            this.log += 'unlinkSyncTest fail:' + e + '\\n\\n'\n          }\n          this.done = true\n        }\n      },\n      mkdirSyncTest: function () {\n        // 准备测试数据\n        try {\n          const fileManager = uni.getFileSystemManager()\n          fileManager.mkdirSync(`${this.basePath}${this.mkdirFile}`, this.recursiveVal)\n          this.done = true\n        } catch (e) {\n          this.done = true\n          if (this.logAble) {\n            this.log += 'mkdirSyncTest fail:' + e + '\\n\\n'\n          }\n        }\n\n      },\n      rmdirSyncTest: function () {\n        try {\n          const fileManager = uni.getFileSystemManager()\n          fileManager.rmdirSync(\n            `${this.basePath}${this.rmDirFile}`,\n            this.recursiveVal)\n          this.done = true\n        } catch (e) {\n          if (this.logAble) {\n            this.log += 'rmdirSyncTest fail:' + e + '\\n\\n'\n          }\n          this.done = true\n        }\n      },\n      readDirSyncTest: function () {\n        try {\n          const fileManager = uni.getFileSystemManager()\n          let res = fileManager.readdirSync(\n            `${this.basePath}${this.readDir}`)\n          if (this.logAble) {\n            this.log += 'readDirTest success:' + JSON.stringify(res) + '\\n\\n'\n          }\n          if (res != null) {\n            this.fileListSuccess = res\n          }\n          this.done = true\n        } catch (e) {\n          if (this.logAble) {\n            this.log += 'rmdirSyncTest fail:' + e + '\\n\\n'\n          }\n          this.done = true\n        }\n      },\n      accessFileSyncTest: function () {\n        this.accessFileRet = ''\n        const fileManager = uni.getFileSystemManager()\n        try {\n          fileManager.accessSync(`${this.basePath}${this.accessFile}`)\n          this.done = true\n          this.accessFileRet = 'access:ok'\n        } catch (e) {\n          if (this.logAble) {\n            this.log += 'rmdirSyncTest fail:' + e + '\\n\\n'\n          }\n          this.done = true\n        }\n      },\n      renameFileSync: function () {\n        const fileManager = uni.getFileSystemManager()\n        try {\n          fileManager.renameSync(`${this.basePath}${this.renameFromFile}`,\n            `${this.basePath}${this.renameToFile}`)\n          this.done = true\n          this.renameFileRet = \"rename:ok\"\n\n        } catch (e) {\n          if (this.logAble) {\n            this.log += 'rmdirSyncTest fail:' + e + '\\n\\n'\n          }\n          console.log('renameSync:' + e)\n          this.done = true\n        }\n      },\n      copyFileSyncTest: function () {\n        const fileManager = uni.getFileSystemManager()\n        try {\n          fileManager.copyFileSync(\n            `${this.basePath}${this.copyFromFile}`,\n            `${this.copyToBasePath}${this.copyToFile}`)\n          this.done = true\n        } catch (e) {\n          if (this.logAble) {\n            this.log += 'rmdirSyncTest fail:' + e + '\\n\\n'\n          }\n          this.done = true\n        }\n      },\n      appendFileSyncTest: function (_ : any) {\n        const fileManager = uni.getFileSystemManager()\n        try {\n          fileManager.appendFileSync(\n            `${this.basePath}${this.writeFile}`,\n            this.appendFileContent,\n            this.writeFileEncoding)\n          this.done = true\n        } catch (e) {\n          if (this.logAble) {\n            this.log += 'rmdirSyncTest fail:' + e + '\\n\\n'\n          }\n          this.done = true\n        }\n      },\n      saveFileTest: function (_ : any) {\n        const fileManager = uni.getFileSystemManager()\n        fileManager.saveFile({\n          tempFilePath: `${this.globalTempPath}${this.temFile}`,\n          // filePath:`${this.basePath}local/`,\n          success: (res : SaveFileSuccessResult) => {\n            if (this.logAble) {\n              this.log += 'saveFileTest success:' + JSON.stringify(res) + '\\n\\n'\n            }\n            console.log('success', res)\n            this.saveFileRet = res.savedFilePath\n            this.done = true\n          },\n          fail: (res : IUniError) => {\n            if (this.logAble) {\n              this.log += 'saveFileTest fail:' + JSON.stringify(res) + '\\n\\n'\n            }\n            console.log('saveFileTest fail', res)\n                        this.lastFailError=new UniError(res.errSubject, res.errCode, res.errMsg)\n\n            this.done = true\n          },\n          complete: (_) => {\n            this.done = true\n          }\n        } as SaveFileOptions)\n      },\n      saveFileSyncTest: function (_ : any) {\n        const fileManager = uni.getFileSystemManager()\n        try {\n          fileManager.saveFileSync(\n            `${this.globalTempPath}${this.temFile}`, `${this.basePath}/`)\n          // filePath:`${this.basePath}local/`,)\n          this.done = true\n\n          //todo 后面打开\n          // this.saveFileRet=res\n        } catch (e) {\n          console.log('saveFileSyncTest:' + e)\n          this.done = true\n        }\n      },\n      unzipFileTest: function (_ : any) {\n        const fileManager = uni.getFileSystemManager()\n        try {\n          fileManager.mkdirSync(`${this.basePath}${this.targetZip}`, true)\n        } catch (e) {\n          console.error(e)\n        }\n        fileManager.unzip({\n          zipFilePath: '/static/filemanager/to.zip',\n          targetPath: `${this.basePath}${this.targetZip}`,\n          success: (res : FileManagerSuccessResult) => {\n            if (this.logAble) {\n              this.log += 'unzipFileTest success:' + JSON.stringify(res) + '\\n\\n'\n            }\n            console.log('success', res)\n          },\n          fail: (res : IUniError) => {\n            if (this.logAble) {\n              this.log += 'unzipFileTest fail:' + JSON.stringify(res) + '\\n\\n'\n            }\n            console.log('fail', res)\n                        this.lastFailError=new UniError(res.errSubject, res.errCode, res.errMsg)\n\n          },\n          complete: (_) => {\n            this.done = true\n          }\n        } as UnzipFileOptions)\n      },\n\n      getSavedFileListTest: function () {\n        const fileManager = uni.getFileSystemManager()\n        fileManager.getSavedFileList({\n          success: (res : GetSavedFileListResult) => {\n            if (this.logAble) {\n              this.log += 'getSavedFileListTest success:' + JSON.stringify(res) + '\\n\\n'\n            }\n            console.log(\"getSavedFileListTest success\", res)\n            this.fileListSuccess = res.fileList\n            this.getSavedFileListRet = \"getSavedFileList:ok\"\n          },\n          fail: (res : IUniError) => {\n            if (this.logAble) {\n              this.log += 'getSavedFileListTest fail:' + JSON.stringify(res) + '\\n\\n'\n            }\n            console.log('getSavedFileListTest fail', res)\n                        this.lastFailError=new UniError(res.errSubject, res.errCode, res.errMsg)\n\n            this.getSavedFileListRet = JSON.stringify(res)\n          },\n          complete: (res : any) => {\n            console.log(\"complete\", res)\n            this.done = true\n            if (res instanceof UniError) {\n              this.lastCompleteError = res\n            } else {\n              this.fileListComplete = (res as GetSavedFileListResult).fileList\n            }\n          }\n        } as GetSavedFileListOptions)\n      },\n      truncateFileTest() {\n        const fileManager = uni.getFileSystemManager()\n        fileManager.truncate({\n          filePath: `${this.basePath}${this.writeFile}`,\n          length: 7,\n          success: (res : FileManagerSuccessResult) => {\n            if (this.logAble) {\n              this.log += 'truncateFileTest success:' + JSON.stringify(res) + '\\n\\n'\n            }\n            console.log(\"success\", res)\n          },\n          fail: (res : IUniError) => {\n            if (this.logAble) {\n              this.log += 'truncateFileTest fail:' + JSON.stringify(res) + '\\n\\n'\n            }\n            console.log('fail', res)\n                        this.lastFailError=new UniError(res.errSubject, res.errCode, res.errMsg)\n\n          },\n          complete: (res : any) => {\n            console.log(\"complete\", res)\n            this.done = true\n            if (res instanceof UniError) {\n              this.lastCompleteError = res\n            }\n          }\n        } as TruncateFileOptions)\n      },\n      truncateFileSyncTest() {\n        const fileManager = uni.getFileSystemManager()\n        try {\n          fileManager.truncateSync(\n            `${this.basePath}${this.writeFile}`,\n            4)\n          this.done = true\n        } catch (e) {\n          console.log(e)\n          this.done = true\n        }\n      },\n      readCompressedFileTest() {\n        const fileManager = uni.getFileSystemManager()\n        fileManager.readCompressedFile({\n          filePath: '/static/filemanager/1.txt.br',\n          compressionAlgorithm: \"br\",\n          success: (res : ReadCompressedFileResult) => {\n            if (this.logAble) {\n              this.log += 'readCompressedFileTest success:' + JSON.stringify(res) + '\\n\\n'\n            }\n            console.log(\"success\", res)\n          },\n          fail: (res : IUniError) => {\n            if (this.logAble) {\n              this.log += 'readCompressedFileTest fail:' + JSON.stringify(res) + '\\n\\n'\n            }\n            console.log('fail', res)\n                        this.lastFailError=new UniError(res.errSubject, res.errCode, res.errMsg)\n\n          },\n          complete: (_) => {\n            this.done = true\n          }\n        } as ReadCompressedFileOptions)\n      },\n      readCompressedFileSyncTest() {\n        console.log('readCompressedFileSyncTest')\n        const fileManager = uni.getFileSystemManager()\n        try {\n          let data = fileManager.readCompressedFileSync(\n            '/static/filemanager/1.txt.br',\n            \"br\")\n          if (this.logAble) {\n            this.log += data\n          }\n          this.done = true\n        } catch (e) {\n          if (this.logAble) {\n            this.log += 'readCompressedFileSyncTest fail:' + e + '\\n\\n'\n          }\n          this.done = true\n        }\n\n      },\n      removeSavedFileTest() {\n        console.log(\"removeSavedFileTest enter\")\n        const fileManager = uni.getFileSystemManager()\n        fileManager.removeSavedFile({\n          filePath: `${this.basePath}${this.writeFile}`,\n          success: (res : FileManagerSuccessResult) => {\n            if (this.logAble) {\n              this.log += 'removeSavedFileTest success:' + JSON.stringify(res) + '\\n\\n'\n            }\n            this.removeSavedFileRet = res.errMsg\n            console.log(\"removeSavedFileTest success\", res)\n          },\n          fail: (res : IUniError) => {\n            if (this.logAble) {\n              this.log += 'removeSavedFileTest fail:' + JSON.stringify(res) + '\\n\\n'\n            }\n            console.log('removeSavedFileTest fail', res)\n          },\n          complete: (_) => {\n            this.done = true\n          }\n        } as RemoveSavedFileOptions)\n      },\n\n      statFileInfoSyncTest: function (_ : any) {\n        const fileManager = uni.getFileSystemManager()\n        try {\n          let res = fileManager.statSync(\n            // path: `${this.basePath}${this.statFile}`, //USER_DATA_PATH\n            `${this.globalTempPath}${this.statFile}`, //CACHE_PATH\n            this.recursiveVal)\n          if (this.logAble) {\n            this.log += 'statFileInfoSyncTest success:' + JSON.stringify(res) + '\\n\\n'\n          }\n          this.statsRet = res\n          this.done = true\n        } catch (e) {\n          if (this.logAble) {\n            this.log += 'statFileInfoSyncTest fail:' + e + '\\n\\n'\n          }\n          this.done = true\n        }\n\n      },\n      openFileTest() {\n        const fileManager = uni.getFileSystemManager()\n        fileManager.open({\n          filePath: `${this.basePath}${this.readFile}`,\n          flag: \"a\",\n          success: (res : OpenFileSuccessResult) => {\n            if (this.logAble) {\n              this.log += 'openFileTest success:' + JSON.stringify(res) + '\\n\\n'\n            }\n            console.log(\"success\", res)\n            this.fd = res.fd\n          },\n          fail: (res : IUniError) => {\n            if (this.logAble) {\n              this.log += 'openFileTest fail:' + JSON.stringify(res) + '\\n\\n'\n            }\n            console.log('fail', res)\n                        this.lastFailError=new UniError(res.errSubject, res.errCode, res.errMsg)\n\n          },\n          complete: (_) => {\n            this.done = true\n          }\n        } as OpenFileOptions)\n      },\n      openFileSyncTest(param : string) : string {\n        const fileManager = uni.getFileSystemManager()\n        try {\n          let fd = fileManager.openSync({\n            filePath: `${this.basePath}${this.readFile}`,\n            flag: param,\n          } as OpenFileSyncOptions)\n          if (this.logAble) {\n            this.log += 'openFileSyncTest success:' + fd + '\\n\\n'\n          }\n          this.done = true\n          this.fd = fd\n          return fd\n        } catch (e) {\n          if (this.logAble) {\n            this.log += 'openFileSyncTest fail:' + JSON.stringify(e) + '\\n\\n'\n          }\n          console.log('fail', e)\n          this.done = true\n        }\n        return \"\"\n      },\n      closeSyncTest() {\n        console.log('closeSyncTest')\n        const fileManager = uni.getFileSystemManager()\n        try {\n          console.log('closeSync')\n          fileManager.closeSync({\n            fd: this.openFileSyncTest('r')\n          } as CloseSyncOptions)\n          if (this.logAble) {\n            this.log += 'closeSyncTest success:' + '\\n\\n'\n          }\n          this.done = true\n          this.closeFileRet = \"close:ok\"\n        } catch (e) {\n          if (this.logAble) {\n            this.log += 'closeSyncTest fail:' + JSON.stringify(e) + '\\n\\n'\n          }\n          console.log('fail', e)\n          this.done = true\n        }\n      },\n      closeTest() {\n        const fileManager = uni.getFileSystemManager()\n        fileManager.close({\n          fd: this.openFileSyncTest('r'),\n          success: (res : FileManagerSuccessResult) => {\n            if (this.logAble) {\n              this.log += 'closeTest success:' + JSON.stringify(res) + '\\n\\n'\n            }\n            this.closeFileRet = res.errMsg\n            console.log(\"success\", res)\n          },\n          fail: (res : IUniError) => {\n            if (this.logAble) {\n              this.log += 'closeTest fail:' + JSON.stringify(res) + '\\n\\n'\n            }\n            console.log('fail', res)\n                        this.lastFailError=new UniError(res.errSubject, res.errCode, res.errMsg)\n\n          },\n          complete: (_) => {\n            this.done = true\n          }\n\n        } as CloseOptions)\n      },\n      writeTest() {\n        const fileManager = uni.getFileSystemManager()\n        try {\n          fileManager.mkdirSync(`${this.basePath}${this.mkdirFile}`, true)\n        } catch (e) {\n          console.error(e)\n        }\n\n        fileManager.write({\n          fd: this.openFileSyncTest('w+'),\n          data: this.writeData,\n          encoding: \"utf-8\",\n          success: (res : WriteResult) => {\n            if (this.logAble) {\n              this.log += 'writeTest success:' + JSON.stringify(res) + '\\n\\n'\n            }\n            console.log(\"success\", res)\n            this.bytesWritten = res.bytesWritten\n          },\n          fail: (res : IUniError) => {\n            if (this.logAble) {\n              this.log += 'writeTest fail:' + JSON.stringify(res) + '\\n\\n'\n            }\n            console.log('fail', res)\n                        this.lastFailError=new UniError(res.errSubject, res.errCode, res.errMsg)\n\n          },\n          complete: (_) => {\n            this.done = true\n          }\n\n        } as WriteOptions)\n      },\n      writeSyncTest() {\n        const fileManager = uni.getFileSystemManager()\n        try {\n          fileManager.mkdirSync(`${this.basePath}${this.mkdirFile}`, true)\n        } catch (e) {\n          console.error(e)\n        }\n        fileManager.open({\n          filePath: `${this.basePath}${this.readFile}`,\n          flag: \"r+\",\n          success: (res : OpenFileSuccessResult) => {\n            console.log(\"success\", res)\n            if (res.fd.length <= 0) {\n              this.done = true\n              return\n            }\n            try {\n              let ret = fileManager.writeSync({\n                fd: res.fd,\n                data: this.writeData,\n                encoding: \"utf-8\"\n              } as WriteSyncOptions)\n              if (this.logAble) {\n                this.log += 'writeSyncTest success:' + JSON.stringify(ret) + '\\n\\n'\n              }\n              console.log(\"success\", ret)\n              this.done = true\n              this.bytesWritten = ret.bytesWritten\n            } catch (e) {\n              if (this.logAble) {\n                this.log += 'writeSyncTest fail:' + JSON.stringify(e) + '\\n\\n'\n              }\n              console.log('fail', e)\n              this.done = true\n            }\n          },\n          fail: (res : IUniError) => {\n            if (this.logAble) {\n              this.log += 'openFileTest fail:' + JSON.stringify(res) + '\\n\\n'\n            }\n            console.log('fail', res)\n                        this.lastFailError=new UniError(res.errSubject, res.errCode, res.errMsg)\n\n            this.done = true\n          }\n        } as OpenFileOptions)\n\n      },\n      fstatTest() {\n        const fileManager = uni.getFileSystemManager()\n        fileManager.fstat({\n          fd: this.openFileSyncTest('r'),\n          success: (res : FStatSuccessResult) => {\n            if (this.logAble) {\n              this.log += 'fstatTest success:' + JSON.stringify(res) + '\\n\\n'\n            }\n            console.log(\"success\", res)\n            this.fstat = res.stats\n          },\n          fail: (res : IUniError) => {\n            if (this.logAble) {\n              this.log += 'fstatTest fail:' + JSON.stringify(res) + '\\n\\n'\n            }\n            console.log('fail', res)\n                        this.lastFailError=new UniError(res.errSubject, res.errCode, res.errMsg)\n\n          },\n          complete: (_) => {\n            this.done = true\n          }\n\n        } as FStatOptions)\n      },\n      fstatSyncTest() {\n        const fileManager = uni.getFileSystemManager()\n        try {\n          let stat =\n            fileManager.fstatSync({\n              fd: this.openFileSyncTest('r'),\n            } as FStatSyncOptions)\n          if (this.logAble) {\n            this.log += 'fstatSyncTest success:' + JSON.stringify(stat) + '\\n\\n'\n          }\n          this.done = true\n          this.fstat = stat\n        } catch (e) {\n          if (this.logAble) {\n            this.log += 'fstatSyncTest fail:' + JSON.stringify(e) + '\\n\\n'\n          }\n          this.done = true\n        }\n      },\n      ftruncateFileTest() {\n        const fileManager = uni.getFileSystemManager()\n        fileManager.ftruncate({\n          fd: this.openFileSyncTest('r+'),\n          length: 6,\n          success: (res : FileManagerSuccessResult) => {\n            if (this.logAble) {\n              this.log += 'ftruncateFileTest success:' + JSON.stringify(res) + '\\n\\n'\n            }\n            this.ftruncateRet = res.errMsg\n          },\n          fail: (res : IUniError) => {\n            if (this.logAble) {\n              this.log += 'ftruncateFileTest fail:' + JSON.stringify(res) + '\\n\\n'\n            }\n            console.log('fail', res)\n                        this.lastFailError=new UniError(res.errSubject, res.errCode, res.errMsg)\n\n          },\n          complete: (res : any) => {\n            console.log(\"complete\", res)\n            this.done = true\n            if (res instanceof UniError) {\n              this.lastCompleteError = res\n            }\n          }\n        } as FTruncateFileOptions)\n      },\n      ftruncateFileSyncTest() {\n        const fileManager = uni.getFileSystemManager()\n        try {\n          fileManager.ftruncateSync({\n            fd: this.openFileSyncTest('r+'),\n            length: 4\n          } as FTruncateFileSyncOptions)\n          if (this.logAble) {\n            this.log += 'ftruncateFileSyncTest success:' + '\\n\\n'\n          }\n          this.done = true\n          this.ftruncateRet = 'ftruncate:ok'\n        } catch (e) {\n          if (this.logAble) {\n            this.log += 'ftruncateFileSyncTest fail:' + JSON.stringify(e) + '\\n\\n'\n          }\n          this.done = true\n        }\n      },\n      readZipEntry() {\n        const fileManager = uni.getFileSystemManager()\n        fileManager.readZipEntry({\n          filePath: '/static/filemanager/to.zip',\n          encoding: 'utf-8',\n          success: (res : EntriesResult) => {\n            if (this.logAble) {\n              this.log += 'readZipEntry success:size=' + res.result.size + '\\n\\n'\n            }\n            console.log(\"success\", res)\n          },\n          fail: (res : IUniError) => {\n            if (this.logAble) {\n              this.log += 'readZipEntry fail:' + JSON.stringify(res) + '\\n\\n'\n            }\n            console.log('fail', res)\n                        this.lastFailError=new UniError(res.errSubject, res.errCode, res.errMsg)\n\n          }\n        } as ReadZipEntryOptions)\n      },\n\n    },\n\n  }\n</script>\n\n<style>\n  .btnstyle {\n    margin: 4px;\n  }\n</style>\n\n```"
  },
  "getUniverifyManager": {
    "name": "## uni.getUniverifyManager() @getuniverifymanager",
    "description": "获取一键登录管理对象",
    "compatibility": "### getUniverifyManager  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | 3.99 | 4.18 |\n",
    "param": "",
    "returnValue": "### 返回值  兼容性 \n\n| 类型 |\n| :- |\n| [UniverifyManager](#univerifymanager-values) |\n\n#### UniverifyManager 的方法 @univerifymanager-values \n\n#### preLogin(options) @prelogin\n预登录\n##### preLogin  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | 3.99 | 4.18 |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | [PreLoginOptions](#preloginoptions-values) | 是 | - | - | 预登录参数 |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| success | () => void | 否 | - | - | - |\n@| fail | (err: [PreLoginFail](#preloginfail-values)) => void | 否 | - | - | - |\n@| complete | (res: any) => void | 否 | - | - | - | \n\n###### PreLoginFail 的属性值 @preloginfail-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errCode | 1000 \\| 1001 \\| 1002 \\| 1004 \\| 4001 \\| 30004 \\| 30005 \\| 30006 | 是 | - | - | 1000 当前应用appid尚未开通uni一键登录<br/>1001 应用所有者账号信息异常,请检查账号一键登录服务是否正常<br/>1002 应用所有者账号信息异常,请检查账号余额是否充足<br/>1004 uni一键登录应用不存在<br/>4001 参数异常<br/>30004 其他错误<br/>30005 预登录失败<br/>30006 一键登录失败 |\n| errSubject | string | 是 | - | - | 统一错误主题(模块)名称 |\n| data | any \\| null | 否 | - | - | 错误信息中包含的数据 |\n| cause | [Error](https://uniapp.dcloud.net.cn/tutorial/err-spec.html#unierror) \\| null | 否 | - | - | 源错误信息,可以包含多个错误,详见SourceError |\n| errMsg | string | 是 | - | - | - |\n\n\n#### login(options) @login\n登录\n##### login  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | 3.99 | 4.18 |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | [LoginOptions](#loginoptions-values) | 是 | - | - | 登录参数 |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| univerifyStyle | **UniverifyStyle** | 否 | - | - | 登录页样式 |\n@@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@@| :- | :- | :- | :- |  :-: | :- |\n@@| fullScreen | boolean | 否 | - | - | 是否全屏 |\n@@| logoPath | string | 否 | - | - | logo路径 |\n@@| backgroundColor | string | 否 | - | - | 登录页背景色 |\n@@| loginBtnText | string | 否 | - | - | 登录按钮文字 |\n@| success | (res: [LoginSuccess](#loginsuccess-values)) => void | 否 | - | - | - |\n@| fail | (err: [LoginFail](#loginfail-values)) => void | 否 | - | - | - |\n@| complete | (res: any) => void | 否 | - | - | - | \n\n###### LoginSuccess 的属性值 @loginsuccess-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| openId | string | 是 | - | - | 登录授权唯一标识 |\n| accessToken | string | 是 | - | - | token |\n\n###### LoginFail 的属性值 @loginfail-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errCode | 1000 \\| 1001 \\| 1002 \\| 1004 \\| 4001 \\| 30004 \\| 30005 \\| 30006 | 是 | - | - | 1000 当前应用appid尚未开通uni一键登录<br/>1001 应用所有者账号信息异常,请检查账号一键登录服务是否正常<br/>1002 应用所有者账号信息异常,请检查账号余额是否充足<br/>1004 uni一键登录应用不存在<br/>4001 参数异常<br/>30004 其他错误<br/>30005 预登录失败<br/>30006 一键登录失败 |\n| errSubject | string | 是 | - | - | 统一错误主题(模块)名称 |\n| data | any \\| null | 否 | - | - | 错误信息中包含的数据 |\n| cause | [Error](https://uniapp.dcloud.net.cn/tutorial/err-spec.html#unierror) \\| null | 否 | - | - | 源错误信息,可以包含多个错误,详见SourceError |\n| errMsg | string | 是 | - | - | - |\n\n\n#### close() @close\n关闭登录页\n##### close  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | 3.99 | 4.18 |\n\n\n\n#### isPreLoginValid() @ispreloginvalid\n预登录是否有效\n##### isPreLoginValid  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | 3.99 | 4.18 |\n\n\n##### 返回值  兼容性 \n\n| 类型 |\n| :- |\n| boolean |\n \n \n",
    "tutorial": "\n### 参见\n\n- [参见uni-app相关文档](https://uniapp.dcloud.net.cn/univerify.html#univerifymanager)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=getUniverifyManager&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=getUniverifyManager&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=getUniverifyManager&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=getUniverifyManager&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=getUniverifyManager&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=getUniverifyManager)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=getUniverifyManager&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.loginVerify.getUniverifyManager)",
    "example": "### 示例 \n> [hello uni-app x](https://gitcode.net/dcloud/hello-uni-app-x/-/blob/dev/pages/API/get-univerify-manager/get-univerify-manager.uvue) \n >\n> 该 API 不支持 Web,请运行 hello uni-app x 到 App 平台体验 \n```uvue\n<template>\n  <view>\n    <page-head :title=\"title\"></page-head>\n    <view class=\"uni-padding-wrap uni-common-mt\">\n      <view class=\"uni-btn-v uni-common-mt\">\n        <button type=\"primary\" @click=\"verify(false)\">一键登录(半屏)</button>\n      </view>\n      <view class=\"uni-btn-v uni-common-mt\">\n        <button type=\"primary\" @click=\"verify(true)\">一键登录(全屏)</button>\n      </view>\n    </view>\n  </view>\n</template>\n\n<script>\n  export default {\n    data() {\n      return {\n        title: '一键登录',\n        univerifyManager: null as UniverifyManager | null\n      }\n    },\n    onLoad() {\n      this.univerifyManager = uni.getUniverifyManager();\n      // 预登录\n      this.univerifyManager?.preLogin({\n        success: () => {\n          console.log(\"pre login success\");\n        },\n        fail: (err : PreLoginFail) => {\n          console.error(\"pre login fail => \" + JSON.stringify(err));\n          uni.showModal({\n            title: '预登录失败',\n            content: JSON.parseObject(err.cause?.cause?.message ?? \"\")?.getString(\"errorDesc\") ?? err.errMsg,\n            showCancel: false\n          });\n        }\n      } as PreLoginOptions);\n    },\n    methods: {\n      verify(fullScreen : boolean) {\n        // 校验预登录是否有效\n        const isPreLoginValid = this.univerifyManager?.isPreLoginValid() ?? false;\n        if (isPreLoginValid) {\n          // 预登录有效,执行登录\n          this.login(fullScreen);\n        } else {\n          // 预登录无效,执行预登录\n          this.univerifyManager?.preLogin({\n            success: () => {\n              console.log(\"pre login success\");\n              this.login(fullScreen);\n            },\n            fail: (err : PreLoginFail) => {\n              console.error(\"pre login fail => \" + JSON.stringify(err));\n              uni.showModal({\n                title: '预登录失败',\n                content: JSON.parseObject(err.cause?.cause?.message ?? \"\")?.getString(\"errorDesc\") ?? err.errMsg,\n                showCancel: false\n              });\n            }\n          } as PreLoginOptions);\n        }\n      },\n      login(fullScreen : boolean) {\n        this.univerifyManager?.login({\n          // 登录页样式\n          univerifyStyle: {\n            fullScreen: fullScreen,\n            backgroundColor: \"#FFFFFF\",\n            loginBtnText: \"一键登录\",\n            logoPath: \"/static/logo.png\"\n          } as UniverifyStyle,\n          success: (res : LoginSuccess) => {\n            console.log(\"login success => \" + JSON.stringify(res));\n            // 云函数取号\n            uniCloud.callFunction({\n              name: 'univerify',\n              data: {\n                access_token: res.accessToken, // 客户端一键登录接口返回的access_token\n                openid: res.openId // 客户端一键登录接口返回的openid\n              }\n            }).then(res => {\n              // 关闭登录页\n              this.univerifyManager?.close();\n              setTimeout(() => {\n                uni.showModal({\n                  title: '取号成功',\n                  content: res.result.getJSON(\"res\")?.getString(\"phoneNumber\"),\n                  showCancel: false\n                });\n              }, 100);\n            }).catch(err => {\n              console.error(JSON.stringify(err));\n              // 关闭登录页\n              this.univerifyManager?.close();\n              setTimeout(() => {\n                uni.showModal({\n                  title: '取号失败',\n                  content: (err as Error).message,\n                  showCancel: false\n                });\n              }, 100);\n            });\n          },\n          fail: (err : LoginFail) => {\n            console.error(\"login fail => \" + err);\n            uni.showModal({\n              title: '登录失败',\n              content: JSON.parseObject(err.cause?.cause?.message ?? \"\")?.getString(\"errorDesc\") ?? err.errMsg,\n              showCancel: false\n            });\n          }\n        } as LoginOptions);\n      }\n    }\n  }\n</script>\n\n<style>\n\n</style>\n\n```"
  },
  "getFacialRecognitionMetaInfo": {
    "name": "## uni.getFacialRecognitionMetaInfo() @getfacialrecognitionmetainfo",
    "description": "获取阿里云实人认证meta info",
    "compatibility": "### getFacialRecognitionMetaInfo  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | 3.9 | 4.11 |\n",
    "param": "",
    "returnValue": "### 返回值  兼容性 \n\n| 类型 |\n| :- |\n| string |\n \n",
    "tutorial": "\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=getFacialRecognitionMetaInfo&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=getFacialRecognitionMetaInfo&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=getFacialRecognitionMetaInfo&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=getFacialRecognitionMetaInfo&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=getFacialRecognitionMetaInfo&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=getFacialRecognitionMetaInfo)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=getFacialRecognitionMetaInfo&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.loginVerify.facialRecognitionMetaInfo.getFacialRecognitionMetaInfo)"
  },
  "startFacialRecognitionVerify": {
    "name": "## uni.startFacialRecognitionVerify(faceStyle) @startfacialrecognitionverify",
    "description": "启动人脸识别",
    "compatibility": "### startFacialRecognitionVerify  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | 3.9 | 4.11 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| faceStyle | [StartFacialRecognitionVerifyOptions](#startfacialrecognitionverifyoptions-values) | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| certifyId | string | 是 | - | - | certifyId 调用实人认证的id |\n@| progressBarColor | string \\| null | 否 | - | - | 活体检测页面的进度条颜色。 |\n@| screenOrientation | \"land\" \\| \"port\" | 否 | \"port\" | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"-\",\"3.9\",\"4.11\"]]}' /> | 认证时屏幕方向<br/>- land  横屏<br/>- port  竖屏 |\n@| success | (res: [StartFacialRecognitionVerifySuccess](#startfacialrecognitionverifysuccess-values)) => void \\| null | 否 | - | - | 成功回调 |\n@| fail | (res: [IFacialRecognitionVerifyError](#ifacialrecognitionverifyerror-values)) => void \\| null | 否 | - | - | 失败回调 |\n@| complete | (res: any) => void \\| null | 否 | - | - | 完成回调 | \n\n##### StartFacialRecognitionVerifySuccess 的属性值 @startfacialrecognitionverifysuccess-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errCode | number | 是 | - | - | 错误码 |\n| errSubject | string | 是 | - | - | 调用API的名称 |\n| errMsg | string | 是 | - | - | 错误的详细信息 |\n| cause | **SourceError** | 否 | - | - | 错误来源 |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| subject | string \\| null | 否 | - | - | 源错误模块名称 |\n@| message | string | 是 | - | - | 源错误描述信息 |\n@| code | number | 是 | - | - | 源错误的错误码 |\n@| name | string | 是 | - | - | - |\n@| cause | [Error](https://uniapp.dcloud.net.cn/tutorial/err-spec.html#unierror) \\| null | 否 | - | - |  |\n\n##### IFacialRecognitionVerifyError 的属性值 @ifacialrecognitionverifyerror-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errCode | 10010 \\| 10012 \\| 10011 \\| 10013 \\| 10020 \\| 10001 \\| 10002 | 是 | - | - | 错误码<br/>- 10001 certifyId 不能为空<br/>- 10002 \"当前设备不支持\"<br/>- 10010 刷脸异常<br/>- 10012 网络异常<br/>- 10011 验证中断<br/>- 10013 刷脸验证失败<br/>- 10020 设备设置时间异常 |\n| errSubject | string | 是 | - | - | 统一错误主题(模块)名称 |\n| data | any \\| null | 否 | - | - | 错误信息中包含的数据 |\n| cause | [Error](https://uniapp.dcloud.net.cn/tutorial/err-spec.html#unierror) \\| null | 否 | - | - | 源错误信息,可以包含多个错误,详见SourceError |\n| errMsg | string | 是 | - | - | - |\n",
    "returnValue": "",
    "tutorial": "\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=startFacialRecognitionVerify&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=startFacialRecognitionVerify&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=startFacialRecognitionVerify&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=startFacialRecognitionVerify&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=startFacialRecognitionVerify&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=startFacialRecognitionVerify)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=startFacialRecognitionVerify&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.loginVerify.facialRecognitionMetaInfo.startFacialRecognitionVerify)"
  },
  "facialRecognitionMetaInfo": {
    "example": "## 示例 \n> [hello uni-app x](https://gitcode.net/dcloud/hello-uni-app-x/-/blob/dev/pages/API/facial-recognition-meta-info/facial-recognition-meta-info.uvue) \n >\n> 该 API 不支持 Web,请运行 hello uni-app x 到 App 平台体验 \n```uvue\n<template>\n  <!-- #ifdef APP -->\n  <scroll-view class=\"page-scroll-view\">\n  <!-- #endif -->\n    <view>\n      <page-head :title=\"title\"></page-head>\n      <view class=\"uni-padding-wrap uni-common-mt\">\n        <view class=\"uni-btn-v uni-common-mt\">\n          <input class=\"uni-input\" type=\"text\" v-model=\"realName\" name=\"real-name\"\n            placeholder=\"姓名\" maxlength=\"-1\"/>\n        </view>\n        <view class=\"uni-btn-v uni-common-mt\">\n          <input class=\"uni-input\" type=\"text\" v-model=\"idCard\" name=\"id-card\"\n            placeholder=\"身份证号\" maxlength=\"-1\"/>\n        </view>\n        <view class=\"uni-btn-v uni-common-mt\">\n          <button type=\"primary\" @click=\"facialRecognition\">开始人脸识别</button>\n        </view>\n      </view>\n    </view>\n  <!-- #ifdef APP -->\n  </scroll-view>\n  <!-- #endif -->\n</template>\n\n<script>\n  export default {\n    data() {\n      return {\n        title: '实人认证',\n        realName: '',\n        idCard: ''\n      }\n    },\n    onReady() {\n    },\n    methods: {\n      facialRecognition() {\n        const realName = this.realName.trim()\n        const idCard = this.idCard.trim()\n        if (realName == '' || idCard == '') {\n          uni.showModal({\n            title: '错误',\n            content: '姓名和身份证号不可为空',\n            showCancel: false\n          })\n          return\n        }\n        const testFacialCo = uniCloud.importObject('facial-recognition-co')\n        let metaInfo = uni.getFacialRecognitionMetaInfo();\n        testFacialCo.getCertifyId({\n          realName,\n          idCard,\n          metaInfo\n        })\n          .then((res : UTSJSONObject) : Promise<string> => {\n            const certifyId = res['certifyId'] as string\n            return new Promise((\n              resolve : (res : string) => void,\n              reject : (err : Error) => void\n            ) => {\n              uni.startFacialRecognitionVerify({\n                certifyId,\n                success() {\n                  resolve(certifyId)\n                },\n                fail(err) {\n                  reject(new Error(err.errMsg))\n                }\n              })\n            })\n          })\n          .then((certifyId : string) : Promise<UTSJSONObject> => {\n            return testFacialCo.getAuthResult(certifyId)\n          })\n          .then((res : UTSJSONObject) => {\n            console.log('res', res)\n          })\n          .catch((err : any | null) => {\n            console.error('error', err)\n          })\n      }\n    }\n  }\n</script>\n\n<style>\n</style>\n\n```"
  },
  "createRewardedVideoAd": {
    "name": "## uni.createRewardedVideoAd(option) @createrewardedvideoad",
    "description": "创建激励视频广告对象",
    "compatibility": "### createRewardedVideoAd  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | 4.0 | 4.22 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| option | **CreateRewardedVideoAdOptions** | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| adpid | string | 是 | - | - | 广告位 id |\n@| urlCallback | **UrlCallbackOptions** \\| null | 否 | - | - | 服务器回调透传参数 |\n@@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@@| :- | :- | :- | :- |  :-: | :- |\n@@| userId | string \\| null | 否 | - | - | 透传到服务器端的userId |\n@@| extra | string \\| null | 否 | - | - | 透传到服务器端的extra,不推荐设置过于复杂的字符串 | \n",
    "returnValue": "### 返回值  兼容性 \n\n| 类型 |\n| :- |\n| [RewardedVideoAd](#rewardedvideoad-values) |\n\n#### RewardedVideoAd 的方法 @rewardedvideoad-values \n\n#### show() @show\n广告加载成功之后,调用此方法展示广告\n##### show  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n\n##### 返回值  兼容性 \n\n| 类型 |\n| :- |\n| Promise\\<any> |\n \n\n#### load() @load\n加载广告\n##### load  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n\n##### 返回值  兼容性 \n\n| 类型 |\n| :- |\n| Promise\\<any> |\n \n\n#### destroy() @destroy\n销毁广告\n##### destroy  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n\n\n#### onLoad(callback) @onload\n绑定广告 load 事件的监听器\n##### onLoad  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| callback | (result: any) => void | 是 | - | - | - | \n\n\n#### offLoad(callback) @offload\n解除绑定 load 事件的监听器\n##### offLoad  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| callback | (result: any) => void | 是 | - | - | - | \n\n\n#### onError(callback) @onerror\n绑定 error 事件的监听器\n##### onError  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| callback | (result: [IUniAdError](#iuniaderror-values)) => void | 是 | - | - | - | \n\n###### IUniAdError 的属性值 @iuniaderror-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errCode | number | 是 | - | - | 错误码<br/>- -5001 广告位标识adpid为空,请传入有效的adpid<br/>- -5002 无效的广告位标识adpid,请使用正确的adpid<br/>- -5003 广告位未开通广告,请在广告平台申请并确保已审核通过<br/>- -5004 无广告模块,打包时请配置要使用的广告模块<br/>- -5005 广告加载失败,请稍后重试<br/>- -5006 广告已经展示过了,请重新加载<br/>- -5007 广告不可用或已过期,请重新请求<br/>- -5008 广告不可用或已过期,请重新请求<br/>- -5009 广告类型不符,请检查后再试<br/>- -5011 打包或开通的渠道,不支持此类型广告<br/>- -5013 广告播放失败,请重新加载 |\n| errSubject | string | 是 | - | - | 统一错误主题(模块)名称 |\n| data | any \\| null | 否 | - | - | 错误信息中包含的数据 |\n| cause | [Error](https://uniapp.dcloud.net.cn/tutorial/err-spec.html#unierror) \\| null | 否 | - | - | 源错误信息,可以包含多个错误,详见SourceError |\n| errMsg | string | 是 | - | - | - |\n\n\n#### offError(callback) @offerror\n解除绑定 error 事件的监听器\n##### offError  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| callback | (result: [IUniAdError](#iuniaderror-values)) => void | 是 | - | - | - | \n\n\n#### onClose(callback) @onclose\n绑定 close 事件的监听器\n##### onClose  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| callback | (result: [VideoAdClose](#videoadclose-values)) => void | 是 | - | - | - | \n\n###### VideoAdClose 的属性值 @videoadclose-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| isEnded | boolean | 是 | - | - | true标识广告播放完毕或者达到发放奖励的条件 |\n\n\n#### offClose(callback) @offclose\n解除绑定 close 事件的监听器\n##### offClose  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| callback | (result: [VideoAdClose](#videoadclose-values)) => void | 是 | - | - | - | \n\n\n#### onAdClicked(callback) @onadclicked\n绑定广告可点击屏幕区域事件的监听器\n##### onAdClicked  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| callback | (result: any) => void | 是 | - | - | - | \n\n\n#### onVerify(callback) @onverify\n绑定 verify 事件的监听器\n##### onVerify  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| callback | (result: [UTSJSONObject](/uts/buildin-object-api/utsjsonobject.md)) => void | 是 | - | - | - | \n\n \n",
    "tutorial": "\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=createRewardedVideoAd&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=createRewardedVideoAd&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=createRewardedVideoAd&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=createRewardedVideoAd&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=createRewardedVideoAd&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=createRewardedVideoAd)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=createRewardedVideoAd&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.ad.createRewardedVideoAd)",
    "example": "### 示例 \n> [hello uni-app x](https://gitcode.net/dcloud/hello-uni-app-x/-/blob/dev/pages/API/create-rewarded-video-ad/create-rewarded-video-ad.uvue) \n >\n> 该 API 不支持 Web,请运行 hello uni-app x 到 App 平台体验 \n```uvue\n<template>\n  <page-head title=\"激励视频广告\"></page-head>\n  <button :type=\"btnType\" style=\"margin: 10px;\" :disabled=\"btnDisable\" @click=\"showAd()\">{{btnText}}</button>\n</template>\n\n<script>\n  export default {\n    data() {\n      return {\n        btnText: \"\",\n        btnType: \"primary\",\n        btnDisable: false,\n        rewardAd: null as RewardedVideoAd | null,\n        isAdLoadSuccess: false\n      }\n    },\n    onReady() {\n      this.loadAd()\n    },\n    methods: {\n      loadAd() {\n        if (this.btnDisable)\n          return\n        this.btnDisable = true\n        this.btnText = \"正在加载广告\"\n        this.btnType = \"primary\"\n        if (this.rewardAd == null) {\n          this.rewardAd = uni.createRewardedVideoAd({\n            adpid: \"1507000689\" //此处为测试广告位,实际开发中请在uni-ad后台申请自己的广告位后替换\n          })\n          this.rewardAd!.onError((_) => {\n            this.btnType = \"warn\"\n            this.btnText = \"广告加载失败,点击重试\"\n            this.btnDisable = false\n          })\n          this.rewardAd!.onLoad((_) => {\n            this.btnType = \"primary\"\n            this.btnText = \"广告加载成功,点击观看\"\n            this.btnDisable = false\n            this.isAdLoadSuccess = true\n          })\n          this.rewardAd!.onClose((e) => {\n            // 测试广告位无法通过服务器回调。实际开发中,使用自己的广告位后,需参考uni-ad文档编写服务器回调的代码,在服务端发放奖励\n            this.isAdLoadSuccess = false\n            uni.showToast({\n              title: \"激励视频\" + (e.isEnded ? \"\" : \"未\") + \"播放完毕\",\n              position: \"bottom\"\n            })\n            this.loadAd()\n          })\n        }\n        this.rewardAd!.load()\n      },\n      showAd() {\n        if (this.isAdLoadSuccess) {\n          this.rewardAd!.show()\n        } else {\n          this.loadAd()\n        }\n      }\n    }\n  }\n</script>\n\n<style>\n\n</style>\n\n```"
  },
  "requestPayment": {
    "name": "## uni.requestPayment(options) @requestpayment",
    "description": "请求支付",
    "compatibility": "### requestPayment  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| x | 4.02 | 4.18 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | [RequestPaymentOptions](#requestpaymentoptions-values) | 是 | - | - |  |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| provider | string | 是 | - | - | 支付服务提供商,通过 [uni.getProvider](https://doc.dcloud.net.cn/uni-app-x/api/get-provider.html) 获取,目前支持支付宝支付(alipay),微信支付(wxpay) |\n@| orderInfo | string | 是 | - | - | 订单数据 |\n@| success | (result: [RequestPaymentSuccess](#requestpaymentsuccess-values)) => void \\| null | 否 | - | - | 接口调用成功的回调函数 |\n@| fail | (result: [IRequestPaymentFail](#irequestpaymentfail-values)) => void \\| null | 否 | - | - | 接口调用失败的回调函数 |\n@| complete | (result: any) => void \\| null | 否 | - | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n##### RequestPaymentSuccess 的属性值 @requestpaymentsuccess-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| data | any \\| null | 否 | - | - |  |\n\n##### IRequestPaymentFail 的属性值 @irequestpaymentfail-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errCode | 700600 \\| 701100 \\| 701110 \\| 700601 \\| 700602 \\| 700603 \\| 700000 \\| 700604 \\| 700800 \\| 700801 | 是 | - | - | 错误码<br/>- 700600  正在处理中,支付结果未知(有可能已经支付成功),请查询商家订单列表中订单的支付状态<br/>- 701100  订单支付失败。<br/>- 701110  重复请求。<br/>- 700601  用户中途取消。<br/>- 700602  网络连接出错。<br/>- 700603  支付结果未知(有可能已经支付成功),请查询商家订单列表中订单的支付状态。<br/>- 700000  其它支付错误。<br/>- 700604  微信没有安装。<br/>- 700800  没有配置对应的URL Scheme。<br/>- 700801  没有配置对应的universal Link。 |\n| errSubject | string | 是 | - | - | 统一错误主题(模块)名称 |\n| data | any \\| null | 否 | - | - | 错误信息中包含的数据 |\n| cause | [Error](https://uniapp.dcloud.net.cn/tutorial/err-spec.html#unierror) \\| null | 否 | - | - | 源错误信息,可以包含多个错误,详见SourceError |\n| errMsg | string | 是 | - | - | - |\n",
    "returnValue": "",
    "tutorial": "\n### 参见\n\n- [参见uni-app相关文档](https://uniapp.dcloud.net.cn/api/plugins/payment.html)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=requestPayment&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=requestPayment&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=requestPayment&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=requestPayment&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=requestPayment&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=requestPayment)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=requestPayment&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.payment.requestPayment)",
    "example": "### 示例 \n> [hello uni-app x](https://gitcode.net/dcloud/hello-uni-app-x/-/blob/dev/pages/API/request-payment/request-payment.uvue) \n ::: preview https://hellouniappx.dcloud.net.cn/web/#/pages/API/request-payment/request-payment\n>Template\n```vue\n<template>\r\n\t<page-head title=\"发起支付\"></page-head>\r\n\r\n\t<template v-if=\"providerList.length > 0\">\r\n\t\t<button style=\"margin-top: 20px;\" type=\"primary\" v-for=\"(item,index) in providerList\" :key=\"index\"\r\n\t\t\t@click=\"requestPayment(item)\">{{item.name}}支付</button>\r\n\t</template>\r\n</template>\r\n\r\n\r\n\r\n<style>\r\n\r\n</style>\n\n```\n>Script\n```uts\n\r\n\texport type PayItem = { id : string, name : string, provider ?: UniProvider }\r\n\texport default {\r\n\t\tdata() {\r\n\t\t\treturn {\r\n\t\t\t\tbtnText: \"支付宝支付\",\r\n\t\t\t\tbtnType: \"primary\",\r\n\t\t\t\torderInfo: \"\",\r\n\t\t\t\terrorCode: 0,\r\n\t\t\t\terrorMsg: \"\",\r\n\t\t\t\tcomplete: false,\r\n\t\t\t\tproviderList: [] as PayItem[]\r\n\t\t\t}\r\n\t\t},\r\n\t\tonLoad: function () {\r\n\t\t\tuni.getProvider({\r\n\t\t\t\tservice: \"payment\",\r\n\t\t\t\tsuccess: (e) => {\r\n\t\t\t\t\tconsole.log(\"payment success:\" + JSON.stringify(e));\r\n\t\t\t\t\tlet array = e.provider as string[]\r\n\t\t\t\t\tarray.forEach((value : string) => {\r\n\t\t\t\t\t\tswitch (value) {\r\n\t\t\t\t\t\t\tcase 'alipay':\r\n\t\t\t\t\t\t\t\tthis.providerList.push({\r\n\t\t\t\t\t\t\t\t\tname: '支付宝',\r\n\t\t\t\t\t\t\t\t\tid: \"alipay\",\r\n\t\t\t\t\t\t\t\t\tprovider: e.providers.find((item) : boolean => {\r\n\t\t\t\t\t\t\t\t\t\treturn item.id == 'alipay'\r\n\t\t\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t\t} as PayItem);\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\tcase 'wxpay':\r\n\t\t\t\t\t\t\t\tthis.providerList.push({\r\n\t\t\t\t\t\t\t\t\tname: '微信',\r\n\t\t\t\t\t\t\t\t\tid: \"wxpay\",\r\n\t\t\t\t\t\t\t\t\tprovider: e.providers.find((item) : boolean => {\r\n\t\t\t\t\t\t\t\t\t\treturn item.id == 'wxpay'\r\n\t\t\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t\t} as PayItem);\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t})\r\n\t\t\t\t},\r\n\t\t\t\tfail: (e) => {\r\n\t\t\t\t\tconsole.log(\"获取支付通道失败:\", e);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t},\r\n\t\tmethods: {\r\n\t\t\trequestPayment(e : PayItem) {\r\n\t\t\t\tconst provider = e.id\r\n\t\t\t\tif (provider == \"alipay\") {\r\n\t\t\t\t\tthis.payAli()\r\n\t\t\t\t} else if (provider == \"wxpay\") {\n\r\n\t\t\t\t\tif (e.provider != null && e.provider?.isAppExist==false) {\r\n\t\t\t\t\t\tuni.showToast({\r\n\t\t\t\t\t\t\ttitle: \"微信没有安装\",\n\t\t\t\t\t\t\ticon:'error'\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthis.payWX()\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tpayAli() {\r\n\t\t\t\tuni.showLoading({\r\n\t\t\t\t\ttitle: \"请求中...\"\r\n\t\t\t\t})\r\n\t\t\t\tuni.request({\r\n\t\t\t\t\turl: 'https://demo.dcloud.net.cn/payment/alipay/?total=0.01',\r\n\t\t\t\t\tmethod: 'GET',\r\n\t\t\t\t\ttimeout: 6000,\r\n\t\t\t\t\tsuccess: (res) => {\r\n\t\t\t\t\t\tthis.orderInfo = JSON.stringify(res.data);\r\n\t\t\t\t\t\tconsole.log(\"====\" + this.orderInfo)\r\n\t\t\t\t\t\tuni.hideLoading()\r\n\t\t\t\t\t\tuni.requestPayment({\r\n\t\t\t\t\t\t\tprovider: \"alipay\",\r\n\t\t\t\t\t\t\torderInfo: res.data as string,\r\n\t\t\t\t\t\t\tfail: (res) => {\r\n\t\t\t\t\t\t\t\tconsole.log(JSON.stringify(res))\r\n\t\t\t\t\t\t\t\tthis.errorCode = res.errCode\r\n\t\t\t\t\t\t\t\tuni.showToast({\r\n\t\t\t\t\t\t\t\t\ticon: 'error',\r\n\t\t\t\t\t\t\t\t\ttitle: 'errorCode:' + this.errorCode\r\n\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tsuccess: (res) => {\r\n\t\t\t\t\t\t\t\tconsole.log(JSON.stringify(res))\r\n\t\t\t\t\t\t\t\tuni.showToast({\r\n\t\t\t\t\t\t\t\t\ticon: 'success',\r\n\t\t\t\t\t\t\t\t\ttitle: '支付成功'\r\n\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t},\r\n\t\t\t\t\tfail: (e) => {\r\n\t\t\t\t\t\tconsole.log(e)\r\n\t\t\t\t\t\tuni.hideLoading()\r\n\t\t\t\t\t},\r\n\t\t\t\t});\r\n\t\t\t},\r\n\t\t\tpayWX() {\r\n\t\t\t\tuni.showLoading({\r\n\t\t\t\t\ttitle: \"请求中...\"\r\n\t\t\t\t})\r\n\t\t\t\tlet url = 'https://demo.dcloud.net.cn/payment/wxpayv3.__UNI__uniappx/?total=0.01'\r\n\t\t\t\tconst res = uni.getAppBaseInfo();\n\t\t\t\tlet packageName:string | null\n\n\t\t\t\t// #ifdef APP-ANDROID\n\t\t\t\tpackageName = res.packageName\n\t\t\t\t// #endif\n\n\t\t\t\t// #ifdef APP-IOS\n\t\t\t\tpackageName = res.bundleId\n\t\t\t\t// #endif\n\n\t\t\t\tif (packageName == 'io.dcloud.hellouniappx') {//hello uniappx\n\t\t\t\t  url = 'https://demo.dcloud.net.cn/payment/wxpayv3.__UNI__HelloUniAppX/?total=0.01'\n\t\t\t\t}\r\n\t\t\t\tuni.request({\r\n\t\t\t\t\turl: url,\r\n\t\t\t\t\tmethod: 'GET',\r\n\t\t\t\t\ttimeout: 6000,\r\n\t\t\t\t\theader: {\r\n\t\t\t\t\t\t\"Content-Type\": \"application/json\"\r\n\t\t\t\t\t} as UTSJSONObject,\r\n\t\t\t\t\tsuccess: (res) => {\r\n\t\t\t\t\t\tconsole.log(res.data)\r\n\t\t\t\t\t\tuni.hideLoading()\r\n\t\t\t\t\t\tuni.requestPayment({\r\n\t\t\t\t\t\t\tprovider: \"wxpay\",\r\n\t\t\t\t\t\t\torderInfo: JSON.stringify(res.data),\r\n\t\t\t\t\t\t\tfail: (res) => {\r\n\t\t\t\t\t\t\t\tconsole.log(JSON.stringify(res))\r\n\t\t\t\t\t\t\t\tthis.errorCode = res.errCode\r\n\t\t\t\t\t\t\t\tuni.showToast({\r\n\t\t\t\t\t\t\t\t\tduration: 5000,\r\n\t\t\t\t\t\t\t\t\ticon: 'error',\r\n\t\t\t\t\t\t\t\t\ttitle: 'errorCode:' + this.errorCode,\r\n\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tsuccess: (res) => {\r\n\t\t\t\t\t\t\t\tconsole.log(JSON.stringify(res))\r\n\t\t\t\t\t\t\t\tuni.showToast({\r\n\t\t\t\t\t\t\t\t\tduration: 5000,\r\n\t\t\t\t\t\t\t\t\ticon: 'success',\r\n\t\t\t\t\t\t\t\t\ttitle: '支付成功'\r\n\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t},\r\n\t\t\t\t\tfail: (res) => {\r\n\t\t\t\t\t\tuni.hideLoading()\r\n\t\t\t\t\t\tconsole.log(res)\r\n\t\t\t\t\t},\r\n\t\t\t\t});\r\n\t\t\t},\r\n\r\n\t\t\t//自动化测试使用\r\n\t\t\tjest_pay() {\r\n\t\t\t\tuni.requestPayment({\r\n\t\t\t\t\tprovider: \"alipay\",\r\n\t\t\t\t\torderInfo: this.orderInfo,\r\n\t\t\t\t\tfail: (res : RequestPaymentFail) => {\r\n\t\t\t\t\t\tthis.errorCode = res.errCode\r\n\t\t\t\t\t\tthis.complete = true\r\n\t\t\t\t\t},\r\n\t\t\t\t\tsuccess: (res : RequestPaymentSuccess) => {\r\n\t\t\t\t\t\tconsole.log(JSON.stringify(res))\r\n\t\t\t\t\t\tthis.complete = true\r\n\t\t\t\t\t}\r\n\t\t\t\t} as RequestPaymentOptions)\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\n```\n:::"
  },
  "canvasToTempFilePath": {
    "name": "## uni.canvasToTempFilePath(options, componentInstance) @canvastotempfilepath",
    "description": "把当前画布指定区域的内容导出生成指定大小的图片<br/>",
    "compatibility": "### canvasToTempFilePath  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | x | x |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | [CanvasToTempFilePathOptions](#canvastotempfilepathoptions-values) | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| x | number \\| null | 否 | - | - | 画布x轴起点(默认0) |\n@| y | number \\| null | 否 | - | - | 画布y轴起点(默认0) |\n@| width | number \\| null | 否 | - | - | 画布宽度(默认为canvas宽度-x) |\n@| height | number \\| null | 否 | - | - | 画布高度(默认为canvas高度-y) |\n@| destWidth | number \\| null | 否 | - | - | 输出图片宽度(默认为 width * 屏幕像素密度) |\n@| destHeight | number \\| null | 否 | - | - | 输出图片高度(默认为 height * 屏幕像素密度) |\n@| canvasId | string | 是 | - | - | 画布标识,传入 \\<canvas/> 的 canvas-id |\n@| fileType | string \\| null | 否 | - | - | 目标文件的类型,默认为 'png' |\n@| quality | number \\| null | 否 | - | - | 图片的质量,取值范围为 (0, 1],不在范围内时当作1.0处理 |\n@| success | (result: [CanvasToTempFilePathSuccess](#canvastotempfilepathsuccess-values)) => void \\| null | 否 | - | - | 接口调用成功的回调函数 |\n@| fail | (result: [UniError](https://uniapp.dcloud.net.cn/tutorial/err-spec.html#unierror)) => void \\| null | 否 | - | - | 接口调用失败的回调函数 |\n@| complete | (result: any) => void \\| null | 否 | - | - | 接口调用结束的回调函数(调用成功、失败都会执行) |\n| componentInstance | any | 是 | - | - | - | \n\n##### CanvasToTempFilePathSuccess 的属性值 @canvastotempfilepathsuccess-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| tempFilePath | string | 是 | - | - | 导出生成的图片路径 |\n",
    "returnValue": "",
    "tutorial": "\n### 参见\n - [参见uni-app相关文档](https://uniapp.dcloud.io/api/canvas/canvasToTempFilePath.html)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=canvasToTempFilePath&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=canvasToTempFilePath&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=canvasToTempFilePath&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=canvasToTempFilePath&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=canvasToTempFilePath&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=canvasToTempFilePath)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=canvasToTempFilePath&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.canvas.canvasToTempFilePath)"
  },
  "canvasGetImageData": {
    "name": "## uni.canvasGetImageData(options) @canvasgetimagedata",
    "description": "描述 canvas 区域隐含的像素数据",
    "compatibility": "### canvasGetImageData  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | x | x |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | [CanvasGetImageDataOptions](#canvasgetimagedataoptions-values) | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| canvasId | string | 是 | - | - | 画布标识,传入 \\<canvas/> 的 canvas-id |\n@| x | number \\| null | 否 | - | - | 将要被提取的图像数据矩形区域的左上角 x 坐标 |\n@| y | number \\| null | 否 | - | - | 将要被提取的图像数据矩形区域的左上角 y 坐标 |\n@| width | number \\| null | 否 | - | - | 将要被提取的图像数据矩形区域的宽度 |\n@| height | number \\| null | 否 | - | - | 将要被提取的图像数据矩形区域的高度 |\n@| success | (result: [CanvasGetImageDataSuccess](#canvasgetimagedatasuccess-values)) => void \\| null | 否 | - | - | 接口调用成功的回调函数 |\n@| fail | (result: [UniError](https://uniapp.dcloud.net.cn/tutorial/err-spec.html#unierror)) => void \\| null | 否 | - | - | 接口调用失败的回调函数 |\n@| complete | (result: any) => void \\| null | 否 | - | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n##### CanvasGetImageDataSuccess 的属性值 @canvasgetimagedatasuccess-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errMsg | string | 是 | - | - | 回调信息 |\n| width | number | 是 | - | - | 图像数据矩形的宽度 |\n| height | number | 是 | - | - | 图像数据矩形的高度 |\n| data | Array\\<any\\> | 是 | - | - | 图像像素点数据,一维数组,每四项表示一个像素点的rgba |\n",
    "returnValue": "",
    "tutorial": "\n### 参见\n - [参见uni-app相关文档](https://uniapp.dcloud.io/api/canvas/canvasGetImageData.html)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=canvasGetImageData&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=canvasGetImageData&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=canvasGetImageData&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=canvasGetImageData&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=canvasGetImageData&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=canvasGetImageData)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=canvasGetImageData&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.canvas.canvasGetImageData)"
  },
  "canvasPutImageData": {
    "name": "## uni.canvasPutImageData(options) @canvasputimagedata",
    "description": "将像素数据绘制到画布",
    "compatibility": "### canvasPutImageData  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | x | x |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | **CanvasPutImageDataOptions** | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| canvasId | string | 是 | - | - | 画布标识,传入 \\<canvas/> 的 canvas-id |\n@| data | Array\\<any\\> \\| null | 否 | - | - | 图像像素点数据,一维数组,每四项表示一个像素点的rgba |\n@| x | number \\| null | 否 | - | - | 源图像数据在目标画布中的位置偏移量(x 轴方向的偏移量) |\n@| y | number \\| null | 否 | - | - | 源图像数据在目标画布中的位置偏移量(y 轴方向的偏移量) |\n@| width | number \\| null | 否 | - | - | 源图像数据矩形区域的宽度 |\n@| height | number \\| null | 否 | - | - | 源图像数据矩形区域的高度 |\n@| success | (result: CanvasPutImageDataSuccess) => void \\| null | 否 | - | - | 接口调用成功的回调函数 |\n@| fail | (result: [UniError](https://uniapp.dcloud.net.cn/tutorial/err-spec.html#unierror)) => void \\| null | 否 | - | - | 接口调用失败的回调函数 |\n@| complete | (result: any) => void \\| null | 否 | - | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n",
    "returnValue": "",
    "tutorial": "\n### 参见\n - [参见uni-app相关文档](https://uniapp.dcloud.io/api/canvas/canvasPutImageData.html)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=canvasPutImageData&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=canvasPutImageData&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=canvasPutImageData&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=canvasPutImageData&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=canvasPutImageData&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=canvasPutImageData)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=canvasPutImageData&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.canvas.canvasPutImageData)"
  },
  "createWebviewContext": {
    "name": "## uni.createWebviewContext(webviewId, component?) @createwebviewcontext",
    "description": "创建 web-view 组件的上下文对象,用于操作 web-view 的行为。",
    "compatibility": "### createWebviewContext  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| x | 3.9.0 | 4.11 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| webviewId | [string.WebviewIdString](/uts/data-type.md#ide-string) | 是 | - | - | - |\n| component | ComponentPublicInstance \\| null | 否 | - | - |  | \n",
    "returnValue": "### 返回值  兼容性 \n\n| 类型 | 必备 |\n| :- | :- |\n| [WebviewContext](#webviewcontext-values) \\| null | 否 |\n\n#### WebviewContext 的方法 @webviewcontext-values \n\n#### back() @back\n后退到 web-view 组件网页加载历史的上一页,如果不存在上一页则没有任何效果。\n##### back  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | 3.9.0 | 4.11 |\n\n\n\n#### forward() @forward\n前进到 web-view 组件网页加载历史的下一页,如果不存在下一页则没有任何效果。\n##### forward  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | 3.9.0 | 4.11 |\n\n\n\n#### reload() @reload\n重新加载 web-view 组件当前页面。\n##### reload  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | 3.9.0 | 4.11 |\n\n\n\n#### stop() @stop\n停止加载 web-view 组件当前网页,该方法不能阻止已经加载的 html 文档,但是能够阻止未完成的图片及延迟加载的资源。\n##### stop  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | 3.9.0 | 4.11 |\n\n\n\n#### evalJS(js) @evaljs\n在网页中执行指定的js脚本,在 uvue 页面中可通过此方法向 web-view 组件加载的页面发送数据\n##### evalJS  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | 3.9.0 | 4.11 |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| js | string | 是 | - | - | - | \n\n \n",
    "tutorial": "\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=createWebviewContext&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=createWebviewContext&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=createWebviewContext&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=createWebviewContext&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=createWebviewContext&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=createWebviewContext)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=createWebviewContext&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.component.createWebviewContext)"
  },
  "createVideoContext": {
    "name": "## uni.createVideoContext(videoId, component?) @createvideocontext",
    "description": "创建并返回 video 上下文 videoContext 对象",
    "compatibility": "### createVideoContext  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | √ | 4.11 |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| videoId | [string.VideoIdString](/uts/data-type.md#ide-string) | 是 | - | - | - |\n| component | ComponentPublicInstance \\| null | 否 | - | - |  | \n",
    "returnValue": "### 返回值  兼容性 \n\n| 类型 | 必备 |\n| :- | :- |\n| [VideoContext](#videocontext-values) \\| null | 否 |\n\n#### VideoContext 的方法 @videocontext-values \n\n#### play() @play\n播放\n##### play  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.9.0 | 4.11 |\n\n\n\n#### pause() @pause\n暂停\n##### pause  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.9.0 | 4.11 |\n\n\n\n#### seek(position) @seek\n跳转到指定位置\n##### seek  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.9.0 | 4.11 |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| position | number | 是 | - | - | 跳转到指定位置(秒) | \n\n\n#### stop() @stop\n停止视频\n##### stop  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.9.0 | 4.11 |\n\n\n\n#### sendDanmu(danmu) @senddanmu\n发送弹幕\n##### sendDanmu  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.9.0 | 4.11 |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| danmu | **Danmu** | 是 | - | - | text, color |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| text | string \\| null | 否 | - | - | 弹幕文字 |\n@| color | string \\| null | 否 | - | - | 弹幕颜色 |\n@| time | number \\| null | 否 | - | - | 显示时刻 | \n\n\n#### playbackRate(rate) @playbackrate\n设置倍速播放\n##### playbackRate  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.9.0 | 4.11 |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| rate | number | 是 | - | - | , 支持倍率 0.5/0.8/1.0/1.25/1.5 | \n\n\n#### requestFullScreen(direction?) @requestfullscreen\n进入全屏\n##### requestFullScreen  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.9.0 | 4.11 |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| direction | **RequestFullScreenOptions** | 否 | - | - | , 0\\|正常竖向, 90\\|屏幕逆时针90度, -90\\|屏幕顺时针90度 |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| direction | number \\| null | 否 | - | <CompatibilityTable table='{\"headers\":[{\"title\":\"Web\"},{\"title\":\"Android\"},{\"title\":\"iOS\"}],\"rows\":[[\"x\",\"3.9.0\",\"4.11\"]]}' /> | direction<br/>- 0: 正常竖向<br/>- 90: 屏幕逆时针90度<br/>- -90: 屏幕顺时针90度 | \n\n\n#### exitFullScreen() @exitfullscreen\n退出全屏\n##### exitFullScreen  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | 3.9.0 | 4.11 |\n\n\n \n",
    "tutorial": "\n### 参见\n\n- [参见uni-app相关文档](http://uniapp.dcloud.io/api/media/video-context?id=createVideoContext)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=createVideoContext&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=createVideoContext&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=createVideoContext&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=createVideoContext&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=createVideoContext&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=createVideoContext)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=createVideoContext&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.component.createVideoContext)"
  },
  "createMapContext": {
    "name": "## uni.createMapContext(mapId, currentComponent?) @createmapcontext",
    "description": "创建并返回 map 上下文 mapContext 对象<br/>",
    "compatibility": "### createMapContext  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | x | x |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| mapId | string | 是 | - | - | - |\n| currentComponent | ComponentPublicInstance | 否 | - | - | - | \n",
    "returnValue": "### 返回值  兼容性 \n\n| 类型 |\n| :- |\n| [MapContext](#mapcontext-values) |\n\n#### MapContext 的方法 @mapcontext-values \n\n#### getCenterLocation(options) @getcenterlocation\n获取当前地图中心的经纬度,返回的是 gcj02 坐标系,可以用于 uni.openLocation\n##### getCenterLocation  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | [MapContextGetCenterLocationOptions](#mapcontextgetcenterlocationoptions-values) | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| success | (result: [LocationObject](#locationobject-values)) => void | 否 | - | - | 接口调用成功的回调函数 ,res = { longitude: \"经度\", latitude: \"纬度\"} |\n@| fail | (result: any) => void | 否 | - | - | 接口调用失败的回调函数 |\n@| complete | (result: any) => void | 否 | - | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n###### LocationObject 的属性值 @locationobject-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| latitude | number | 是 | - | - | 纬度,浮点数,范围为-90~90,负数表示南纬 |\n| longitude | number | 是 | - | - | 经度,范围为-180~180,负数表示西经 |\n\n\n#### moveToLocation(options) @movetolocation\n将地图中心移动到当前定位点,需要配合map组件的show-location使用\n##### moveToLocation  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | **MapContextMoveToLocationOptions** | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| latitude | number | 否 | - | - | 纬度,浮点数,范围为-90~90,负数表示南纬 |\n@| longitude | number | 否 | - | - | 经度,范围为-180~180,负数表示西经 |\n@| success | (result: any) => void | 否 | - | - | 接口调用成功的回调函数 |\n@| fail | (result: any) => void | 否 | - | - | 接口调用失败的回调函数 |\n@| complete | (result: any) => void | 否 | - | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n\n#### translateMarker(options) @translatemarker\n平移marker,带动画\n##### translateMarker  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | [MapContextTranslateMarkerOptions](#mapcontexttranslatemarkeroptions-values) | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| markerId | number | 是 | - | - | 指定marker |\n@| destination | [LocationObject](#locationobject-values) | 是 | - | - | 指定marker移动到的目标点 |\n@| autoRotate | boolean | 否 | - | - | 移动过程中是否自动旋转marker |\n@| rotate | number | 否 | - | - | marker的旋转角度 |\n@| moveWithRotate | boolean | 否 | - | - | 平移和旋转同时进行,默认值false(仅微信小程序2.13.0支持) |\n@| duration | number | 否 | - | - | 动画持续时长,默认值1000ms,平移与旋转分别计算 |\n@| success | (result: any) => void | 否 | - | - | 接口调用成功的回调函数 |\n@| fail | (result: any) => void | 否 | - | - | 接口调用失败的回调函数 |\n@| complete | (result: any) => void | 否 | - | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n###### MapContextTranslateMarkerOptions 的方法 @mapcontexttranslatemarkeroptions-values \n\n###### animationEnd(result) @animationend\n动画结束回调函数\n###### animationEnd  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| result | any | 是 | - | - | - | \n\n\n\n#### includePoints(options) @includepoints\n缩放视野展示所有经纬度\n##### includePoints  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | **MapContextIncludePointsOptions** | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| points | Array\\<[LocationObject](#locationobject-values)\\> | 是 | - | - | 要显示在可视区域内的坐标点列表,[{latitude, longitude}\\] |\n@| padding | Array\\<number\\> | 否 | - | - | 坐标点形成的矩形边缘到地图边缘的距离,单位像素。格式为\\[上,右,下,左]安卓上只能识别数组第一项,上下左右的padding一致。开发者工具暂不支持padding参数。 |\n@| success | (result: any) => void | 否 | - | - | 接口调用成功的回调函数 |\n@| fail | (result: any) => void | 否 | - | - | 接口调用失败的回调函数 |\n@| complete | (result: any) => void | 否 | - | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n\n#### getRegion(options) @getregion\n获取当前地图的视野范围\n##### getRegion  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | [MapContextGetRegionOptions](#mapcontextgetregionoptions-values) | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| success | (result: [MapContextGetRegionResult](#mapcontextgetregionresult-values)) => void | 否 | - | - | 接口调用成功的回调函数,res = {southwest, northeast},西南角与东北角的经纬度 |\n@| fail | (result: any) => void | 否 | - | - | 接口调用失败的回调函数 |\n@| complete | (result: any) => void | 否 | - | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n###### MapContextGetRegionResult 的属性值 @mapcontextgetregionresult-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| southwest | [LocationObject](#locationobject-values) | 是 | - | - | 西南角的经纬度 |\n| northeast | [LocationObject](#locationobject-values) | 是 | - | - | 东北角的经纬度 |\n\n\n#### getScale(options) @getscale\n获取当前地图的缩放级别\n##### getScale  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | [MapContextGetScaleOptions](#mapcontextgetscaleoptions-values) | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| success | (result: [MapContextGetScaleResult](#mapcontextgetscaleresult-values)) => void | 否 | - | - | 接口调用成功的回调函数,res = {scale} |\n@| fail | (result: any) => void | 否 | - | - | 接口调用失败的回调函数 |\n@| complete | (result: any) => void | 否 | - | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n###### MapContextGetScaleResult 的属性值 @mapcontextgetscaleresult-values \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| scale | number | 是 | - | - | 地图缩放级别 |\n\n\n#### addCustomLayer(options) @addcustomlayer\n添加个性化图层\n##### addCustomLayer  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | **MapContextAddCustomLayerOptions** | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| layerId | string | 是 | - | - | 个性化图层id |\n@| success | (result: any) => void | 否 | - | - | 接口调用成功的回调函数 |\n@| fail | (result: any) => void | 否 | - | - | 接口调用失败的回调函数 |\n@| complete | (result: any) => void | 否 | - | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n\n#### addGroundOverlay(options) @addgroundoverlay\n创建自定义图片图层,图片会随着地图缩放而缩放\n##### addGroundOverlay  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | **MapContextAddGroundOverlayOptions** | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| id | string | 是 | - | - | 图片图层 id |\n@| src | string | 是 | - | - | 图片路径,支持网络图片、临时路径、代码包路径 |\n@| bounds | **Bounds** | 是 | - | - | 图片覆盖的经纬度范围 |\n@@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@@| :- | :- | :- | :- |  :-: | :- |\n@@| southwest | [LocationObject](#locationobject-values) | 是 | - | - | 西南角的经纬度 |\n@@| northeast | [LocationObject](#locationobject-values) | 是 | - | - | 东北角的经纬度 |\n@| visible | boolean | 否 | - | - | 是否可见 |\n@| zIndex | number | 否 | - | - | 图层绘制顺序 |\n@| opacity | number | 否 | - | - | 图层透明度 |\n@| success | (result: any) => void | 否 | - | - | 接口调用成功的回调函数 |\n@| fail | (result: any) => void | 否 | - | - | 接口调用失败的回调函数 |\n@| complete | (result: any) => void | 否 | - | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n\n#### addMarkers(options) @addmarkers\n添加 marker\n##### addMarkers  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | **MapContextAddMarkersOptions** | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| markers | Array\\<any\\> | 是 | - | - | 同传入 map 组件的 marker 属性 |\n@| clear | boolean | 是 | - | - | 是否先清空地图上所有 marker |\n@| success | (result: any) => void | 否 | - | - | 接口调用成功的回调函数 |\n@| fail | (result: any) => void | 否 | - | - | 接口调用失败的回调函数 |\n@| complete | (result: any) => void | 否 | - | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n\n#### fromScreenLocation(options) @fromscreenlocation\n获取屏幕上的点对应的经纬度,坐标原点为地图左上角\n##### fromScreenLocation  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | **MapContextFromScreenLocationOptions** | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| x | number | 是 | - | - | x 坐标值 |\n@| y | number | 是 | - | - | y 坐标值 |\n@| success | (result: [LocationObject](#locationobject-values)) => void | 否 | - | - | 接口调用成功的回调函数 |\n@| fail | (result: any) => void | 否 | - | - | 接口调用失败的回调函数 |\n@| complete | (result: any) => void | 否 | - | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n\n#### initMarkerCluster(options) @initmarkercluster\n初始化点聚合的配置,未调用时采用默认配置\n##### initMarkerCluster  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | **MapContextInitMarkerClusterOptions** | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| enableDefaultStyle | boolean | 是 | - | - | 启用默认的聚合样式 |\n@| zoomOnClick | boolean | 是 | - | - | 点击已经聚合的标记点时是否实现聚合分离 |\n@| gridSize | number | 是 | - | - | 聚合算法的可聚合距离,即距离小于该值的点会聚合至一起,以像素为单位 |\n@| success | (result: any) => void | 否 | - | - | 接口调用成功的回调函数 |\n@| fail | (result: any) => void | 否 | - | - | 接口调用失败的回调函数 |\n@| complete | (result: any) => void | 否 | - | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n\n#### moveAlong(options) @movealong\n沿指定路径移动 marker,用于轨迹回放等场景。动画完成时触发回调事件,若动画进行中,对同一 marker 再次调用 moveAlong 方法,前一次的动画将被打断。\n##### moveAlong  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | **MapContextMoveAlongOptions** | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| markerId | number | 是 | - | - | 指定 marker |\n@| path | Array\\<[LocationObject](#locationobject-values)\\> | 是 | - | - | 移动路径的坐标串,坐标点格式 {longitude, latitude} |\n@| autoRotate | boolean | 否 | - | - | 根据路径方向自动改变 marker 的旋转角度 |\n@| duration | number | 是 | - | - | 平滑移动的时间 |\n@| success | (result: any) => void | 否 | - | - | 接口调用成功的回调函数 |\n@| fail | (result: any) => void | 否 | - | - | 接口调用失败的回调函数 |\n@| complete | (result: any) => void | 否 | - | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n\n#### openMapApp(options) @openmapapp\n拉起地图APP选择导航。\n##### openMapApp  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | **MapContextOpenMapAppOptions** | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| destination | string | 是 | - | - | 目的地名称 |\n@| latitude | number | 是 | - | - | 目的地纬度 |\n@| longitude | number | 是 | - | - | 目的地经度 |\n@| success | (result: any) => void | 否 | - | - | 接口调用成功的回调函数 |\n@| fail | (result: any) => void | 否 | - | - | 接口调用失败的回调函数 |\n@| complete | (result: any) => void | 否 | - | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n\n#### removeCustomLayer(options) @removecustomlayer\n移除个性化图层\n##### removeCustomLayer  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | **MapContextRemoveCustomLayerOptions** | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| layerId | string | 是 | - | - | 个性化图层id |\n@| success | (result: any) => void | 否 | - | - | 接口调用成功的回调函数 |\n@| fail | (result: any) => void | 否 | - | - | 接口调用失败的回调函数 |\n@| complete | (result: any) => void | 否 | - | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n\n#### removeGroundOverlay(options) @removegroundoverlay\n移除自定义图片图层\n##### removeGroundOverlay  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | **MapContextRemoveGroundOverlayOptions** | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| id | string | 是 | - | - | 图片图层 id |\n@| success | (result: any) => void | 否 | - | - | 接口调用成功的回调函数 |\n@| fail | (result: any) => void | 否 | - | - | 接口调用失败的回调函数 |\n@| complete | (result: any) => void | 否 | - | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n\n#### removeMarkers(options) @removemarkers\n移除 marker\n##### removeMarkers  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | **MapContextRemoveMarkersOptions** | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| markerIds | Array\\<any\\> | 是 | - | - | 要被删除的marker的id属性组成的数组 |\n@| success | (result: any) => void | 否 | - | - | 接口调用成功的回调函数 |\n@| fail | (result: any) => void | 否 | - | - | 接口调用失败的回调函数 |\n@| complete | (result: any) => void | 否 | - | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n\n#### setCenterOffset(options) @setcenteroffset\n设置地图中心点偏移,向后向下为增长,屏幕比例范围(0.25~0.75),默认偏移为[0.5, 0.5\\]\n##### setCenterOffset  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | **MapContextSetCenterOffsetOptions** | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| offset | Array\\<number\\> | 是 | - | - | 偏移量,两位数组 |\n@| success | (result: any) => void | 否 | - | - | 接口调用成功的回调函数 |\n@| fail | (result: any) => void | 否 | - | - | 接口调用失败的回调函数 |\n@| complete | (result: any) => void | 否 | - | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n\n#### toScreenLocation(options) @toscreenlocation\n获取经纬度对应的屏幕坐标,坐标原点为地图左上角。\n##### toScreenLocation  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | **MapContextToScreenLocationOptions** | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| latitude | number | 是 | - | - | 纬度 |\n@| longitude | number | 是 | - | - | 经度 |\n@| success | (result: any) => void | 否 | - | - | 接口调用成功的回调函数 |\n@| fail | (result: any) => void | 否 | - | - | 接口调用失败的回调函数 |\n@| complete | (result: any) => void | 否 | - | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n\n#### updateGroundOverlay(options) @updategroundoverlay\n更新自定义图片图层。\n##### updateGroundOverlay  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| options | **MapContextUpdateGroundOverlayOptions** | 是 | - | - | - |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| id | string | 是 | - | - | 图片图层 id |\n@| src | string | 是 | - | - | 图片路径,支持网络图片、临时路径、代码包路径 |\n@| bounds | [Bounds](#bounds-values) | 是 | - | - | 图片路径,支持网络图片、临时路径、代码包路径 |\n@| visible | boolean | 否 | - | - | 是否可见 |\n@| zIndex | number | 否 | - | - | 图层绘制顺序 |\n@| opacity | number | 否 | - | - | 图层透明度 |\n@| success | (result: any) => void | 否 | - | - | 接口调用成功的回调函数 |\n@| fail | (result: any) => void | 否 | - | - | 接口调用失败的回调函数 |\n@| complete | (result: any) => void | 否 | - | - | 接口调用结束的回调函数(调用成功、失败都会执行) | \n\n\n#### on(event, callback) @on\n监听地图事件。\n##### on  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| event | \"markerClusterCreate\" \\| \"markerClusterClick\" | 是 | - | - | - |\n| callback | (args?: Array\\<any\\>) => any | 是 | - | - | - | \n\n\n#### $getAppMap() @$getappmap\n获取原生地图对象 plus.maps.Map\n##### $getAppMap  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n\n##### 返回值  兼容性 \n\n| 类型 |\n| :- |\n| any |\n \n \n",
    "tutorial": "\n### 参见\n - [参见uni-app相关文档](https://uniapp.dcloud.io/api/location/map.html#createmapcontext)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=createMapContext&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=createMapContext&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=createMapContext&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=createMapContext&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=createMapContext&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=createMapContext)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=createMapContext&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.component.createMapContext)"
  },
  "createCanvasContext": {
    "name": "## uni.createCanvasContext(canvasId, componentInstance) @createcanvascontext",
    "description": "创建 canvas 绘图上下文<br/>",
    "compatibility": "### createCanvasContext  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| 4.0 | x | x |\n",
    "param": "#### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| canvasId | string | 是 | - | - | - |\n| componentInstance | any | 是 | - | - | - | \n",
    "returnValue": "### 返回值  兼容性 \n\n| 类型 |\n| :- |\n| [CanvasContext](#canvascontext-values) |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| fillStyle | string | 是 | - | - | 填充色 |\n@| strokeStyle | string | 是 | - | - | 边框颜色 |\n@| shadowBlur | number | 是 | - | - | 阴影的模糊级别 |\n@| shadowColor | string | 是 | - | - | 阴影的颜色 |\n@| shadowOffsetX | number | 是 | - | - | 阴影相对于形状在水平方向的偏移 |\n@| shadowOffsetY | number | 是 | - | - | 阴影相对于形状在竖直方向的偏移 |\n@| lineWidth | number | 是 | - | - | 线条的宽度 |\n@| lineCap | string | 是 | - | - | 线条的端点样式<br/>- butt:<br/>- round:<br/>- square: |\n@| lineJoin | string | 是 | - | - | 线条的结束交点样式<br/>- bevel:<br/>- round:<br/>- miter: |\n@| miterLimit | number | 是 | - | - | 最大斜接长度 |\n@| globalAlpha | number | 是 | - | - | 透明度 |\n@| globalCompositeOperation | string | 是 | - | - | 设置要在绘制新形状时应用的合成操作的类型 |\n@| lineDashOffset | number | 是 | - | - | 偏移量 |\n@| font | string | 是 | - | - | 字体样式 |\n#### CanvasContext 的方法 @canvascontext-values \n\n#### setFillStyle(color) @setfillstyle\n设置填充色\n##### setFillStyle  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| color | [CanvasGradient](#canvasgradient-values) | 是 | - | - | - | \n\n###### CanvasGradient 的方法 @canvasgradient-values \n\n###### addColorStop(stop, color) @addcolorstop\n添加颜色的渐变点\n###### addColorStop  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| stop | number | 是 | - | - | - |\n| color | string | 是 | - | - | - | \n\n\n\n#### setStrokeStyle(color) @setstrokestyle\n设置边框颜色\n##### setStrokeStyle  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| color | string | 是 | - | - | - | \n\n\n#### setShadow(offsetX?, offsetY?, blur?, color?) @setshadow\n设置阴影样式\n##### setShadow  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| offsetX | number | 否 | - | - | - |\n| offsetY | number | 否 | - | - | - |\n| blur | number | 否 | - | - | - |\n| color | string | 否 | - | - | - | \n\n\n#### createLinearGradient(x0, y0, x1, y1) @createlineargradient\n创建一个线性的渐变颜色\n##### createLinearGradient  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| x0 | number | 是 | - | - | - |\n| y0 | number | 是 | - | - | - |\n| x1 | number | 是 | - | - | - |\n| y1 | number | 是 | - | - | - | \n\n##### 返回值  兼容性 \n\n| 类型 |\n| :- |\n| [CanvasGradient](#canvasgradient-values) |\n \n\n#### createCircularGradient(x, y, r) @createcirculargradient\n创建一个圆形的渐变颜色\n##### createCircularGradient  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| x | number | 是 | - | - | - |\n| y | number | 是 | - | - | - |\n| r | number | 是 | - | - | - | \n\n##### 返回值  兼容性 \n\n| 类型 |\n| :- |\n| [CanvasGradient](#canvasgradient-values) |\n \n\n#### addColorStop(stop, color) @addcolorstop\n创建一个颜色的渐变点\n##### addColorStop  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| stop | number | 是 | - | - | - |\n| color | string | 是 | - | - | - | \n\n\n#### setLineWidth(lineWidth) @setlinewidth\n设置线条的宽度\n##### setLineWidth  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| lineWidth | number | 是 | - | - | - | \n\n\n#### setLineCap(lineCap) @setlinecap\n设置线条的端点样式\n##### setLineCap  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| lineCap | string | 是 | - | - | - | \n\n\n#### setLineJoin(lineJoin) @setlinejoin\n设置线条的交点样式\n##### setLineJoin  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| lineJoin | string | 是 | - | - | - | \n\n\n#### setLineDash(pattern, offset) @setlinedash\n设置线条的宽度\n##### setLineDash  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| pattern | Array\\<any\\> | 是 | - | - | - |\n| offset | number | 是 | - | - | - | \n\n\n#### setMiterLimit(miterLimit) @setmiterlimit\n设置最大斜接长度\n##### setMiterLimit  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| miterLimit | number | 是 | - | - | - | \n\n\n#### rect(x, y, width, height) @rect\n创建一个矩形\n##### rect  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| x | number | 是 | - | - | - |\n| y | number | 是 | - | - | - |\n| width | number | 是 | - | - | - |\n| height | number | 是 | - | - | - | \n\n\n#### fillRect(x, y, width, height) @fillrect\n填充一个矩形\n##### fillRect  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| x | number | 是 | - | - | - |\n| y | number | 是 | - | - | - |\n| width | number | 是 | - | - | - |\n| height | number | 是 | - | - | - | \n\n\n#### strokeRect(x, y, width, height) @strokerect\n画一个矩形(非填充)\n##### strokeRect  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| x | number | 是 | - | - | - |\n| y | number | 是 | - | - | - |\n| width | number | 是 | - | - | - |\n| height | number | 是 | - | - | - | \n\n\n#### clearRect(x, y, width, height) @clearrect\n清除画布上在该矩形区域内的内容\n##### clearRect  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| x | number | 是 | - | - | - |\n| y | number | 是 | - | - | - |\n| width | number | 是 | - | - | - |\n| height | number | 是 | - | - | - | \n\n\n#### fill() @fill\n对当前路径中的内容进行填充\n##### fill  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n\n\n#### stroke() @stroke\n画出当前路径的边框\n##### stroke  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n\n\n#### beginPath() @beginpath\n开始创建一个路径\n##### beginPath  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n\n\n#### closePath() @closepath\n关闭一个路径\n##### closePath  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n\n\n#### moveTo(x, y) @moveto\n把路径移动到画布中的指定点,不创建线条\n##### moveTo  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| x | number | 是 | - | - | - |\n| y | number | 是 | - | - | - | \n\n\n#### lineTo(x, y) @lineto\n增加一个新点,然后创建一条从上次指定点到目标点的线\n##### lineTo  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| x | number | 是 | - | - | - |\n| y | number | 是 | - | - | - | \n\n\n#### arc(x, y, r, sAngle, eAngle, counterclockwise?) @arc\n画一条弧线\n##### arc  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| x | number | 是 | - | - | - |\n| y | number | 是 | - | - | - |\n| r | number | 是 | - | - | - |\n| sAngle | number | 是 | - | - | - |\n| eAngle | number | 是 | - | - | - |\n| counterclockwise | boolean | 否 | - | - | - | \n\n\n#### bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y) @beziercurveto\n创建三次方贝塞尔曲线路径\n##### bezierCurveTo  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| cp1x | number | 是 | - | - | - |\n| cp1y | number | 是 | - | - | - |\n| cp2x | number | 是 | - | - | - |\n| cp2y | number | 是 | - | - | - |\n| x | number | 是 | - | - | - |\n| y | number | 是 | - | - | - | \n\n\n#### quadraticCurveTo(cpx, cpy, x, y) @quadraticcurveto\n创建二次贝塞尔曲线路径\n##### quadraticCurveTo  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| cpx | number | 是 | - | - | - |\n| cpy | number | 是 | - | - | - |\n| x | number | 是 | - | - | - |\n| y | number | 是 | - | - | - | \n\n\n#### scale(scaleWidth, scaleHeight) @scale\n横纵坐标缩放\n##### scale  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| scaleWidth | number | 是 | - | - | - |\n| scaleHeight | number | 是 | - | - | - | \n\n\n#### rotate(rotate) @rotate\n顺时针旋转当前坐标轴\n##### rotate  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| rotate | number | 是 | - | - | - | \n\n\n#### translate(x, y) @translate\n对当前坐标系的原点(0, 0)进行变换\n##### translate  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| x | number | 是 | - | - | - |\n| y | number | 是 | - | - | - | \n\n\n#### clip() @clip\n从原始画布中剪切任意形状和尺寸\n##### clip  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n\n\n#### setFontSize(fontSize) @setfontsize\n设置字体的字号\n##### setFontSize  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| fontSize | number | 是 | - | - | - | \n\n\n#### fillText(text, x, y, maxWidth?) @filltext\n在画布上绘制被填充的文本\n##### fillText  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| text | string | 是 | - | - | - |\n| x | number | 是 | - | - | - |\n| y | number | 是 | - | - | - |\n| maxWidth | number | 否 | - | - | - | \n\n\n#### setTextAlign(align) @settextalign\n设置文字的对齐\n##### setTextAlign  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| align | string | 是 | - | - | - | \n\n\n#### setTextBaseline(textBaseline) @settextbaseline\n设置文字的水平对齐\n##### setTextBaseline  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| textBaseline | string | 是 | - | - | - | \n\n\n#### drawImage(imageResource, dx?, dy?, dWidth?, dHeigt?, sx?, sy?, sWidth?, sHeight?) @drawimage\n绘制图像到画布\n##### drawImage  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| imageResource | string | 是 | - | - | - |\n| dx | number | 否 | - | - | - |\n| dy | number | 否 | - | - | - |\n| dWidth | number | 否 | - | - | - |\n| dHeigt | number | 否 | - | - | - |\n| sx | number | 否 | - | - | - |\n| sy | number | 否 | - | - | - |\n| sWidth | number | 否 | - | - | - |\n| sHeight | number | 否 | - | - | - | \n\n\n#### setGlobalAlpha(alpha) @setglobalalpha\n设置全局画笔透明度\n##### setGlobalAlpha  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| alpha | number | 是 | - | - | - | \n\n\n#### save() @save\n保存当前的绘图上下文\n##### save  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n\n\n#### restore() @restore\n恢复之前保存的绘图上下文\n##### restore  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n\n\n#### draw(reserve?, callback?) @draw\n将之前在绘图上下文中的描述(路径、变形、样式)画到 canvas 中\n##### draw  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| reserve | boolean | 否 | - | - | - |\n| callback | (result: any) => void | 否 | - | - | - | \n\n\n#### measureText(text) @measuretext\n测量文本尺寸信息,目前仅返回文本宽度\n##### measureText  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| text | string | 是 | - | - | - | \n\n##### 返回值  兼容性 \n\n| 类型 |\n| :- |\n| **CanvasTextMetrics** |\n@| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n@| :- | :- | :- | :- |  :-: | :- |\n@| width | number | 是 | - | - | 文本的宽度 | \n\n#### arcTo(x1, y1, x2, y2, radius) @arcto\n根据控制点和半径绘制圆弧路径\n##### arcTo  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| x1 | number | 是 | - | - | - |\n| y1 | number | 是 | - | - | - |\n| x2 | number | 是 | - | - | - |\n| y2 | number | 是 | - | - | - |\n| radius | number | 是 | - | - | - | \n\n\n#### strokeText(text, x, y, maxWidth?) @stroketext\n给定的 (x, y) 位置绘制文本描边的方法\n##### strokeText  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| text | string | 是 | - | - | - |\n| x | number | 是 | - | - | - |\n| y | number | 是 | - | - | - |\n| maxWidth | number | 否 | - | - | - | \n\n\n#### createPattern(image, repetition) @createpattern\n对指定的图像创建模式的方法,可在指定的方向上重复元图像\n##### createPattern  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| image | string | 是 | - | - | - |\n| repetition | string | 是 | - | - | - | \n\n\n#### setTransform(scaleX, skewX, skewY, scaleY, translateX, translateY) @settransform\n使用矩阵重新设置(覆盖)当前变换的方法\n##### setTransform  兼容性 \n| Web | Android | iOS |\n| :- | :- | :- |\n| - | - | - |\n\n###### 参数 \n\n| 名称 | 类型 | 必填 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| scaleX | number | 是 | - | - | - |\n| skewX | number | 是 | - | - | - |\n| skewY | number | 是 | - | - | - |\n| scaleY | number | 是 | - | - | - |\n| translateX | number | 是 | - | - | - |\n| translateY | number | 是 | - | - | - | \n\n \n",
    "tutorial": "\n### 参见\n - [参见uni-app相关文档](https://uniapp.dcloud.io/api/canvas/createCanvasContext.html)\n- [参见uni-app x相关文档](https://doc.dcloud.net.cn/uni-app-x/api/create-canvas-context.html)\n- [MDN](https://developer.mozilla.org/)\n- [微信小程序文档](https://developers.weixin.qq.com/doc/search.html?source=enter&query=createCanvasContext&doc_type=miniprogram)\n- [支付宝小程序文档](https://open.alipay.com/portal/zhichi/search?keyword=createCanvasContext&pageIndex=1&pageSize=10&source=doc_top&type=all)\n- [百度小程序文档](https://smartprogram.baidu.com/forum/search?query=createCanvasContext&scope=devdocs&source=docs)\n- [抖音小程序文档](https://developer.open-douyin.com/search-page?keyword=createCanvasContext&secondType=all&type=1)\n- [飞书小程序文档](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=createCanvasContext&topicFilter=)\n- [钉钉小程序文档](https://open.dingtalk.com/search?keyword=createCanvasContext)\n- [QQ小程序文档](https://q.qq.com/wiki/develop/miniprogram/frame/)\n- [快手小程序文档](https://developers.kuaishou.com/page?keyword=createCanvasContext&from=docs)\n- [京东小程序文档](https://mp-docs.jd.com/doc/dev/framework/-1)\n- [华为快应用文档](https://developer.huawei.com/consumer/cn/doc/quickApp-References/webview-frame-overview-0000001124793625)\n- [360小程序文档](https://mp.360.cn/doc/miniprogram/dev/#/b770a184ff1f06c6b3393a0fd1132380)\n- [相关 Bug](https://issues.dcloud.net.cn/?mid=api.component.createCanvasContext)"
  },
  "general_type": {
    "name": "## 通用类型\n",
    "param": "### GeneralCallbackResult \n\n| 名称 | 类型 | 必备 | 默认值 | 兼容性 | 描述 |\n| :- | :- | :- | :- |  :-: | :- |\n| errMsg | string | 是 | - | - | 错误信息 |\n"
  }
}