From 3c377421894602696af5012dafdbf8bf2a74afc9 Mon Sep 17 00:00:00 2001 From: chargehand <2502468276@qq.com> Date: Tue, 4 Oct 2022 17:58:20 +0800 Subject: [PATCH 1/5] =?UTF-8?q?g=E2=80=94=E2=80=94update?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../用例描述/导航系统用例描述.doc | Bin 20480 -> 20480 bytes model/界面流图/界面类图.jpg | Bin 0 -> 804153 bytes model/界面流图/界面跳转.jpg | Bin 0 -> 162282 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 model/界面流图/界面类图.jpg create mode 100644 model/界面流图/界面跳转.jpg diff --git a/model/用例描述/导航系统用例描述.doc b/model/用例描述/导航系统用例描述.doc index c2c5d4aeb1a33ed7174f345d951bc36e9792fbf2..8a6b63143e14aeffb35a1451b9c890b4a97ff186 100644 GIT binary patch delta 4272 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 delta 3395 zcmbW44NO#57RT=!2IT7vpfC(0B17poL1Teo#^Gyr6xPgIWMG(zA1o@A4|UdNHwvt@ zh?Q0?bYVH$l+ZS-jcqhqLz&o3NMof{+f+)?wO!Jtt-5L(t;AJZ6PG&sKTIb+)^1{U zCck;_+;{Ii=iGb#_hs7mO6_~40k1l2?59_wyGMP0P#;oT92F-Yv$`aQz-L#{E#1iY z)P4K!o9GBIaMKx zYGm>!Y*=t&Pm){jH&uSwU043^r@v`i?moG;wU1!cZra?^(PY|+o}MnxsWnmy4QTU9 zy84GZ^*tYUYdq0@9#pcm=H+PrnTosR&v-7C%3?#!6IJ_5drJ?vt6bgHiI`j#>jjU> zTJ`9Q8qc?F*V}gNS>k0EbT@Gu_2|{fKSu#y)4gX_${u*t(r#U`N)~ic*T((R9_$~{ z;H>LtnrP~1;xRY=I5lcZQf$iPnv7>T-u^YqU4Ps8c?Bors8O$4?%KQ^GrpN*qDx6> zv@R*0tonlNi=B5X7c^v6-diDyzq)^F*Zaq6UvcpuZs*zWt+?QNYF(i1azj)zl_i;K z?{qHl1_$zES@2?>>;8JGvn=?#uQhDTN{=i|TRUAGqTWB@%B`C|id{}L&1ls7zj6(C z2A!QM-`p~fq~uvNsEwzxl(6-tN?vzfb)JJg23DWFzENwf(|8(cN_Gd@lpeL)|J=Q+ zZb8H8(ofm~3Eua{?L5;1-nRe0-p*8nRC~*pA?N#fahsv>yO+dTd)>)(N6VxAoaOEM zfvGHh)2i>e+$;-@J`{^TwPsSF29UQR67KhKIr9b@8tc1%th@bEU~le66MWXux3BX| zMSXXdC)0gws^@>jfE=(>bW|J1>pw5BA{^cQ-F|T0WeBcMDug=KAPne$9=L%AG=hzw zAG`|q6c_+!!8vd<+-G0-zGT0N``aK4iVp{=APuAgE3knVKo{r({a^^Z3q~Wzp4Lp) z7f#akR2xWeh?r447z0e@}gCk%7oB|(#OW+E)4SodSIBg?=5tu+8D3HmXewv=iJVBor%!LJLvV#&( z2HXILjHm+bfDh~*&_cDH%qEFen;ubw zm0-i$mMax-rE`^Yg>!XtWph7(?4cZmOLd1074G1c6ABXF@4jRizp#x?;?KQ70lUWa}1=azVJC}N} z%(=w5yt%ZwthtD}fNv?Cf2%aUq$*nyHRj0lcDCNqr+h?8<4;OskJ4ztdwc<9SQgVY zb0lrDBvPbVM+YoMP>I}h>!UdY)=yA7tQ*!0>xH!u)CFsT^}t$S9ZV?we5Ex0t~5qz zgVpHrDVttb8m}phhfNV#+35pw7WFQwrA_A9G?7!VUC103OH-*tRv{~p)yK+X)v?Ng z3S)J#vi^5E>#7)@o3v zH)Tj5dG;lx@9FvR-f>Qrhst}8VIbZMg^Bc@*@BiM`GJaBi(N@m{`g-C{+Y~QW>gtM zd=<-dDg%ZIhCdR%!TaDfjJir@>*dx-`<;?fXNJwWayWEi)gf1NGmn6q3ngE#BTDZGQlx)8=iGJ9^So!h_kQnM_m6wNdnRjTWlv`BJu|<(XYZLk`*%Ke{vALA zgFqpGOP2tEOBWx&`6NIQKz8|0`170W0QIUp{g7O0UFT(jJ04+H+_?i;g zB@V!4+Dl}#m(E)OtQSm@UHW$b{5$+XPI2w(6|&2hu3!A`PXhp4B_q2;c9oL+>eWAP zT;c*;x=eQE>a{<}Y3bN+-F`%ImqVUN&%h`I*MFLrR4@#bkhJg$sUqCr6jpFS7#P0F z=Mu4VjVqg1wDe3!&MvR`+&VZ!;uaMX*U@$NcpY5XqG#pyCMf>P10|$w&JUYV40cW# zlKb<;yS$6;Z~v*tzr&wc+W(530NfzEbRicREkF)HdieJ`|5N(^mj*6H^oioBU=E7H zKYAr`#U)b*wa-oTuH7v(OSF6b^bIS1dZ>jrcEV+Dk^q&zkAXt>Kw(j0dDrv~UmxlO zq-MQ1V5gjRz*jOofQ|WI zNWK5Fg_oo!j0S%pW&O_msEw&msPsuQRvg~k zcn;`wdGcSyEUf*dd!QVb2(C2R3+NtdV<^v`y1~H@W-)7)=(^pFGBMJC!rfha=AT;q4kW6!h$Nqb=XTUyCt=&v<`8b zK3=G)ZN6#j&6r%}={||wGMM!TiWh0Ht6U7D=!={Cu1@ZwpaK_2>V8VD| zn&w#*qoet(up5OAaDlS;54h7|bTczIiSN*JF=?w6H)2^Dgn~LL*S3SX?S%x_>zqVp zT9G5BAJ^Wco;9o+OG)Mz*b{ritT@+|)a(-5tJNWsPB5TR%}LCi&datt$%~K6LZ0tk zu83Y3vDfVm_J8LkgNo|Dm!Va_q)r-3?HrmIt)?^FD2roQ=y9R24;0pM82>tKb$QLK z`Gs+!2Mro*WrKkUtI&GyDxGG1ID7(=&QkSy(HyNvc{?tNPFr-Rhef?#iWB68GF?aRF*P@1K>Y z3e!&}k4)+Ut^$j<3=&V45(Qz2(w@S>gb*pS4K>6!Ey}nR}n0hu%iwf`;{X(U1tQno>zQN4P@q)f%KLK-(cvTiQD z2InO`Rt+`QKEi5vz9ZIYjogKJV6GI^*+*4rdNZPq$DbuDzn7G{8~gmnsk-%Vy`FDN z&~Ejy%HQiPc}>CC&h_{2?3+mBMwA#LBzM}FO@SsO)Y03xaMy?W`m^o53g>}(a%gkh zbbhyl1{)oR&FDR@tjio=xVG)E2j{^QbrYI;bYJS% z(ydqB7JQsdNymDObVH@)n)NrOayE-ABa7D+9nI=;@YY9Qz4RIqxyLnzUQdD%&8)G7 zrbGxqTssd}!g>vY5oD~^lk)BLz6C#WZbC~jCsQ$fN?)tyGVFRj2g(t*Vnd;M?LW5GJrY|B~$Np2{iZUqV^tT z+@n)4X4i*mR4H#h^x4KafN(v1e?OkKAED94Q^lFIv>mlS73kB`U{|eo4nX}#?frrp zu9}m?xROnEzKt*;6IG6?m?=QtkIep!`NJ)zhr5E3O;4C*jeM-Wd>ZPd0j(;qfkc&a zeu-zN$1^7#x33lb1MPp? z;=dqdsjN0-&O(Jq^jjxm*;(8`(a)TRg{13_)f`>VzA7pqLyd(H>YcrHY_Hx?-gq2= z&qj^%5s&tellhuB1Y+mDdK^8q3_Z9YGH-$ivEwSp35%)*hXC!+vq%mzg>G@62ueUv4LSR^;GPG` zPd^RKi8AVU3Q}GbmI;gcQ z?-3WYo2~f@$V1|3gco6wuf;-RQf^tZ%iR9KrKUjlS~fkYGA>JDrjVlbs^Q0mJSNw! zQT!{5r<+rvQke?klhI#*4>TT)ghTQdv08MKaE$tpomx2D(Hf~hSQQtwF)8~Xou(-) zs-Gb>q2CM9ys9`9wP3hFm^k!$?U8lsc^B6tmozY&*ZAe|%iGoJV#vyER!ih?y{l^l z@@|n%^oTQsPOev&E0o(F3|4i8b@n~hvXP4C;_U3~Qfwj?B;3+sGAR|en-RUilqLPJ0m#2wGJK~fU{N0{_SD00k52ywJ@#yItcg;BvPOlh`L?HVG( zK!aQm)L-e%>>I!fgkuSbVB;EZ&7s@MH|HE>fRj3kPybXnZBT8gyDy4-OJ#V{8? zDwTnH1Z1h~MGEzS4#=2;Sv>tgIm3A#UG!eG7R==5N~Iw2eD zgftC!lJ!ZSMdnahWC3;7Cv?O~k%cdg zyNXt#V8d-Ud9pK)d1ZM%rUg(&Q=9|d_3x*aZCE;He|MC3woH2N$4r;G7s(Q=qRil3 z;wF=txw>>iLj_c* zU1lM#%r%*?XnUC+lFK$Sazj#`~4$Cu^$7>{Uq-y^)&pPMlC2H%F z;1E~2M8)g+W%Q^>6CDj)M4x`lENe8Myzu=2rC&%p52$<`V_fEB9OLd-{fEZ5%2%0t zH(xw6wX#fQi8QE0BxsjRM1Ls^)r~2Iaw8}R(7bJgZi2*In6N0V2e`pA_2V~qPhD1r zx8Vk#+^e#7{sL7L6}LrA@&eQa%&;^mGF*a#xy9i%l9fCVQTum_h3q3Qqpm*c7o6kM z`*NbotgdEQ%c^5H6F~8{`|S!(K!Z2B+4Q9?H+%lvsq|Vsn^guAay8??ZaQzPsm@B2 zVfCSvXnCxgcThaPNM0=+K@=EHTX^Wm$s#-RV&>+dq9{F3Zi>inS*GuiY$qxmqUOS+ zs|YU~8s1E~Un}CW59)E1k8>`2TYuMC?Kh>?Y5lvAv=}3i z)6`bFzMYj2nDXY^(9PA-L^dgzU6X0Bh+H=jwb9xBCYF61>x}5Kp=0y*QL*hqRt3Np z@V0dcwj`BVGIkMva22$pdaul66kQOsRBiZfy35IgL4(_EkKSc=E@-zcdz^W_av#dY zq+WLiJ384bF%pgR7PTz6wJ=`G)NLm3RKQV^rmxISNEH$zV#4qDj!c+wtPNhvog|7l zaM{Jf#(g%V*Y5vFm4Ve&#mB0n$7$)gY)+RjEn#XMM^jwR!!8dJ-&p1M3b^VAvwbU5 zJdm5R3L5{iIf)+klzu)}UHpvE0<&=}3^vrKZ+`o@a6iM9DPK{qN;TKAMo{;@+AP$* zsXKkkJC-mX59{I;<^ZmJOx)vf8g`J?!AlO5-0dY<<%d*Br3hd!zoK%ChN{?&lRFgj z%6>CaYQ(rJV@=e&8J>K6*vFA#jz-Q2jqHZYOb6UcK`$|cXzdXa-mQZL{s=GW#XBR9 zUlX?s@P%LI5Pbe;FzE^u7bdbyF{t~1$ADx9-#b62RkYMto*-tN0*Skmdoohgvdp;9UU{Q{Onfcs$u^ht(^|vL| zOIyW)4ulzg-@ve>FocbYW$l!_?Ji4!8`xqy{UeFQ~5OBU;lKx_QA+$K-Sa3gJe#xu0H*2 z_Jd;s)pWPCaHHA};jkGu4&jGPXa8@_C^AvkjwGEU!EUc4;a@HXTHg{s!?V3+{7++j zHp@+HtJaS(HLmN2F7x>6Nw-NCtm0oclw?1?o&#QQ9iz_yPi}@vpHVh%RG$Ja!n@tg z|51{?xAhx*;f~MjUW{5YzO(-*0)D$Sf3H8A3>>%^={Ji1qx9ECFU*Kg>Hl={r}q9w zUH^SX*VWR&q~@~r(x({^RNR)ruL4)^o&cqt1m`y3@`+cC_(YtOQsqys`@PjbAlJR@ zVzxdjp@9BPwjcdbTAz;0d&L>D=2y2a>92BmTCEXuRaSng*+V0GRb%tj(RDR>>7mf} zsMyrUG9vEHrp+NocpXH zz0(l>dOfmIzP867gR}-A5!mUyUbH*hk>a7%RN{5@!piCbkX_7FA|a1Za61U6gb@Y` zbEYJBS|%7rtx_^{caNL{8rH7IGLbq&@;RaTCa&``S83TbHe(^MA7YwyPWPjgavkH# z7@1<<-{il)=xZfoQpGf4Tqn40=~y1rzJ&~#UbmVM8Za$s>?M$4cUs< z8#m&U@M{^#_X?3dC{8P>Q}>ADcxXK1;oxLMzIjAgjD#=el;Qdc!+g%NztUdl=49$@ z@31l6fE#8r<>09MRVqWsLTJX-uwjP@^fp*9!b>EtnlrC~oIr8w;auVZKec}`(*}O> zR)SsPWxQ(oyzP%3yTi&K+cN3$0%637&Y_%To9{MX>~CtjRQ(Z|teYamd>~pOb9A*8 z?jweadN4dmFyox;;&73}LCmsGR_6qC9dEcsN_8PPt#5?h#~16PX04N|^pc3TR&v+#wVjLGLvw{e`XX~3 zMuvV7yIb|z-omkxENvo{>wYZuP@|hx%Xtr?8dN(GeXtb+sxg7NLVeU0xhQk~F&2JL zp)_^4fCCs(rRo^&npizQVB01AfG`#HQbQJ<;=59i7`Va2Q$``oJeDjI>(rAoC8__T zkz3W^QFzwBc5DbR`qD6yX4KYqy5uWPzZ&U9&LbU8JzW;d|siHC8Mz?n0JZ;zE zr=R31-Jpvv)j&k6&gKg5s#ouA3S2G76S!s5StzHPZIDN=pScIN5|u70*0ve@y1f{W zQVM<_^*cFF2?oxC7{4R;sTS68k7%7RamdxF($A44z@_N%vBwP<=(?u(#82~E+hA4b z#;g)M`Y~zmO8;*7R)AB^t*?i;BHNmg)3^IOS`~|~(nCE_vD8r89j@Wn4*`;Ev;(~3 z5M}Hwra5O94pkoBr0FUz(k(ZAy7*;R=J3l_8$z~ajAH5=r%N@Pin*GZDA9Tjn=aGg zjNs589q6vL{9!(cojpoqJ&^ahm(%DYQ#bkF_bN`-ioT;R?Q^J8qGmFC^4nPhD!7HzEHRkJO?IF&(kVmz z>dz0>4Q|dd`qAdi8+BI1yX)OW)j~xrd@oz_t%qYTPNjwz><#DzEe&o>`iFksH*9mk zU$JIn6e6NVp6@HWc)aT>C_dq2Iu`yZw{^Xd?DklSU^fqD!JM$pcY>l%c5Y_K(zebD zpR94_%rxeouEJAr(P==1we0YODL;vuS~VW0@TJt-Yu93>-aIKp%p)EM&5G@T(@$!w zao{pqs92hd9~~q|^Vl5}*89?ALKGG4G7KEqSgqv4N*PJ3?)>OfTyKcod0WYdRX*zM zctZxVtiuyGBGtN*@_G{A2zf@cRxoz;r8w8}27Q5fwE z53~Iply(6ZCt73cO1X!V+c-?v99tXra^R>98Rv|^jymkACQLY9)8o+Xa^^~UYR^@d zR8`o;3%#RraTF1lfa+tN#VVCd?mbQ9bKKYA5a^8MS~Ry;uG0_B>*IqazlvLzRCAgt zH2dwE?0~HI6u^;uC?9SbIR>-ur+ceoti^KWQ*T2`Oc6+P_880<0dx$WE->=Ma)^R2 zP9MVFWzZx>qrYj+tu}in4t<;Q*xAC^y|7rlCcBR46|-%3 zymmDo>#?28hw6vx6NZv^nyV(uCc#V;kXcD!`HYwNtP;}qrWgF1?Kxl|aeV6zjGo!G zd75^LufzgZS=s7U1?iD=2nnhf4pb#7kG5X@KxD9JbOB3M6^kiT#~GGPd32jz3Mtw# zwG_AKcaM)Wh9bhkjTzVD_jYMz%{zRSdJGY$tc`zt88u0fD?98itVN8ZuBO^ zPeod;T0cH@GL(EjRbP&7hE$+DD~;)O#lGem#51^aNk7O)m_u_2hq=o>fvLJO@rQbAqzESOf=8Q~Xe)+%-Z|qAD~$p8g+JMXFHTxDZZr`Ki;19cv(Dp^*~7avB0QDURTBc-)l9W~%W~!_V3di5{4NXN32f)vmDCtYN~4jIeE$^2l$3M8S3V^*a43E~ z4I_9xe{+oCl*vr4a*>cbp|o@xmZfc@dX%Fx8LknLH zdWA9{V>%R_1Dz9_Tg(lSPDMfX%6BMF+V!g3VW~Epm9CLlm4u-BJNRd zmhb3etK|X{M*`APwYPWDKSwQGe~CymM;a z*S?oXi8Q!yw3#&o1FBvn>oLO%-f(lAXQn#`w9;%)zF{-g4c4Ahtb>(%7zz`2?H&!~ z#(e$C{Gnh3f9ONFx0e;L+5?kv;Q=>_PbT{KC#uHje$bz1zcWfy3laPA_sCI|7%z_UGzX* z=Azt(w70GrYLLS%HYDl>p=6S2ItvzW=)@6sxuGSlcdpOEmrfFN9a=Nax~zXHCUogO z%4n~)=v^$c?nZq#-m2Eer1EYB&rlvAh1RkMnii%OldZa}GMmTfK4U?%3K?i9qYu@r zT|aeLFiIHr0x`wR2^EVJXusQ86zeJGaN^LyXjceb*z?Y6AoxuwDQ=SXxjudFwEoaq zf^A7Ly4F2U#{>t~^&CSa4Js=zRQC?WgRjI3)0h?e4aPDLHO{UWWjpE0><{=FI$4ZY zmb(fDI#gQ`Oho9STU}Lbnl_zV!+Q5Gfo;1yIJ!a8yyr-w-vxtkKp(jq}otCSVCl zu(5vYtkU;IJ~6-K&Vow%U({(AP9~l$$NbQ9qtd|U0~?FP40}vOxH8j@AUWVB4v!IC z)T!FN*;JWaaC+Nkp_A&<9zFTQ`ny^3pfBPy6PT*|;oL|loV9J>liPS8%UTv#r!Y#+ z*^)9K*J;E`AD0Nzo6%DWVYN5IcuYtmH@K1LUog{j*g$7qFznrB{ zVwZVRm`9yMWl9wi-}X_Z3RLw-CaI@<-Y)@-Nyrrz78-*Z_J~_WiTgF1#lCUs8957< z*C|R3Xgx~qTG=;dzDw)i3>!>+#t?Is4cGJ5dwA>7m zbvSkPT8j_i=n}tzB@rl`$C8UZsP;1oT383jz@;?n>7{RJw2bJ@L^$WKU?xpBq>@qn zkqmEWVu$PzdfG03fUF^^)|g!2Dn5)L9mCg{n8;y2`^xcYoV%NsRk3FF({QC&&Q%eE z6eXM{9nIWy&?u`5%s@||3nph6sr`?RHUPkZe|qM?7{4F*{2V~-r)SPluvq4PHoy}| zT|lY#mykw8@x1QI2smrv%GM9!_j|~OT}HR@1F0&vJZrVwDWdlu`XAscT%W%VO5@xt zvSs;X8;hkG1)?EJNEEC9f6d|R7|H)*8gkJDCaad)!KG{8B}+wQ)@*g1jr*N<T zOFsVzpX?jaB}Y`#m_~&gn2U{Ta1K)>GM{yAm8!r}(na+I;V)TD9I#!3#%0v}SMmP| zhSA`?`A}Nn%(rvEqC~FV-;yM$pv77Te91z%DXjXY%T(O-toVfN!Ijh+vFIL5KRT>> z6{#e=_P_x+jaT?FS=wg+r;*t@u0C7rE34<-qn_Y{pTbL~j?I`|%@MQlz*UhaDqbbP zgC9vQ``QPer)6e+v8O6^o*BOyKWYTp_twiwJ8$bXhicK#|I+ndJgTcqW9G7opnlS} zw^Yg}Dl4LvNtqB4?ktnX_;}c9M`F{tELkQgQ^{)XD?$J1um|g_OuM?6&SWkNaS&_P z^C5n>6wh#3kuLPdRl}g9p|E=9rdQP~w6snr*&Ndmq)20V)BR9~vD;c6d}vbaf$h(suRQ%1y zO_~?Jim^f>;W%@WmT~>bV=Ab87I>|olw&nSjIC|C0MD&kADk*`i9?9KxK|LjEEM#D zE747q&9shuQuPpdBU;7ug#+6vLw&LU11R4?dzF5?X&LrPB+pZ`JS9IUJ*1C2ep~+= z^H$T@qIv6~=bIu5#@TP56V!(xxB-sA>|ve}OZj-G$3sMHU578U(#|c8Df*h)$~iy~ z8{smNty6U1CaYDx?4C+**(D|L!W|ZgFvX&>y&fO5R;)3_q_>}J!Ji(a^dhK{TF|7kBkW2v%almv4OVTTB3^OlU zu8jz+Ee3C*&Gg!y_anu9Y&O-Q@7AIO)6@`ZnA`DV{jM`s9I|h|fBqfIZg|A6&sDQ= zw&IaNU3LR^x)CZTa5N(pKaq_b&C>*yf+7R*jqj3sJ#t{pX=nU|*5C1!7@w+#p$c3~ zLG2sXIzPl2DShh*s)k%kCNAW#niODMichGp^{OxZTvYQj_;W%jc&Y-@z>gkS+odEJ z?@`cp&B8^+1VXK{HMZTtd7Df$_?DGFCj3}w5gL4$38)hoyItsQKs7iPbxMZ=aWTB_ zi9__(@V)I9$yRBN26GZKp`d=J+y;V^hP8G5>WrQj6XNG|whG48A?VbT-qYWOGoG{k zS&HKzOND-W0hQ8X+d$aWuzxa7|BC*{Ijg$dv{&J%#k-hObkH~nseUiDH_ce9XSktc zenbqVj?rE7(x+$dU%KJJ z9tl4OF#RmJa}EGs;su1?BaI|7|DH%_TRI0YY`iQz%wUsF?HY0jWJcWmeh!$OilaXV z2z^q2CK=@)zy0lLuAGaN^hmTjVh*OulaIjWD5}0qU`II;-w1KhnaFSKJZORszx-34 zNY~85hu3bEs#NU|5V^)4_S%EmNX|CFN)r!|omvnSx+^O3BQQe!O5Wvq$pxxGw?JlX zhV64eo0CHGqNCqeZxs>EnfCrlw{t+`byV}B^;OIz!+Sf4%deWFGwuImHy&zRz;x91-O3dCwiM*g6>mItpiB*`V#JVr3c z95^i-_q~-J^v=tV-+3uBpK7oHXB&M4&p{rAgZMNA)e!sawMt))CA z8XO%`tE8~XNW$dq*G&zs0yck){C*7QAzg0aiP%_AX&9v$nZ&)FDGST99%{4hb3oLI z!Z~2Q*KgC?Y5P&2O;8Cbus!2$^X|)`=Zu+4N#_9O`p%=M)G>{lkJx$WSP?2?!O$zroD$UF%#Dy(21!j~M%d$C)(Z+BH zy;Ua6OwR=5c>SsDORy?@Y0s7#qh?~vh6!-1T?R5^Sy?;1y;v`PFP+qH{pXYqqT~qqvUdZ*|Hu^Cubd=D)+fzh<@=~`~z1**-!;A9d&(!Lnk%98z{)jt^YoFDf^ z`_JoVPu&~_4j)IoYy6-KiJCS0alg;D?wiNs$iZE)Z6L$H4U(&TBZPd>f{-07A8|M) z>+5gAg7NyrnS0}^9-n{00u&QmHqqumRe+qZF}YED$G$eR8}#~5_GPyC)-Jr~6`IM@ zPal%cZv9vaUvLOKmJ!$wtl7KpQog*nR`jyFS*n@8=TEZwiqrnL=D)T6NKZ~;ym&-E z*=&#T)n~Wfi)vpD9MqV@IZQI>p(YBd8b8%d)Ud@;i@T_s>CQ&8Xq3Lz_1#>}0v()f ze#?ILC(|}&uL5CCxq-eHd0n&7x_>hAIpi zZbD_#8sCGTL12PXM{;0lt-bpk_hcoyp9_ghmW8>`MY4|9u)P;&ccm*&CuqNMX{Dug z;V>db*X_x_EFRHhsd{g7w^!R`QIF4*=bj$U;BiF7UJ6Jx0LH;|x1c0vb<#Kj#tOeiOgNQT)VeF8>8r97j$12FNVeN@RXxO8r3x{IVguvml`KDCW zE(2SX0U7R-qGEg^sg=k@#e^@l?2Gysgs#d_=O+V4UKL_~)=bT#z6JHi;nAQ7;|jFV zi9J-$e*}J-@yLZ#rs~ZL!c-v0JL5?ZKbLT$b*-SFc&+$Es_-mlj#p+mSAU2Hh9-Ws^MdphD~~g6Tz~t?L zt^HMB?610xC=mI*zcz<#ra>mlKO7S4(A)*GmkUOCR6VE#272i3p|2!}sKU~phxG-N z)cXebz6f0`xiJ5=ZO-FCDbYK9WeNCkFXhI|KSHUQdu)jM4_sIJQ?Q)5BIU>SF3M%Q zLeRL(`6qlzCybXO8nv_y9U%I>5hg2qhEJ3Bs_EuxxjWxBes%1kt_filNpW&4M?u~6 zSK)E!Jqr+UGTEaPBgp+zuPSOaS$V*NU$hw0j_plRemV7GBVH{c$H)lX!Q|do3F20o zjfzU}3))x;4wCEXWIGV9^?&Iq@yqOY=C6ac&8o}4u)dKdiO|^T4-N#7AfETRJ5J@mFlS zs(41s6ATntHW^y72Cw~5{V}Ua&ZF^jZc*Z9mfN~C`Y=GJY_Um>dG?pwP1*yi^ic~N zLmi9p?waTcUptR;fCn0d<$A1(RQ{}ERjJ9kKzxg|8TPMcpMLov)(%VlUV>wY_oZIO+^m}g-L|IwVmiugP*G3-Zaa++9u9+`cMV2=a92hUi@=S zw}alPBN%1_;`cIEXSfGVi{WwK|0?w(_ZTorju z-pj4-`><#men|}lfSy1+`PVv4n=OmVc z(2oaoDcKBk_TU%+i(qN6Tg_LGSFzwb0*A8mMJcMdj+m6|`HbS93+N{LZBoU6WBn!H zWXtx(ZZp3gEw@YB81-y)*XJEDik2$hb^kbjfXPVMNrR?v68$}aa@&sv0DzY}HaM?& ze{Cz6FJX${*x=8qH_1`d6xCfM5!@Ed!px?}&hODiyFpl)45XC>kl!@&Oziib^%3PB zey>^Fi`*wHNwkXHUL9shjRZ^m!1!PgK{!Z24tob`iOb9&8t=6-`*oP0`$2b2qobg` z#%k#90ePPT8u_DJ{E&{$7!x(QY;AMYh6m8^ELAv7y}_w_YZVzI=Ei@QC)J0oY9`O~ zj981*d=MFoJ2H**uOrpEi{>r>8Ez;_0`>H%MVi00yP?&NzL!D@9_jfy6klok?b$EMGtTxv;!5i9T|= z+!ZnUfkjTa^WE7_-FV5o;hu0#{$n+tL|0v=0;x*=>;v*O7>iN0%pqO%Se-kInH({5O9DQKf9%KT!L6u0Bm+~i z+hv^mGT!b0pZ2_4LWGhKse?&i4(XNLcw7#>$lb_>_`%k00uEbSJpz_&5}! zW?nNxefmd`z9}ht!orV!eCpoqjxj5qeKFt-j#LacOoVR?k7E(69)z*E>h|$OLH`pO zGv-6X4k^W!-6MALVXXE+_|9mF!3?SE^%t%zPVfUP2=ND@mrv zoAtz>bK|>JO8>avBinTYv(HIM2|H+}+!usYMG|W8Nwh{VqZ94p!@3ko1i>-EI`fKc z(@f!dCa`+lsI4JR^_ekpPEnOGTk|A@ z(pe+(a1M&r%GG)|`^AuV-?@e=WxDe?crZsaUz;h=NqL*3|7+;pENVVSh?DTzIAZ1d zn@g1cl9B1qa~rRAk|*XrE+Bz$F6$?TYNo9oJZd|))`XZ$^qK5BPr+?X)2OLBroo-K z@Cz46B1eH!1j~lw2R@=05&fK3A5bdw#;9McQYu(X?c+j+r$V@6!$dT{LS(EW7j4`* z;N_p!ps?Ohky3GX1A*~FaOkyUjbH|o>pS_sBH`jx)^kt}&5fGzylUW#E1Z#nu6u+! zMM!k;a(7vUa;;H`9z*_*&k;KbYuzv^Bor*0hgCVd@=RKw?YfN$-M54zKNT!2-kHc~ z5n?P_vlbCk4nts8bA^RCI98GT0UX^@LxgS9Y-h+ICoh$b-SZsw6+^Iqcsh&`2Gx96 z6Oym%>tqMtj9(5Qt0_KI5OID|tdXrRoX96~Q#l?K0#90Mk^v8P2R&D3OfV~y0Ln!$33%MW%dbsZ?orW2QVX2 zp`j9!W*N(Rl&zJhlm9Jh^qvJ3l#8)Q_z@-tGP(1d2!%2%g5QOgiD3oOTRcbtMO+oW zaQ@pbK)QMDwVO&MmI;4%h=J_hi8Yv`cJpy@1Sf{b}}N&vwrsD?B4I9 zCS|QY%azmjnrAGU48{6#sqNOMSyOT?S@Z^-xWf;oa+MS_Ex1pDzX5>WY42sBrHV}t z)RJmvvPx~?4mJL1?vUD>j2th-VvB;GuD`For;s62R9G)DQOoGYXhvDlv4vP)Z%u+< zvPulBa2VsqTqu?iw$KLLhVCxT=*VZ`xgnn4kxu_geE5y}OI`o}{SfirrT=H8|A$ny z%hHXmOARL#v1NgcX9rtb(}HW$TNRuBgRi}gW&fCPopFxJXz;msDF8s_utjVan_6=PBeA0Q#=hgof)l0AY{A8@!COW#gns}pkbG)YHx#}r&H6-c@ z-iX}WUP(jg36;|0*?io@Swtf4Yi}1MXj69LThqga>&$n8E1b;_uto6HWJC?V7(Jda zq38hRKN`-rpUva!90{T$MxS!rXHdPWPIB@pcsgp9QGSL0ELXF<*z0!kDp+U6FBPX~ zD(PTDEi`J-rG}6o*bC3wk5$ugOOhJj1k5}tYc%U?cI1Cu*n@d6D9CqtC3CIv^)xCX z7lEnZSha&=t<9&GpK<@BDN!eRM8^v9xR6-CHn~y_Qzgw4?Zr%QtZL~Pnzx!HG7U_c zM7nXN9;UqD!8xxRO~kb)=L^&bwKeR)m&J;Ol8y4^DBwkJS!2d))@^ei+lzhU{7n}X zb^zo;6E6a1cUva%D}O~B-8N=pnPbXd%`G8&33e7eN&_4?-Dju(Z77@^mjg#-zR28ZAuvHz5rADH|9?CA6$2-4$`tXtl^A6OmmW^qk#^j>c=NEU0I;}5Q zj!)%LY40Efp99)!kmrE;=fPh9^z^JSG!1aha^m$lV9vyY?If1whXB>)8mfO0%g}rUNz*ok|L%}dZ*onVMB~1?-ZP4H7aDhjKzF?+ z-Gn8t{K@tetN6;Em%l_mv#xf(C=Ycd<+Lcvq_|Cp;%SGf@Svo2f@6K&TX4Zo!3YG4UAI_se^d~h)`oLdFY^kqY~skt4F1NzOi@rdF>>R&2tdZV1N;VfD_4zqSW_;G zKoUxjlT=)lsRWK0>o|sE+Q3fPw}0~YPvLK|uYWueG2Uhu1+At*jCq5~S22?z zIWjdkC6%>DS-0?!HsS#`g%eWuLv5AAt;ObCS05Et9_p`vZ_Jv6j7L@LbPR~)r_0iQkHtP{b+<5dC&IGYxF)c5k=$#zvZ}WLc(_;L$ zf-PWqORz+#{4crC;7E{|waAjPNTsw$LZV*?1fp^V;EoD?G2pThZr%hAzfl3r9?r@D zX{OLgiwz*HeRtOglRgLZ;!h4l4`P2moBBAxF5^BFd*4XFg?pIwcC~J;2r+4?w!>(^ zm!TEvPT=5RtvYb$F_MHv@jR1t-4;!OqdX3uKlE)cR<}?h*lkY%$6J4K;uaVd%IN(4 zZK$*?`7!%db_e-4c`td9^OEJ@+1o(=JFECPT^mWaco0;V zX!gcQwTAEE9B8?+W~;KL!UXD+gqh1v8bHYgp@g75y}{2Lssi6V+Vyd)Z-yi%$`rL} z%COSKEa%it^!l3^IS;(W*RpB!TPJ_$gc$`8MdJ#kRi=x*7oL>pBu+c*?>2Y!=k{sk z%-s|Th;z&l;zE~4;(Yd_+)jIL@!K|-7WBw07U_UikHzs*`Hdn&?^_k3gQRknLs`7- zIP;FyA-+DJ0z5Lzk(54b?+xjrnatp8UMk)P+`QAb_3mYEzBX>cSTpIgajUE_IZyWFo!W&fiDy2iDET)deQhM8qK-hd9f~1Sju3f1pwNvR|YV&%h_$$FXJ& z?BBK!_u5k+cn^~Geor;t^a<(qylzeD21Cm|!=TR|2ZmEhL(KpB;4>b zy@jt%rWP7>^)?qTeaKUG?BnA;wyD9Q>%yhqzWwO0Bii*@oJ$-$x)J$BL<(4-*!X~6 zq#IdJ?=s?BqZG8h=1Zr$*s3Nx73trxl(W^V$QC$uVILQtUoI70Xi+?d7(%pS zYE6C25>v%gg0@5uLd`|d**pc&P!x#}LQRPnJD7)>Vh&nUiK*03l%D+dIcvT9xAxx8 z-tT$$AMaV~+<#chot69k8t!kd>vMgEkc5#twjuK^m*wk213AFj-U0(0w3`c6Gd(rE z03@OMgZtRW88|=fN@AW9VL;UC?V_X!A3p~>!TRa_;lkaM4`TdX43nZbYBn8$LBs&5 zBqIPHYbdTCo;&DDHoVI>zWky4!H*(_rQt2P)NRwcHAK`qry9fzJi%1+MPQ;-clW?E z8!pJ^Xm`{{qq=}U3W2W* z_7t*GK|C=?;3&zMHBNcJ+k15F>A{zapSxJ|&tF%(BR1Ke=-Wmp+3&?_+pbCcMRl)& zw{}Pm4}~a!wWnScfusqSOQaD-U#dVrQ5)EFQDRvAWO3aeJTN~!=S#Nity{Iawie_a zCOFMs-qZ;4O=_gAHlstJ#*>q8bujxNDr4;zW4r%18#3iL+aB*F%zBT#T~PLU+)Gd_ zaxVF`m(1frsfu*HR2(Owu?<0V2#RzvPob4jBsorD#KdlJm73Af?WCUc1pfmxY|W$f z5Kn44yWgBHHn5b6#~3d_Ef8K(al@&Est|o-n9+luv%mT?KqX|ukNX%3h!+@Sd<(of z@oXU6j5cU<4MWVU>CT#T8GzC_f50qt!%u0~xC*M?{WF~YQ6k#yKRsEq{<51yY?Y>_F!1=c)oebn;Bnw z-3$(?gb5?_z$MQfs1MRm0mfx0N0P1+GwJd13Y9K#FrXmsAgs7!tH+B=C3GKMQvtMy zOGPo}2L}KlwP;$ZS>F0#t*hBM;ofhyW4WL?^`Qqd2iTsf(yxd_SgHMaT$q zRy_`jPsW@>*XI0cMrutyVPlVV$a#I=BX7@Iqm;xY{%=ycO`NHgqkAagb9hu#-il{W>rWyBQdY9>E@- z)`7eOj-^}gC9G6cY>&CLQoi0ibH{BQZ z?OXo3-)9f0pr*y;hJ*5I;l_u%I*CEQ*&YQtWFMvPJf!H7IY^CZOY<v*!N?yvXiOb2wxxZ`DUwF z+NT*P!cHaqaroU>C^s*CPHZRS&@NmJB!CJej2@Pm`?Xh^jT0dZOQQ?9o1x7YzLcA#m9})0$nPw2IV2O7mT=PyF>k) zSH#534f7hJ^FJo*R4;jne9Lby?M&UfT*+;c;?sxCF!IFFDpHry6Pi`uXf3FXA`+LT z_s{K4ukX)%Tc&jFUII8`g-$b29>6N>5n?Oyx3O_U+jPPjN31?vAXI2u_(5hL7m&Z&!p`wPX zUIOUAgtz_^33!JgyDbuj&=(ky&OJ^rGI}`fmKF32mURfC&K^l1k*;6lpZaJT&^cx! zf9PBZG)Xq1K45_8Ua@H-PVaEN9j@=($Bi1YTm;*n#l|E@R6*Lqc{b(57t>vB7Xazi3 z2P9lL-!?K~DU|dBqC6%pQjj?by&m(eFeshZwRtDJJk7ct$3Ic+tPt;%$}`L?(OxyR zoGrCe zOFxOLjn$DUB9SsBf~Bw}LvaWJU%=ehep*-j<5 z%Bk}*bzFA5N@yj!t?YF){j$=9RNfACrvPLd{8XBx*d0~*~F$?8efyh~tnZyKMlx!uvfG7P#e%&z(3H(PJc zfx_LLzkZr;Ngh3Bu~{pFmN*NRgx=hhb+}0Bc|{VeyttoZCF5`k_U?B#o#D6>frsQ9a46z z0*rJ%fzNMj+q;CaJL|Tgjn$*4rra+6Qqz~S7x$aZy;x{i`Zrq&aya+y6wG+Zh1F}O z@lF#NTebdPLtcTLcgu9p1$!m*Y9DPbcwvtLWdRxXm&d=uPX4!lAeP6#e{9Z&A9@>F zY=kpfugKkPUo%+eytXp!nqi_o;n>#V(l{6D4;JIwPF3_?lgoX$TJ+7TF#71H#>8(n z|AJ|alKlv09+{)U_4^L#8b8Z&HzAz<{C~1Zo0e`EU9B^uA6&3H2%eTD{h~5_36F-t z2C|tBMU{2X&}TtfSF}wh&vXYJ-MQJ#n=O{Ch>_ZTS&HWL{}R5eZ)Ud5m%iUToh(mC zNn71n4LyopBghx^qYRzv>stq$YfUQ}O+dgc>(uOtl~7NFOJ79r>1$&+)5+bUaPtN_ zfxEr(py^RSVpnVMb#SAJG;qsa+lq1^G{MK`_1B*%Df~I}+$%)QiF2fx8C~(3Jh7w# zra+D1bz6K~T-Tg1N0V>ga=7_H0uE9nFQ+HKXApY}B%3y>Uc@+1LVwAFVvvr2_C|9B zmr2d9-Rr#PJ;_d=O0z&H-}BD{76+X98&!}8=X46iMyaCaoGb8jt)siDA)l^ND*3;( zQMmcJ7ptnxGkwJp2$DReJDt!Zlp-1V4euot|LHc*)iXway~|T5sLLJB&y`7ktJtg5`4mSb6*+~@$}+#$#pO2FaE@&DEL}0Ahdh#-la6R@^;6n zw&sRr8m7tF@8$;)v*&)LbI&d>FzI=7)lxgGWsOF~zWqfmF-Y|M_3#mvK|LT8`rvg` zBSOP^+Z#PpEXK*mb-dU0GEi6eE0)_9xCb?w@2qjcYCSmFmOzzILH%k;R*p=AD83^| zJDl6>^me}O`0>%OY@w3O^dELrHUc4QK_VZE{&FX$9^9}+f5L984uJw)TcDbev`eY3 z?!?nppkn3Eq)|>+bJI?dP^|g7m=A$&X6G zK^Np(zf1Gjl6T}jTda2`VX4y<=(gc%MHb_QOt47AE$V>OwctfteCa&&r{ZH1HU%c zj1k8jXAOwm$aBppu%zX9Rc0patnTwkbqzV|>f-;AcQm zV(c)X{5>o*`0j-WNYc#UR!3~^M;8!yvdCoS#ZTT9@!q4o*I0uz)cBT+#CU-nZ?n+6 zVZJWv{MADeW92nkJXI3YO(#c1QO$9`3N-$cz2MltHe*)0^G`HAmg)Mxvu*ruo%&nM z(~|Qr;vC$DyKB?4Gv1_n4k*SAj8>$yzkX0Kg$BC%3w43RLNjQ*bJ^Ky?QF-T@k`7^ zlRC$G{G7l*K8Ra|yl(-PXwy-=TS};SI1?x<;_jp0g<6<-16JG`t-To2HE@`VHmFPS zcMKx1NXI)w6$8@eT9irs-UrV&;%(k_Rh@7xfzL9&W+1w2&FlB4HSW(IC|t4gKM;CP zeb6uEPw6P^o1wOxy>6RBhAJ>o3jcD*_dQ{YM`Z*ySFQt(AkRGu;)Ct|)1?OG_>D-h z8nPv|WGYvv$js87wwz;(VRt)4*!1fApS{Q72@|guUigI05+(BQV3>HbBE#Epzi{U! zy-K=!n|DAvqN0o9myW%6i4#av(3WC0JfIJPr!htTq?Vl|fiefGJqlwY`SlEG&@@hkiLO z2m;QGo2sV7ZybyWzGxmZ>BiYs7hlvS8wE=sJ;KA8!L!!i+J^~zYpTY#UwZzMK^s$6 zi>xv-NGaC}=}fEfm~Xv>9kyJS%j>s>P%MOs4(Ie2{Lc1uG+zB zxo9re<~R4g{tP?p*KO+wj78Hk7-o6qHaq1S1+~YE zyyE~Z=cR(jeTS7=QcVDb#r}*{fiZQ=hSV;A1xv)fU3-5*ILF$>=)Nj=i)upxwt zpI&;0n7U%L?Ksobn&ST&u=;-JgShK{WLS*6NpU1dr;04zWgp}UErKM=&xYt0fdwrR zRF@-%pbFL#zh3C7{mFVLuJt&6zz=&*go;4YKs@KX#20;V+8E=SXoqw+4>3q#cOCa? zd3yAEQ}NRR_n7g5&y@7_&5iIBk0D{Qer~BH?8&ch;thZ1Ji>fXC5V_6VsyVsB8dKl zU4A&W6J}b24ZyV2{7SKV zhDv$JKaK`6qTx~$&HNfRPK^da$rWuA7vGJ^3k|?J zYuw#5aJ5maoR$XQ@$ie90;)uN_fP!pXan-Lp8Lm-9+xa0W{DF0%%!*^xmHvbwS6~x!ey+T=2ze7ZW)Prl(;Nm~0Qu#ZVm!I`0`7VtBpcx)<1K5H-d`nnWvCGX$ zMpuMUv(cC1G?lqu0|!>8Nj-2Cn4}^4e4Vt)kbjm>6)xirVYi`292v@)-9r17U-l^j z-ttpoqh?(_e6=}p&F#*Yu6T=*CUf_yRtu7LrhN*$8R;$KtHPmiF2-Uc_z|1FifQKe z!wuz)tViRX!&ky|ksR>)9K125zY5~gyfQ1{uE6Na)7Vc=T3uFdQLRRGRWd>lhOn=| z)9x3bV_^k7*9<586EVDcU-C5CyL^_PoC)Q3cjcdz>8lV&5x)8|;&mJ}LC_@{U}!2* z5UD@wDX?s=3e}HHMhg`?XCFH9*Jxux-{wERJ()X(RpZ>4@`J_`Fw@=R@vb5cPd$e4p*(D+J#+BA0B({Fy1c_^ zoVPSq%BZWG4Dmwf;&U#KK_(^3SDb0wrA)jv2}PCox+*(gZxt{hKT%-r@zD8>702tx zvHK;99YuVQ=w(=-5`GtUK5bV1F0Kq{4zO|y!L-ELo$r(WOm}gl?`O(QfbV*?r#5;O zUDvl=rzutywnz11TWZd>`%;u)ZNc)LUDhYRnv?;j-qgAne^ndjwuSuck?JCf9>QaG z%{y_IZK9Jsz8DV0x?YjRPCET&3wx=bcGs;IsKi6PnNtAA&tH$RplvME{ji`i9g_J( zM}~BPg4@)NsK%=O4oA?Vd2^I%qMKg_(8g7ggzc_S;-Y0UVa7Y>^3>Z(Ls4qQ4-Q_v zo`^3TsFH&t@VH0G$vHZgTGfZWBx=XV1M7Z;vvrg~A`Mov+Jyzrb`V=VW2=(VRzK{V z3s0aR_2EJ-HBlaWe{|dmuwG!K%dXtAAklN|aVY>TokUG$VgLxG=!JA$KK8I-$FAvC z(Y>AJh<$?z_I$G<3bCkiwhJxUJp8HXVbqZh_%^3u*!SQ+Z|_c@4ZAz?HQMz8l6(;+ zwVkPQf-&rTL##R3t_VhM_s|&C0$ix~ta`5GugJL}#+phxA9IdWb43Vf|7P2Dol3jc zbTCb7(qnC1HUXs{J=6l@!_B4VsiIpcwPxY3oK>&$JL23bh(lws1)YFK*!etC=<#fk&P_7YEj|LET{h}+@t%H~?$gIn%DZHtbs^Mo6c)a+LU6bOQsK;tbEy{Sw ziny>x%B4^<2YTp}k@q|o&A1+Bkx>p+2kbd6gJr>%?iJ!jl_jVwnqYf31vz!NjQgRT z>Uvmu7$ho}KRGxYntPZ3&$e6M%2PvU&!rhWxc)g~c92MSshPpN8gNW0tFIi5s%3d# zJY}o=@@J^L(5gM>E>~`+p1W zy3%du8IL@kXR*ld4W)bKbsO;Euxm^OTr`bXuWq08Dw7cxHC&+pUerH+{}{)EL+e@D z$#AQUo-Fnmr^>(Z<(4EROJb0cwnZW+KkA2v4T|wXT7Z?5A{mq94vT8;WIGO|3$}T~ z{WCR|V;X`7GBY0yylr(Tmp*^mMIPT}Fco(b(lW zsN7(r%hat1k0wX;z{Ak3W7CNntUMDGEGjD2PeJpA&Y>{CP7SkUAzCSd<=qMrFe+0t zr94-}aiy{prJRp&eAxNE(;e#-Lwh|eViOh4nt|QEIYQ0{SDI7v7^&Y-mQiuNIecI) zk9ffu^D1UngdR{_w!OEY*;!FWxjHQkozW^w@qdXl3mhUzWCqWj4|9Kyq1Qy)h4HK2 z(f#)LVWR8hF1G`gv%r=?P*x$?MU_B&=-eYc-yvtGI7=KtXKZWiYk=qS-i;O2c-K#K zF3fs}S{VAsK)dNFVsn38C*+5Ws~qyE2qyaudQ=f=m(SwNSo^s}d`VvwW&o+rdZ@4N zEg(EYO;cC+U+#LfVm|gzZ9@t_@{Y&003pS`;Jx!UVL~oZRI(@`z@9IoE#}jWiI`#4 z+-9##p&*%}*M{U1mS&CG68*4l#bf`)+Dbe=IhZO2(a?U8A ze|{zm59@{sbwY5$Fz}+3^Xoz6&~LW!?YF**;g>^xvz@=39VvIt;qc}dB|jiGVp77{ zSchK2HDRlWNnKmgajB>Si!Id}^-tuoz4MjOjY^ZVEU<-Ibm-4?i0f@;ALaH~gIi^( zQJ20>>x7tmXl$#z~`-DplB7o6P0ksKHD zaySatQc5?)%OQycC{R^WY?O}xbE(7i?!qAapf9k`PqUj4l-G!&uo%O znqZ}icvvVabSs(b&a;WPj8vu1L)T>`BUTo^{o)~Ac)?y zp!>Dq7sX!Ud1elA?Y%=ai!V7^Mvn*Pt?^IJt0*APzW(@JqoQKow5F$H2>8O!&Y|cA zQQ*s~TYR~MhX9%AlCFgzZo<0pZ6wT6_lMR57BRXmIFVKjGi4@bBKTj zGth02C2s1fx ztrqXQxVPS(+(t6&_33A0JF>1)etB~yS{lMvq#w$8rPE1KKcebhE6=r0?D39i9)m8m z9bHHTq<4$^TF2PxpA0ce#7gz%Vx=}WK3A{pVai|OHwu~yKRM+dH}VyOqOXI0pa3Gx zQdB6$Wk#QM+`j)mSM(o!{r?3J$k*UNEmdty_p^Q!sxkjF-J#C0F2xwdQc=U41kOa? z39eZ*M$|&Y0cSM9HUQB2h7@YQJWK zyp%Y8IL{-zr;5`rI23c~-WLP^GBw~pJC?qzxktS}B2_KXQ*@`G!c=j_Y+LwgdNiLW zO9@Au;feqhUQl8q%2F*w}0!e7dB!862s&zN?FIpmm(;|U7fjnFc@%!8_V1{ z26_Ou5Ha^zW&05pp6QR^{Zf=s?Goe1x#xFJ;ejBAEBox0Q63Dc$VFl3Wz+^{TGHN? zf}aasu$I|7&Y^d{>e*b>Ll|{VJ#YKZC=C3kSDwiIHC=`gl__22KvaU?EDg=Bjp3~! zh(+&&k?tTW4M5bH(A6&@Dr6DxzAR5%eU9Xq)Op!$$YlOg&TeP;BKXJ^k}s zF7{J#A2I3n0Io;L;=|8IyAzAhHD7*YU#;IfIp{oRjD9=_s>^Ok0kspY@T6RJ3$UHU zB)YZlhmqK5R0rf<*O6FD)eUPqQ`15uBQpg}nq;)pZr6F08&L&cniNoGUoaUy=PqtToV!N?q=(*FF5Ue|J;f-XcU0AMS$z2vdu?hob-YG% zp%n_a?9QOR6Ydl8r1A#=`YWncx4JKg=PRhLqAWuLPbd|}?}%FD-puZfi&g`nd{{AX zu(+_-ZN{4kZH+~?`!4)5C3B<=22b-H3khzibwGigi@YUK&7YrL4F%W)_<~sDi;LfQ zTy1HI7afx1>cecx%Vc~LwnFCFA4|U0k*HZ#&U#=fqCVy$tzf2Y&gq#4qN-9|+9UNp zj0@DRQ3a5FgkcjU$!U%Jw$v5dGp}X~!nhpDlerRe`Hsp1SRd8(C2mSx+N+)0YRo}w zzdQt4eJ!ErY#IO(kY13h>uXV-3_xk!bO?gg8|^L&KJ|@(9bs)YBlIPAu@k5(-aq9QVh#D@N(EL-h2|+#ld$iO`Xv?yi86G zv4?fs>d@kZPsk&J6hgQkjh5Z9-&C6T*F1b9(-^Sg-tOeBU}`+ z6*C<>0(I}k)p;^_WzT{=?jVHbMHMj#2fkd-HBwW&`@jkS-Z|tS%od(vX!SgIw@kH5 zb5c#91~0(MCpC@JR5$V#K|g1maB9FT9PjdulK1+HfPQiGvdvMhv?{umTpUtlhKEyn zUP7ZUEgMDhdGXKJcjiC^?68}uc=DiQhk5pbOMU(~E8oM5mFx7aoWtZ}n;u5L*?hWP z4os;L8w={j0bB~%cUC?qd5V}-I!(k=zNX_-$!+nv2KzrHkF>e0*sYohnK}kZH?r0} z^2SPt8gr7@EBH!s~D>@NlHs%wx=(swuGE7M{6Enf>%M!E@Z@H=9-GCAZ0}UO2Ip(3>?S zs5veh05YbIWyDu)sPKle6#COe+0E)dKHVMN>~~e5z<1Xya~^gUPt_G{T$N6rkB)9Flf--}j|yve>jHnGXgBqrF%~Ap|13 zFCIsqnzTeXgqu$yJkOHivi%_{r>t8zNy_tDwP`@2X(cncKsP|b9usL{IsH6ZOeab+ zhE;nPcKvAIj~LRlN%NN5?z&1sob!E~k#AWwwymq3E^=}Y0C6MbU?qks22wPlb@dVV zH8{kb9|wmo?RU2ak#UfkHKUj@2jwywvbHg;`etl^ZULcYgMV5~93Pi8-$%Kfq_^wv zlGvb*Sn^SLr8?-}9R^=r7(_Io21RU&pi3Y5?^k^sxudmS!8;CdDc_tf*x|xGVDis7 z5zzAtoZD@$A?bD9hbv4a?O02f7EUgElpRrRY<1*=+O{0w%j5dV8xgvSHEDukV^=%V zgG%oK(@;O7m5D%OKW$nBTqkRep|qh{JWH7`_djOh#&cdL(yN5%Sg)9J-*Fh^yAzH> zepU;|c3IL|Up>;nZWRnf`PfTxRmpaDNSIy`?2dAXzwt%t=g#@eh1Is3uVMqN-dOZ& z%#QcJ%}YPoOx(|K$(8nnhH;sfbciEeXLPd~i~&zcfuB`tLG=@IQ+3RsNfg@ai<6T2 zpb>12%WxD;jE7pdLoW}78MkF2+?CT_F=`O^R}zEZah648diXvdj|$3?Uyw&e!N5F6MF8xh|B@>f zLmlm2F%dHxp$Jw=(r*NyCdu=vzbJV7D=xpfqk*Jk&L4nX7XX@|p{AUK7(Z9gHWNO4 z>f?w~CTemOsTyDBGje^OK^pRj@#M+FI#jxOj-shOMi!3+Kzlh3-KTFowILaawwH|K z1&RdE8PYIogsaBoM0H1%V1^amNo}V70i{X(ecxPi;P>2g?1OSHfh3 z?aS3v18D3hobO~(HDB$#rn|7`$BVu*{leVBVxac+SWMm41NOL8VEHo#!a&(c%>vYw zhDnKl4{%}&9A%VfF#;GOaGj4E9EmxD&EEjU0kirE>K6q#ne6igcZ&kET&Kc? zf}!_sbc$4qNU1p3h^nxtc%TeNovNVu~>PI7OZ(H z%CbuTwuvdRTD<6^Moos{q0X=3rSMT#6D5$UZGcLVr_qZlsuebSbMu?@Krn1B08(3B zZ$Cn(GIl23Zf-2_^nm>UVmH1S4R;rHQlz*RE$;@lh*~P|q|QQvzYU4(nn1^1aB>C8 z5&KU3m!netHapRWL_VCo+2m1-cv4h2~|C2J+T;T zNixbHs_~kO4-jq)TpEbie+J;oo=Ddk^-$n<9J_Z(r+S55vNlb*G=m4?8HBw%t{B`? zySb-YMeNtM4E3h1mb3cAuXFW&xQ*6eTw%!-_rdGdYj(0BfPPdbDKAsxM;w8qSXgmQ z%nggN!{Bd~^YM9xtDTN_vGHzDWeS~Qul03k2_FjzsMc)I!uizWtn55rOFT~&^o2-U ztQKA1!gz?8^P!u%dcS5~0WvWi-sao!26Fnkzqyop;zk>&GQDYE)5T{5OSi9v1gTv;4#SbU|@GnP-zs1kpKNLR9? zx9OYx)f|ON$S;0mBfk{9I-7zCFQdUbDvSfs99q zHkg}mGJ@p%QU_8iVrYO{RVl5*zc@ZZa9osW=Lw%b+|#elXBjx{PkstxhDw{iei~@= z_70p{?8-CTM;|%!CUt*+itw>{`zl^{9IkEA{7Ww;C$V(5Isn?q0aKwk-^I9n{=Ci+ zqHsn20-&)s-7Pd%;&HTk7<|1icweD4og&qI8T1dLnuEziK^;s-a6WxEUeqt)A51mK zRuVpYVhz56U=^Mmx7FvyBU5&&&1>aO1E$OvTs|Gcc4!XO%^^$GU?|w^ZQ2eiz|}zo zv>%)AJ(emH-bx(hlwK)FKJ|K1TD~Uzj|ZU3j|0Dt4oFw`KG`%8(7iH5v!e@5j`N;6yOr4uo zEX)*8JO`}`03ShWQ6nBwcE+i9<{DkDU=M?o?~K>}W=oYd{Eq;L|8@R92V(w{3;fq! z{#(fCOtAurf3Ue!k0R2N>_1(N&u|Nj7w_nNF~5(k`2OJ8hQ(*k7sZ&(ivtP-HJsZ(uiU0JDP+q3LDEr6D&I2-(FGubkSu3oCoz> zg{39cD;8BB$48lxqc1=TMGF||)}1I)0;u)qdT_?HEKZ!YyDN&;yBeqyoP)Q^$Hz`U`Zzu7fu( zelWB%9>_aHIAu5vPv*Ez)0csLmDPMn%!}sE46n*RBzr74^n8Xyq{3)vCjcK6Aj$bI z;;eN)e>*ryaI;3;(p>v+bF(gTJ;bQ@j>|*V@FRa8Zw$% zn)xLAhn#!mjd=2U%u-m}eAmM~m^A0Psw|t=Wh=A#Znb2TMib1a2*>FqdfqRq^5oON zX6kmpsd(?UMr`CNDo!xvc=rA-tH&VJx*qL8d=zVtkcWF*A?bHXJ^x7b7~>-QqW-wW zu-S2XMJ!5L29tpw^I;eLB%Lh;5_wGYJrjKw#^a$IO53B415JrrWTE!D4GDA)Y!mPj zY76ZeHqmETUdl%y%;5L+nFKF}p{u0(7aK zcDwtXnZX?i2i?j0Kp*@^TM>Onaj5mQ)EC8BH%Hj2wAHF6^OZ?Qbg_RlhaH5rXxg2n zmy!0};EJQNLpbL-0jmaMv(a?5U@*hQU~MfPK1>Cd0_R4bf5Ii*;XZ znkLP+p?_{o&;QAFy~)HU;&q(W&d$A~wrB-`A>T>pWV#G+Y$Xy6X(`k>`*(*3DX?J9y~^@ z&W^k{+R0X@|GLFj=L#e=c$FMI*kw7GqJzi`ZY4N}kTA1p8;7lOUK zo;rNTpe`%Y=Lr)}qkOAP?FtK8y@-y~a2mGZov85wY0Sg(7Kvu04l*k=qK+M>{Z=dB zapoI!tlOrE)`L1>)NsN&E1&)y}-%E+Ms48n_#5Hc3ZN`%g zqdMV=>6aG?!j5>yrbI4g$Z(HMfc8{{{NWKv{bYyx6-1|qL2g%|T2^NKyZtu{)m*!x zlNDk!r46UE3_hmMI}K$TlbPBL$}jDSA?%c;?^5fEgbZFB=YlR;Mr=$1o~{Ql*nbKC zu*nQ@>34}xv7?fw;brs%=-UBzE9PK|G^a$JwLMZ;*AJ9wPDT*9?+FY{H=l}QBaSrw z@%ip2KDr->Mk-0RZO0xeS>fI>e~gDr6-na-67_*TiiQuWIi;m7LZvk>`rW<|zTLRa zILNH}&1PD@8PMYb4;B-qFI!<3D^mww4fivCVGnYzbLO0=cY|Tlt|zpHCOKZ>;a|(0 zPV+2wU)=2N37QmrX+#yb-&N`(YdlqULltX~^RO_5H9W?DvIt z8{taH8D%n5;bEz?j`Hy`GmFiBmdXL31en{9HUte&dgvK_$R@+C`&Yz+Ra^#jD?l;i zufAP3t4Ojct|pH%EnZE4@GQbQgg>pEb4yf#?{i3Dvn^)1PG+pk&L$h=g>%3eQ9&O1 z@U6{wF11(VF3^C&wV-rC#f+at_FVdU&Hh`A!kvOGmrQc)tGgvOLkWTz&G3q-nW6-n zucGn|SLXoIpbm(FPWuez-o@k7h4+k*U!Dd`q}JtOO;c6tm0b-aEn31d3jxGr&g`~w z?0n5uvj)LFd@}OsYK(_U{D=cEOAe$%Ewi$^wOFvi@?Q|`9ERtnt}codN%{%OU2P4p zH*=+V41-O&Lfd_FfkCwadlFlzxg#79L@Ltt!^ytbh;($U)1T`ng3>F|7tgoGsx~0+ zSrt|Y1b-9$2bI!#Mx;UvmSb^Nvz?;RK2+{$uzB{9-yS|6yE z{}JFxmNs2L=+SVz3y8mDSl~s;l8qy%(DFM{p}VNG`vuOQJ!T^eYRLy&tl})pP%NTe zUi<;t0r*}&HZ-7=Z04KB(YbK!bDX7>U?rCB>3Y{ERil|kIA?KINj$Bw6`}9K6nTGl zZ}8R^br}!%$O6XWd)@?h4R7wS!NHCZi% z#b;M2#u&PDjYHH(_5`Hlv)x`zwp$iW|p57Msg zRZFWV4{nGvh>5;hqhNAZh?QNgUPvTYq3=B--LHy7Y^c~%0z^T7E_9tKGP`iTKZ9H+ z$==f9;@T82*BJ-3k5*BKT+s0xF$sh*W_eoaDM|`dlP>4)dwL z+kNIU)CV*qQ;-kkLV-n<&#;`?yb!lxL-XM|uWnTDl-K|lX`2V~6S4YvJxCxtwI&9G zC-`C^;#_y~BA*wf@YDQ_lq+r4k#6--J2EnI!>U8%Y41Bx8O+Q zbehi{FHem;HTDl>*5qQn@hj3+BcLr1TzDx9CQr$;SZ{Vu0 zllb)_uTSl~2JSfcdUWgHhh%KfwS^66q<-DFUSVk$oL6m$B;o287DQyEqtu2 zKrOW!DPFv*#d+tuDceb#C6lJEZ=T1Zf^U&;ekylcqIQ1456guXrGM>o^)KmYeL$g^ zgd1eE_mFoXSA_Bu=%4L6tuLe&)fCLUdjJC~{Qz}&>G+2wo2`Y-%XSoP-cOqx50=Z% zO;;@X&BoClpj4NmKH_8QHaPDpG#+n1JQOQPIvyP4O8PkdO-uoaqIlf zdDV`FAqC4)G9^!Rq6p{ZG6T}Q(y?XV7GK22K8?3rdWaHd3Pf7yxM4b~m>Dp8iQ%f` zP0wH4_thT$*UDYC|BmtA-;?;+I476WHNMTi35z{k-))KrUy5*C56kgei@V%3_Wl1U zKTbp)r+L&VP1fA|W0=INacV8F(juW|qu5e46vm$~EY8^=Vk#S50X8R`f|zek8OLKN7Tn-ZDP?@H;p#@V_01F#Sw4k*Q)(Gy!cg4a$)Ny)pF*Ml90pQB&6C%5?^md#)dm4%yLVwM@6phoLax>$dpo^NyLXDir4D>~$t!T) z?NCAUmB&xR?Jals(`=r*-r+H~5+R=RzeezbUdorlzsSJ498Mo&I&qjg#ZB3GW&$5K zzpv8Q;cgD$*O*2UMPb3JFxh09lK&T{opaFt|ISh-NyU6PWiN4arl z^R7hqBdWsO@){qxC13&**PDCszIEQnXEAfZU}a5HwM%bS4v!87L#K9y>_Z)=!w1W! zkBY}wu@|MI!5Izo_>NdoO}0|3r{i{KK!=Y`3fQXB3~8Zs)!sVq*+h(wgtsapjc|4} z^+h&wbmvA@m-aR7OdoN4VO%O}gvLso76 zKNTB${q?Pv4TOrtK@jNR;%fVXaXOr4mEZ%&n0Fd0o0n9hR|f5qp^5qrsv4A#5F3e{ zF~j@uKm~0EOKO{(Sa#dN>W#c*rSBH1MK7>f^+l-fH=>+Q!n=nBH?iXxh6-Rw+eZ_V zy_eA*0G73cmg2{kT$vm(kI(e9#q!`Qxfb|m3K?bI%=iYWh3)|D_wwIh9#+c@?dx^c*dCW1yrrX^ zb<2%hsi`@A{pl-#KL7Z^;`xMU{z>@L7&?VQY=%4Kdif04iC11AzRto6yP2{iPu z-v=n3*{OXN!szaRnmyeXG))IFp0(&m%^5#;>Zr_aDjg_(pWlsbjy9j69+$PuZ2g!z zCT$=Hoq@8#fdXC+O5A@;3uIh5b%W++bMnJq;(eqaB3?wCwl#r}Vw>#eoueRTx}-4e z%ysw7wBq~ED5AykPq_vi6KE21D*Z3A-W13u-*ob62joXw1=G!zlbF1(i;zj*qWUgN ziWm-NAu}zSt4Q3)xv4Gao7VAC>$u%1Zp|Kpda;Rs4l^r!dlW|BiJ5SryY6AD1r4a8 zk!Vi!0?rrwpr1{Xiq9Rp#EXOms-P)z`tD+i$*VNB#e9P*`G!0O^0F}%T^G&=5J%~{ zCFLvU*k*TVbLq`EmFv~3Z~j2%Shgh->Y{wm=AHD+_~BG~=(CC!(gjzej6_vz5yRC* z16wA#y6`P|Pf4wp7B3E!2^`Tr0Of*v4|Y0QC((KpN%$N+@%HYx#N4FK8LN`o^T@&^ zlt0w}k(AV`uKNN`=d78w_8om)42UusMLFiUtri5ox^8}z_h)1AyF%p^2+tx0SbZAu zI!<*(F~!|yC`4)w5$X$;d!;$9OqAL?XWo6MJOT37x|~qy+EeUMEhSeedigTP95;gW zfHU`$31OZe5`L0idv@I61ETl-tQomqydqyrc?#1xfOHf*zawlS!aLEIg?tu+nvv>} zD-cme<8T20t`Ki(=O4F==^nRL=8ABli*#!(brW8r1OwXItHmTTuQ06ZT|B!I44m;g zZ%h{!DkeIUl}g?fG*$DKorl9Etz>^KJw_P$4%Q55QHr*1S<|luFdyh85LtRI%R%=R zt~bHbGj3Ynp+Tk#xdFu#0@)v?vCbGC0+ty~o@Nj~dFh4?ZkSct@`r@f`U?pu)NBxt zIE%cQIW4Cgk0J3p^UcrAER~&%-P$MJr4&UZSxnI+{gmn4*Jo68%{|pZp8AgRp4<&l zyO1!eUJ~2M?ra6Ju}%w&=fhZZr1LC^y;|jMd*2=Rn3A1dT3oEJ@Ex@Fj8ZDCfV!Nk z>7^u|3kAkvavPBYtY(={IbT$xJ+3Qvi?=YtT~2zAg7HB>VC}I1oZjVp`#TI)K7;(> zlR~O-yx;u!i0h|@-nEpWI*UKK6r%&_vLx`tXwIQ&6yi7-tE4qkDbzQVehm z*O~OwE7(ObIT)SW}2+(q?bcrj3;Ab z>2l$6>NmHo;IkNe2e&s${MKU`6wM+9LB`{-LV@P(|d6q4BT*S^}``^TjQ5haCFVuU-srEO*%rG?`pYdl(~ zh3rf_tvzAW+E1-ow@7I#AD6h8Z)eiLriQ7%(f zxWEz)#sBpxfPK}DM^#!X$-67;JOz6D_*}jyqYWUYet$7hPO+rNsbbl+1x@qOfnp*= zl4&%yQso7MkN&L41@lKKu;An4`5($ArF=mWOj0!uO_8{i41?a!G3TUs0j8tBW#lrE3}0Rs|>2m%VBB=itK zy3!K}NSA5@=_MibCM7_q(h`b*3P^9E6A+~nih?vjd?sgRu5*0eYtDJkJM)|Q&F^}j z{B`eSXYXs@`@Z*HYu#&oz6GO)M{3b*5SGWEzPcebG#i`k@r2$Vgwty3!+nNz(kF7^ z#ZzKEBd-b?ukSz3a6^1DbJ%hwU+B!cJ^{i5Ei=y;fG94 zH)MXh@M^gGM=o#eWVaok50`*|_^8_FUkO=n_$iK-=r>p6HwEhW*m?h87(T{ZSKi23 zJvnWZ4ORgFhHaBZa}}DD0UHhnVJdV}=*wFvyQgTQuer(@ZWP{Hmka(f&C1ch1BJVv zAg|^$;wWKtGQlNvdHr_SC(M`Y->|9{DaRV*i(IY6rD^tPJRF#FA>~YqD#zFT&0tWo zxZu0jwu-Xpw!};ajHKl2-(b0jB*zhC20>7qG>b;R3!Hxj6B+axq*J`}JfCw$bIe@c z3Sv5PewAL{%mHh&VlUNHL~kpCR*ewO{gntFD1;(2@g!L zW8L+!%*-ilhc33V7yR|!N(MdYq7=s1UXaw6ldjI7U7fTpvPiv1kEz6)blFr{iG^-9 zUir2&*|pc0T!>E3>y>-l;n@3=r22^GSVf-E@*73u|jCn(T z{hCVB6)kUps_X{#m2Vb>X|7V3J0Ddx?#3gu!a90I1?UqG?=Wd((ao3Iin(GsW|K2hFRGIxB z1yrO3OHWLjns-?RCR}P#cUO86wq$>Jmx5ZH+*K3>?+H+|vDf=cvU8uhd7Tf%=*pEs zb@$$H%p4MAeylqT9bP9|?Wp@7U#t7t7I+D#5&3$M;h4b=Z`9Kqg-cf6uG=AgpEBYd zu^Xi`Mtf>GW$r18jC5FoasZ2&C*O~yJCB9sGKN%peHFXe>P?G>l7n=nUrHzC)J$s) z2VSmHwuEcZ%bNM@TpL)1I}R~RVxA8xs>lJoGgqVptJcg#ORx8{GaQ^ zBCW%xihR-+X@>2G-F-fF!j7r%{ZjkHU1bf@eL%e{>FC~lIoYJsr&cmC5iOWFrlT_w^&j-Bz)JcxVU!KtE0wz?ODu*pk02CeRJyNo~_3aH2Y zv=E>M_9w;6Li>@LrZovpm(WUdl==R!F(p!GslB=rVxFQag~g*oeQ=>H)#X?YbFtR$ za^=lpM8QvZHH6*QwZ{}J0g?#>5>MQ;LR!oll`YK z(h+3Wot8iJl`i<^)&9BeltJ>w*LWT8iz%gz6cj&@Ju9?J@Eiv##k{!GIDQ`<;gKZN z1b*SC{1Cjpx6XPpeIvj0U;}gRn$VZG4k;yc+L(z5CE6q#`0NyeR zNkqWefgFg~GrrV`+%L=|#_ZL$kxL%FNjersO*65p)T)`M#-Szte!H@5xl;w7?zr!r z3kn%XfL9sUy8PoGO)h$_zQJ*;-mDL zXrfG8jmWuauO~l!e$}s1OwcFo0t{s+qdzuKk}wxBygw`t`}3 zsZ<-iuLtp$$D#0-z3s|2Knjdc7{&}Bfy17`$cFqi28MOFFQFX3v&Cf-G1HJpvzHt% z3Y}Z#twtQwv^Bc4bWP(cN`>mVFh59tU?+i~22~3nf!ohLo{R8y95$CnZ`O;mfd(XM6!WN3PMKb}l7Q}0%IQ|# zUR=W{FxhBsf|60g5^2>}J93a=U3V|%6UHFB!iv~zXlh-j{$h4Qx)U*+$1(kQKV^O8 z`X#p91c+ey75=ez*kZOmF%xio+pj~$XpuLAo=CK)i<^=b8P;WWwZLO;tZ?b3nPn(4 zmmDu;pk+VUxCZr~tXt#Q*zC#~_Tm{>!XeB0bPd5NwrHS-!f;;7`k-Bem|=xDM*yh) z@UD+mJ?&yEiFk3GUi1+I0}nDoES$UDbvkt&bELDBrw%Tjfl&RT-|NdS2$)LC^?vt* zY56IfPKher)-Bh9p94u3rp{DhPMUwRoDaUX&m6oIE1eczMso6On4-yUtXHpWAj{<4 z7ouvnP@8G|>j0qtd)xuq%C#P$joevV)Fwsb5E>&U=v`HM(ejnJ5&ZKs~zTz`G; zw5Dk^XG+RJTjB>&zH-jovGzRbsq#k|Tm0b*l67XM$^ouPW_6Gl2YU8hVd^CV)rd($U@rD?Xjd2wCjT(eHg3rc%xczR_#JbTUArXODlp{qX-;qW6W> zweh(l6+r6nDOFYhza@<1)J>c0NzmffRi7H-G^PUffO!!}F759-orYm62=g zFSb{uA>anzdC_n@G=syx%d>uMP74SZ%b*jn6p9qA)1Fej{1kSQs(9=hh&rV&3g91E zYh@N>^0f&cO|wpOJy_gr%^!KcCj-$JPSaVa)jW7m^iY$B2_sX()*bD|CA5U(t|}3U zZsyUtzR)QQNk#*~g1O5sJ2TnW^d}yb+B~THq|NMoTA?FWzgVC3#s>RUDKadWrsrht zFdv_f^OASd7f3y484KRy+qW)Ry)E%&wer+hY|*atf{XsASo3V%;O}Q`$GGi>N+bjj{9n*#^#w+N`L=3meOckreZg>~#`7a460DGyg86xozyYvYuufO6c+l4W=P@KYRx(O@%0Oyb5#t*_T9t<0ay;)-vQx7T@ ztJAJ$>z3K}yCB`4Wa2f?L3I%YCkb6e2`K3^GjG_6c&C&^9hnWCDz>VUu5uo@xsL=? zAKjTko!X`#CNE^g^0jFSNRw=HObWw#_9Vq}H)=M6_!9DeO4zE8aP9Bp)aL7c+-sE& z?DDfnCn%P+Nmwn;I84aS*@m*=Os?ewy=D_-MJIN5?!BlOUX|H@voZ9lJ_-$-Q_lce7ciE$5Gxnyh0P=vN1nW;<24=;4Ex?ZQ*&qXRx~6CiT9a_Q|nM<`tU; z{K6z;TFor$`Pp`j-HW-a)#=YQD!mM074(U*ShKO-DA*E-Ol%DW5K)2cQ@9YK*bPcv zN`bXlu)~}4%t>Ay;6`ZV+x2(_1-U< zBCkpH$J2aO&JVcwjpX_a3Raz#XJMQRPPFYeeSm@E2Z2uO9FK?X6E@TWefU}HhpJab z7t_2HjDjj4OtnQ&4KIN5+6<;TJ`&TS2$BZn&NZ(}I6tA(n>|Xe+;Kv^8tVT<+t^u++i2+ZClQuSXM+4tDNYdwYo~)pPH)W)~nedT% zEpg&t(2p%^qn(T7N<#KBn)m~;lUoE#c?2_PVQH} z-oy5&5Lku~+?dOo-PL+KJy4f$61P$x)zN7Eu+K~)lZl7>Y#%tfYH1Z_ErvxF7yFxevP2R!Vv@cS;Q3uimEH^I zCL%ENe=vNn0d()2_rY_CFQ2Bl6`b9z&QC>#xR~Kpy##Ksa)L%6s<;A4d=W;!bF`5k zdOEkG?QHlt=MLYOCbeZh8}Vus*h`S{v#Wsc|_FNpZ{1 zf^Xl)tVl{NMT=frFkQ@^lqH;XpD$pB=Ob60B`?qM%Y$OJ%;8g>RK%4@FGb+$lsY*x z>s#BHN~e^Q3J>y8_nQeqcM8Y%PS#cxqG~)>o;>@455+}fpPk%`b~{;?Z}#ND`XkoX zzPr{99Kcs24VX^t_YaDv!wcc)_-SMkd)%-vYzd4qMkpuZH&p9H-x&pb&ySp8Z>`-y z`Pi;HfZDCocq&W@(?-R#7X>N&n!2h5ZD~AmJ!uF8F1{BA_}cGri?^onA*z0Z9)CE` zY3S4bH~yU$am)y&*v~I&sLANW*5^LY*+@oU9e_{&8z!J=&p;rq?4)x}wCpJntnDB8;(M0fn;vUbq-gDt9ErfhZnaL8nJ~Vay+kh6tK<@MiZ3? z8rb6*XsX8p)ERKKl&hkS;=#!KGi|~cc|SU9`=iq}?NN{GB9SZu$@L1+_iA&;cuA@E z>o^EvcK2V11rm!RLF-wHtzq%?-PYh|0p7b=p6el=RZlEDUpbOh$Bw^$ya6&~>{@lp z!o7lR=(NVIVsRD?DE({pxb3?#%Sz@u`9IIW1{>j@ozB=S`)D1ypEzX@;`A<>?~0u_ zIIWaOqG*@L=i8#j!+xGwHLH9Bevb3VR3uKECp()(jFM5`iKB+Ko2BXkO}OFY?Oh}t zdEkxcRnWbS={Q8Zce2 z6^oN-yTWJP^?fgzBZEV_`&gGYjI$qgX0kH$!f;DENh+0O>Lajhb2NO)`}5$dYZ>ls zeb+GdvyH1#2TBdb^o&MNetj;_kxzo^QHh=4?6ZrNb^z2gh#yRz5|h2~zIF%p>P@er zpn9v^_r@*mw$tWbqu_=dmG3uk9ihy_CjVcGR&ilI7 z9_CJ+C+(4Eo_K6nF8Ww@SIle$)Oq~cyTNfMz&6sDr@^(o&h9RCOyN-kw*)E0;MF$S zM=GzU9uN*fL=D@T3FR+U@czI-q)%L<2K^AFC$Q;sS)UZX6_*6mN!;pWQnzD7z%&uD zqdENil5|fLLhyZmllH20=%N+&iDhC-QlMW7>#`>YH7+%3uJ>*MuOrSfD!BACUcN2` z&=c9(+H4fIZu8)J_Z1kiw@81pG)ZL9phl?o2c+n{>7(|z)ljnItl4_h2kv|ynY*MRX--=lGFKOp@_@3RUM0O@Qv5NxPcbDPe_VN4zI*akfte8>8&9cg% z&=;0n)$L5FBFe@G2x>_=|-tVA?8Ss*#4lZPiWCKL(!Sa*32&?tX{#LnBY_up+h z6;et%n_&7l4f0H@$+Kf;%v1eDTR_7_h7%BKji8AhW?o*mNa5mZdb%KS7GdrXF<`E( zh(oFcYGOh?!f!Pxevo4KrsoZJM)j&WC9rP^>I69xafwj4*U}6k-IN5^ByRJALmxBT z)$Hr4uB0m;_cvk2rMtkeDl`&Q5+5xaf297IUiWRrPNykISiK?PL}kVA>NX1dXx;{= zDaPpWv36{S*AxeWi?<$UYnVnW4EzwL*Lte90qftYrZezhI?}?uk5pwMs~73H@cs12 zfb!VYJU7Mu8u*1o#|6?)-N3ge6@sOfjH}A(QsO187@Hx{M&cgs1>;vPqa-f;;F9y_ z-4P^Has5M<)J$s1xgG|UiT(?gzQIw1)}4v-21OJ@y%10e_=*c@&e4~E zU4z=@l`s6kz&ty7T@)-Ngp_pA?j()4Y*SYH)KrpM*YN7lEm>St&uR@(e|`M&XwL2NaGl^;e+UGyRzqw{ z$%}?d?AmZkcFFS`5FA$UP7zhO;`YbJ%=fjD^>W`Prl9a`i1hUVN8$Ctq>h9R@{#pZ z2Ie5~*1d%2({+v(b(RHzrtXu1pqrz)*bzQR9#O1vdssLI?hOIZtN+fI(Tu~^Zk}fx zYTL!o7vrkSJ%q2yF0h@{nI3Ck3+w5m(=rmv@&l2%bkWqakd=X73F7i)s;h2~iZplb z#QLPz4u?z3cKZbO(kuR3-)u!4q?FdUu1;wfH*vSs@pS0OG_J`>n~r0cvWsjgaET89 zY#nRi@|##p@=) zlby$hY}(NR(eW650j6P+!wV+6;nDbMc_2Vd{VoHetIA-LWw!o9efIJ%b;8ftYdd`p z?VBfMHDCaI8EakvJ#SzQ2mX2X?U`QB<>Fh@S7Y5{)>@HmSChA}f~*zhxAjPtD#Y=O z5-=zG>##l8wj|YNyleT{S-;&jc1iJv^6e~k=PBbZRi5v$+AhWSax|=^?9E{;NVge0 zZ8S&G>=!cZ;K|u$K9s*9yF7=XoAgjov7skp&++_DmFsg=o)h3Ek;6Y2RJJt>NjHw? z%{Sh5I=%mqRm(%jfK65B!g6#AQpj2Lo=}=HEO5n!Dme*SU~fx~s0&U2Ewg z7H*;q(V{#{(9(>&PtsBxijV^H;0&wmVfxOt_Ubg2Ck&yt`qFd0q;0J=e6c;BGjG2X zq8p)6OLG_T5J zw=EisL*1xDKp_0lmD%#t%PT_V_LcJ?m^!RzVC*~1cgNo}K5?qLk)hZZ`D*z(0fqli zv==#cQ?6SiCWQH|UN*4Gg!n-Kusfd#cq*m8Z4oh*z3~qyC>{_O z9{DW44_1PM=DLRG4O_~4vUM;RGu@vvpFp%f=qq(nkH(6d`@0Plk6hpAh=t2_R! z+2#T&yP~G10sd@lTl+r@)mKOR$|bz@>eqM7)@{vX3=8BqEA?-DHcT_MtGYhz>Upyl zZ~%iT;2oF2Hx??@?!2};@A_#vu+uG^sHGb!!$O%VgiM%#3nol)IdDqOPF@E+6DKOF zqt+^oHr1>&hh4&Ls+Y><;$sNR?dufLgi8I z@(MX87^nGb^P;!6Otzu>DPDn*yuLJj@@ECc^4>PY3_x5B~Q!0SkCql_mU5#ucd}> zj8(5$%($$#$Fj_19&V4fcrn;nwb0>3r)GAkzn<}4^!a)1Db@9WfeCpm;pyME0`AOw zv-pDn)4a?et#{h+=ifJveOr3^-sgxOGR%`M-+S+`?)q;u zy8aYG2>r)&xT6cS+c^?;S_RKHyC3!JQC-JY8@tKt4ds5N%Knw>vISW@L$P9@84R61 zeysfSzx6=)*Ey#D)*=3})Bi_#vHv*X|CH7VmQAt3o7{rFD&Ke2I))=(kCwVUkU7*a|OaR`>Jv3*H;A~bpA?arl6Ul0GyN}MYSsGEgSRv5sj7>i3$bwq=*eY z`@Uu6rdGi1)+U8E9nO{Jh@#uvJ@1gsugW!fZ@HI`Aiug?`mId|1j}pks-+w5%4F>G zEoKm6b9F=xIdy(sW;Om&Olj}oD&8@ar@s8H9a8jNhtfV+z#14`5OmhJ0A;g06w&l? zsQKh6!+rF2#rHEJM}|7PpMPtALBAcUuGmJkS=pdwUhtqM9~?-{mRD4NeSgd_h@ZFoud2@pfGvHMu|E1 z*KhNW`&2^kttRQB1`9g4rmF_6+m2MX*B55K(KN@1K<4A;zy!6Ih|9UKOlr0e?FRS1 zNBH=k@*Mr^q<{6mUp??w5B#$p$YVd>wVpra^mM9rvB7q}fM!%`jbX8=0KK`|68q8D zxi){87_R?%_$5RVu8Se_f4df7YZ+6q{u1}LfFms1)`@4Po>-#MU{`aItYz=P)Rgu@ z4nZ^X6@lHv)#Tw-o4WP=dQPr>8(Fbgyl8k(l(GK)xAupT-z}xPznMeFi+)P`J^1l5 zA*iUp|8c-??HbG9p469qGl!lPH8WWzDn4AWDk6TG;{B}+HvY|0Qu)ocyCG8EVoZol zzGF-)@*$u3t$p6`ceC$z+m5mLw+r~|V*a`_e;;!H9f#Sur<%X?-ijB?|H_VW>#gt` zDnioaYseO*AHupBACXh+VDJw7_9XlFzdv=O!_pWdGiUZ| zpxsj1(-J8?G6ybaS2T&3c_N?^K8n+4I|Qq)O8m*V{L8uf%TxV_ zcluWh;UB?~zXBqEMR)#+yZseJ{9iXB`ek*J=Ru>eg^z*^HA%f0Gg^eW!bMAn@RU-H zKrd_hYQx=7YKP2)akgd~{>k~q9-SmLVLUEr`J6#;>%sAoaX{)L70Us~a~!5> zce8H5+WTTHI-2z)`IBi}yr%Z+D6-ir{Dv*mKJbhw0eDWj6pGIyOG=K1y>grvO>M{! zTg_i40qPC4+RSchTNg%A3KNG_Q&(95eiR*cS!nZ#2?i-iURzFe5!0)OyDddU1^0{j zbd;0bG9PB$7ar;ad4a6BDgJapYcD#{xLu9kIRx)^8tZ0wxy(4TVDN^Z^zlfYf>va> z0S~|pEq~!P*|aDAAaVi1^$Ie^2JY}>V-qYhsk_8A?PZ_1BbXLI?IPSkDEmmtTo|o1 zR;CM?3n;{5dPv8t8SYIck2am7;P})!z0kp_ZK_p4V2)UJh+yp?&vZ5p|7sxPfVmV! zhpYz1x_)PHvN?s;nJ6=toh9mnWTp(Yh=Vj{MC&d)AO%;;G8}^4giMPBHzmg8Hr zo-iKya8AWzY0tI#pzn-YJn*iRf}^mTVaDc-3Cf0WeKkt zi(Jh?r_!Q!1?F`)3t^d`;-dkPLHQQm=aY{!_Sbi}q&nA^blV7)m2?|d0_0hWSrg4) zGLxQon1^r@O#p|`^@(izr$VoO%5ZKauY}&7U!+US>eXf&qAwC7Y$FI#$&q@G!+LNO zTn$LjR=q+N@A_q~f+0n$RP9SKKhay?CGEYQ{rL9yPU@;iez!^6i-TJ7jan(&RevlF zKO@HJXATWH9w1k8eMHVPaUPmT;eE8&?^!z;Mn_K^baZsI8IBSfj`!3#_d+$pboH`9 z-C_qe&xsH)4I2+P?Vh)rQ{GcLE`7-#nxqZSa56Xbt6$=Z*aZ-|`H~W=5cz}YVxt*= zsDr}jmjI3?qn=av|1gFA6HL^9*!%y+=ATcXx52R{Y8@)`xv=Wa@*8%84f5&pL$)B` ztoEA^Myo|XSb|eyhgHO-&L0?faURb6Y`=;!GOVSMUP;xvM6j|2S`sw#;0YH`o}~pr zlPHvE5)}hLn?{>410p?+oqrf;Y)}a{o!vu&=N}hLZDmtkiar!qFh%%76FYT#Wb?W% zOsRa#^+HJn7&_a%*%$jcl3KZL?b$1YKW9`EvDsi))EyI2<<*6;o1~!n#NGJ;xK4yd zG+^m!!BdT{vo-G0MT?4!Z=%1TZ6g{vqHPch`DqB!s#I-p;jLDp0V{}ts(M7cNHR-{ zfLqXTGw*zjYQ(jCGNv|-AD5+X%o-*k>N8wAO3TbP4bPEe)#7ksH{FF~zqam5@v0o7 zbDgX!J+#Y=!5Io_Bre$z5oi3a0m^-7u!CZv1S??i$6}MLSf*m#juy{As{L6!*KT>< z7JH%=t_3ZD%#No|vUYZ~=79t$Q!oz1VizFgr@^MM)$xh_{G_yADklq-MEuY$1smik z01h`L7AV{pZ7JwU^AcXu)6gerf``pXia=4?HSoO;4_xba;l$6Q*^4um*x`h z5AiEyl(OZoe5U(d+eL4WcqI^ncib~g(%ilR08`1G9QXi6x@rPQEIq}zON@Jj@k=4q zOIRkuU4f(WrycotHb1XFT6EF!WrPFHUs-^Ln$P%o`v$Xgx3|-2@O!;z)R%Nuz1-V; zsFxy`B|-VG5cOr^$M|!$A?#1EAhUqn-o2GF@$bwLO`p2|U>M)zwm0#kv_1xhhZY{n zlojI^3#j23*|iiI9Yn7J`EbX)cD1UX3cH*$a3_ zPrvT?WVaj`hqf*_u~!g16;;dAR?H+ehvX@Y0 zT(w9l93FPS&dwYcUwYS$+Wb9Z{J4rPPcKP!sK4=+Sr+@5igJ&Y0n;ev z#ErGa({|p3`)|y$Nw&js8H6CgdAq%iKNy53hr^->RWLWj2>l(J>MDT^Z0Ck)cr`op z$*^85!t_q$>p!ywruW%Gdx=5A3{Yo z>H(#-tC44;hWOm%p`gT1CV3?3HT;%BJ(i*Rvt*-*PHUS<1G~W+of@&JyoEuJ_FQwL zBl{)oHm1ij@JKRdI5*0UU~9&56&iFB2X4ih<=Ne=C{4#k-q0{ZuhBo`FYgUh{tvHw0mTiWguVb zYu*M__r&P%rLgk!jACjkNm5v_TF$iDHRi2>9dOVWCg~-RvBK2Rgh^|Xb0i|%w45EZ z0{!}E+8Ct4zs_{#Mja2eICk}z-#xo&5B=KAzAD~M87sW$_c}=Wb%KItQR<9EBQj34 z^YM_bY#x=Vyoe=_ozA7jMl*zhdv>1B>E@2nNX1EQBx(;56|?KU(v5r14kqxv7(g#S zEgn7&J=Q;WXljAA)muNer;3=5*LX2}8@;105A#3!!;M{AzYVGaGWaty482*22y zX6DsvrYEk+(dF*fSmM@1<#G*dSAx;*CQ>AuQnJNbnm#8cH613J#KJ%2Z=6_klhdU; z`mq7Xm|MBQ3}26FaO%wN&L1iIu2IidTS>(Xlgu^>@Hh-eK+^a=qm#U#v2#zTNaYC2 zkEjuX4cssEK^`^Uu0`9(IhYTQOf)sXfJg!#?@zPc<;*ueX^+ zCd=PPC2!YK*llJ2memkXqFa%R-kXD{5eNI2hE*Hl;hu zzVnUQ#jF>vHJBaHj&w<1U~E(&p@;orUIKQ5u=oA_tQpGy`gYjkJJg{m)xf0ZPV0FeDC%hGOe|r2=|(P(0!pJ z6jH96LrT64)^0!d19!Ov4l#!&9XIV5_TNx#YIPV0{2?yxdz92uyWc=`is|`V>?TdUxZ$0 z40=HcynD|iotU?DyvG@#XfDAcDR=ZvpSuERpW2`q-aA~5!iXp+J%&u(=Q3re>9 z`Uu~kh;-7InZ&u}f}yyOF1({jaTQ7w!Qw=(`9fX&!RZMJm!*4>rCdi-8Wf66$pEbJ=Uedz@qR}uHdrN+|x8?F?JXBWBzMV2? z?jY!<2(+^@9UwzFzo2B2^_%EaPkRlb*RiBXVmphXNZ>FHiAb#abZ%CG@dyZZda+O=@HYa zx~dRH^EX{a-6>khSt*vIe%f+5jwE{BCEU?c&K_nfhfP{rcoI5LFksMq?RZChAsayE zhYzUPuN3YKkD|)O0!&nVqSy$T1=A*1))H?IhEFhC-+DR6{z88((G2|dwluFE+qeIs zb8y;lb#*&`rF&21M~vRzFiQtVpnCVCfnPTGZH?UH&0|6Bc>tC`Fu{VjR(er z9@RhHkv^DuWUt!GNf)MN>*AMCt^O|s816lj4#}mSFlIY8P)u}5@ie$xGa$O`6#r&g z=^*vU=I>sN>5Ti% zWcWzwT)T-$b}O)zg9)bZB|v9Ou~$Wk^nKARV4J!Iwb$EVE!A#Ga&ppTn^jJ)w2&(b zUV~e#N=4Ckv2(m7#G!9>qnf zN-A?Pevb6f-}yw!R*cCLx~y46Nf8^oM^d8n@y69Vj$@|zUHC5aU5)UI;NZ1Eo)w6j zjzD+;mN&<`TDOEYr{zm!9;^Wh@GR1_{i;VG(}f)c6>{Y|z}iXVPt-+7I337@tI|&k zS5)E*%K0^!j5C~j?)ZdkfE0Dv$l^JnN9%+e3IYmD#e@S-&$3jPP@tt9VU%2j*wMS` zx;fF{FX!XRFF1s*c-B*x)P|SxV5#3v=ZyCfU~YZg?vmmvu_};;N9LU3s$&=8CJw|4uqn>=c6IKn5+-#HYCe64ZqJ`UZ9;#C z&H%8x)ZDY<^iR~wmWBM`A43z}D$XW#`7sBJ#ur3kS$QToi0Bq%GV%(%&ym3h+5&OhT!nnFk zW|8cgK6a0|YC82U;X}QBQL%0vM#Owiq&Ib}z6-kZdSndi4Vnq;gsOL-cX>WMX+Ji3 z>d~y3!;}a!%-sa~wGtR)(py)YwgC?G7E34nIO{gypyp@Ycbi3QEh`Kq?MHdykxr%X zz1`!DoGg-$PNQDa)lJgLvE{nB^w`BM9uJa6AF{H0=8 zbW-A@zkz$G{P!^xPk5$=!$wt)2xj)99hnBAa#?nD7q2*0rF^`)!pdRONsWZ|sLQW_ z&I<^5;>_s;=?V2F5;YN==4h&4B5yyIZ-5!c_6Z%KM}Zuoz# z4Re&cNa3yuxQ%suBKDl4wtE4X@IBBi#WU93%nkXa{XTX_K+}#yH-0ZOJ}ssSCLP^g z&i_!ZE1!A-q$QNs`=W43q596ra2ItC4|RG?uQC}jW3v;}ZYf0z(8iz?wH`=Jcy(3v zlw#<0>1i%d%X5k0a-+}yi;H4mgd zQ9Y}-WHjI}n{Z8c^wDp-7W^N(4hZ`E_`llqp@4a7u7jCo zFg)&QV!%Mzt3*>^EuAlUQC!2Q!C1zz8L}W~(?|7ggPa!6hOgh@en=!7**g_&K0dTr zqu4uC0L?DuN_{RFii0#-2~rc}QAyxcMb&G(RS=u`up8m3* zK37h&wr!_NM68$CsVO=SyuQud9@R6#_Xk7N_by4AJ(&qDsn~eW`}3clRR6E1kpJlf zsD)2yb>6)&wkzAOT&~3A-)+mFLOyvdP&@cdp4zMGXThHDFzS0|`hCfT|tsqccGY7(0ciqMXK zB9ARCcK_DJrT{HUPMnRITuJZ8{B@ zLlt4orG0!+;FX$7D#yHjmbB0oQE+BIAI&dxq0wF?v7W|Z_knfab!xalWVF;41|CTB zl1faAH+|d@m&k2Ecb?Ry41TE0n&m}xzdk$0VL`IXN_I7kCu8Ia;8hY{q+UdzMBqB< zuzrc7-@Z<`Kiqv*wcAGQWly_Qcen9`Ty(})s<&5T1m;YPMYt={OlHAIaLqRLEs4CX zhg0f!{masdF9Tb-nJDw|o9&RqCk0ZeqlfV%ELJtI{l!o>)kRZN7$&^CQkV4Xz@>Y% z_YEj&q+ByG>Hf3r{D)Qi0r*>#EHCJ*NuY2C{p{8^xSIT0kO8aFOXDM;vY~tr7cc%| z-rVi3NRcHT0|y#{4f?c%EdC(!n_z*cyO80x#oR&&SS!Tl9kRYgzhhOKt>9SItf3%* z-5bLfB$&h`FX|57g^1D-olskU?EdwiLI%Vg+4A?q`*hA~KE7qGiDIr&DojFLjR)i7 z1t1W`&|1c9wr}6Ndr5%?JZgy>d~G%Aq6nAUrUv>Oj9r)Wldbt~hE3bWn~oM}4oWjK zyAHHh5UKU!?S5hJ$Zb0oA@|AF8s$)|VWFH>>!Yzpd1;z4#e?bs0#q#4Q{oZ-e+ql% zoo{&2nfd->mRSzWPE8Hd2u#T9c`L`hcKlo}+C4U|hO6!T_4(9OP8?=30h2XU#EVr3 zpTwPA$zc%Xwe&)f|0;>fvG(ePYt8UOGLYI zwGa*>ySA3Ta}G!Wi*?iKGCGVtmd8)^yHYZsuWhc%P8e<#?5&a%%gfQ#-uI%J6wen2fNVFYAZYF&7gSlK#y)_-_ zs|+HoPpTQJ$0rDo%S|0HR~1|`B)AkRDztC7?cgP+lWxTXs#i(qhb&E z7!^H=d#TLg?=B8IiBdRVkE#7O(E zf;$&&;IJ7<6z(n$d*-n6QpUIR;d#$BIqeqHHk@hJ;|Hwhw6ozR6JmfAgLxNqX%d<) zKtrTkov+&c8BU2b-_+JyxHJBtx-V;eD$vE`8bPK)a3aJqL@XCrT}YW*oIO`tDnq$S zc&t1+djvIec0Y=b7DubS*|Ik%9F!Ne{9IG$IqCUptE<6RVtDgyOi!YVP&ilti4&k> ztTUdSB+ElQE7KJe5 zZ;~4G=Bvi9y?Cs6Xfdf*on)`psmUC3w~VP&4JVXB3)wVk4U~%`zdl}c=ZWt<5u>3e zqimOJz^joJP$39MS>YB@o7oddA}&sJnD#`vqgru3iUs8R55?|WTd0Uy(jYy&?Q3~; z5*`Eay+}SKZPMYI4T3^n!JNd6TFusnTD=~g$a*8<|vawA)^*8GbeYoc>vVjyF zRam!et^uvYy|*lj?u}0tSd_~{XL?kP7=*@JH|rITmAv}&Xg3LBLh8PmV*_YEE+9sK z*;qCob1#-MRc+IZhn7=jhf&{|CpscQ`1&Dwyb`FP&o11oAIrAfHcr_SiubdjqCaaT zn#63O@%cc)$4QgYJmGYBSm${J9;b9d5;Fb{kvFuQxQo;GH!hDjsb28VRxc&L5qP1~ zcL-RUba^tNE?X@CL09|P2Dc8SNKVfnf z$DU;8>42r;bNI)}{C9B8p_{-lF|6Wp8!6ga``9@&ZuBJru<+6h9Og zZdFqH<`0IeIDHNz)Yh&7d+^S{IX3f#p0s?-7N#m1!t`CYRwA#R{{v|`FmGFGe$*(* zB9_mYSnUi|Z?@>E_nPwKaO)K9G_CEq=G+tb!~_~CH(`gQ7M*y!#G<$MecfMX>Txa4 z(WS(tify(Eq#S?Ix;bO+d%0YRJ^>FMIr$IQrCFl$>d5?b`gW?u?i86f2ZSG8QZjJK zVwVJv5;Nlx5jyq3U)w~CsD+Up<534L4?&hCRXPby*Tsb?n_fo`M=DRlgGVma57HCj z3J{4^nisM^PD=U=2q;CF36*z`mG*g>vLU+0<+TktpdxSK`WZ8xLqK({u+D|q`hF4mY5DR6>kT&n1$7uq7$wIzKpg$#_a0oT7&;!eb4lYZt7izoo4?Toup zt`=#==(FBR(RFraiH1&;yO^I-b7-fd+HYNLH$8A3YRe6GtdTc9H7?~FYq>jo8$f@3 z+?pNt&gRd`5q4Ai5H5Lg%hDcvAIp}1lDqI zRSE`u7l0D!DKUi=RAFb_JP&J&0<@rq^H!v|6M5?dCMgY!9e) zjGy9OS&-0=5ttl(j{X`fJE?xZcLP-AjZ%`F+>c{)fB|E`7AE-QJJwPh7HZwIBXoJl-F{VwSRI zp_}a&nq+Tj^ijEnNG?q>u`Y%dze%~3FImU8*#E8r54Bqr5a5T+(@>7W}jzUPel@;N(j#WKxkNY$9YX*jYKWLLP zsX8*MKB%T{8CT;s9A>mF6wiY-j>~nE!k6q~VDvbB&9mmKCC!zq12{Nb`t?1I4}6U(M;~i@0(=J-k|<(jm5LD%x$ThR(L7~x_TA*|h_@k};dumyDzs+kQOT)& zg56P)WiSq*UxJ-iPvIuI@nUv)mCaG3!*JyRJ343H;zCrcJLK5GpS`8OZ~cc_euxJ& z-ZKA(mb8+7)JwApYs+#HPOJ#wv>6ro3vtYShiT#BkWrdwpXu$uAcARaE|x1*wV4%? z6jY@!om%ytC(d z*R0vI-kH6=>{&;j+QALaX^AP=HtK zfuUjxBQ0ytlF3>Xz?~R%?rlXDABH{VMBn2+qY22JQRk-epvo$DAZgIntP7{}VgV_X zc!Qy%H=i&HE!GehIe|fi(Q)gemrX5LcYJ);?h?jhtJgy zm!tS36-V09w+kjmzd)U;CzeYqt(&7FihfN$OA7~GQBE;;w=zHH(Ug2IX_d7CVx#SA z43cSGsPn$a%x3X;ABM)x!7UC1#h_pvi-EJ#wP7)1#7o#NlE@E=OJj?|Fx)V51jMBen;55GO=Kl~n( zXBS}GcKT%57a)6d?RZeT_nuwn#BLDLqVGzPN35O9ti>o!E_r_5*2gSbJANd!&c*!; zPFc`LOk>bu@OwJ5(eX`GDDroHn(%6NR_+Ls|M*lZ;k*U*mPx&5$;tz{JZa;(Yb>#H z3|o`O)xS=KyVoKQY`foE`>z*SfD!odRzAM9ktST-6dh2vz*$xOf`*8bv7tUTcd9QkC0xorTJxN{W(WP zPM(t~Q!S|N^AjB2&mH;B3xJ@_)k&C|pHe#|FuxujhIkG_<- zK6TI{>xQ^deFnKxHoj0;53r~Xupv;rOA*-TQdutE$sTG0%P?iCR8yvvSQ;dV)i?uU{TN-~%h1^c7ZkDB?YzOFL z|D1T{&Hjk$7%XtPVGvj^<8#d?PZOC@kV%dbBA_d{1oo%^aXhBLbZzG)xwczjjIAqw z@HjN*Ph;KlO7w(Sf;Va5s)Sxt{2)tqqZceUj#U=)WnF%P{>JR3R?J#6OSk)!UFyAp zY#|j{fz8|5cuYnurexOUGW2%wCyyS4=MGG;fI!eXY?&UrXJ*?!=AzYU-C?@>*v!R| z*AY-SYC69-l-yL1MfL1XS*3b5H32{Tm6De4;@W8E?q$}%H(U~&Xrz3o8`6?HSqvyv zL=R6%pT|O{h>#k;8I@2A4bB>H)Wp)FieT03?Nw66cgMp<*D)}_BgZFBJ2nHA0VA*8 z;zZ~eWstjJwtaf~?F<5+lfh1QG4?>;Cr3Cn z@XlLQ&t;%Mjz&HXdCNiT%rtmEBlqGyIl499?ob z&;a*oKem1K(gIO1c{_oVy2^1cKYu<|pc^#cc(RnV)b)&Sbrb{Xe6&HG$nl1zK*GsP zRQw?~ODB@f(vqj{8~BfXSZd*Bbhp1ZrlyWz&B>`}Sqm}pY87ODbX&+26DrZm}-w?`LH&&tmi|7Gdf8t3Nzry?Ua19`tPSg#5{R?ve}j0as1QGo)BecmrNpzvLQ807*tLrVsbZFtX3~SV=PxKhB$sbzOpP}F$B3WdERX{Yz zL*wSDS2Gg{9_TArg9~Gyz@?ip&9Pa(a zb-RpVjb`@B__9y(t44IM?@xYSLuwu<)Uw-mY{Vx%a5?|>sHh+jY=JBo!>}3>4R#~> zwjW0x#u#OgQkxqryFMu-6W&)jeqj5OXApTexco%qO(CE~klv%w$EJ3G_YY?u zrkbcCYvPcCMI(pO`ER04XYKs*T=a?qGso*FF3u~&hbDGcijoOSW&RW6oIzWdb-f3u zd0iqROX#)Ho9x`p?XNoGlnej*t!GURHUV|3FK)i8m?i|5FdDwg$=Z3x-}OyNahm2H zox6V|9U>*Y*fw32w;n7;m0w!nuQD79(L)m;Tl}~PuQ7D-2(PIl_4)$N!t%6?w^1#> zFLe6yVSG}hA}L%HGfe{^1v#oj8RQU#(*$V!nNf`9OcvXsd3wroGn`XQX8it-$vB_8 zNTT4QvpT1qY}_279ZZmPC%D_3CF=PHhg12~vAgBe(F^;t`fu5%Q-TFE z&kn|UyW-<=pE)z?uQo7C6^sf-#K4%<#EfJQ#pkmKWZE-s{$<(9yme|L%+fNy+KA&@ za{L26{x1dZVVO++niz2=iuCJ)zA|OePie=}q51*nYQt17qyn;4S6W?4hYw=lQNRcu zMj(Z}_~hV1t3hw?8}t8ysiEiX_prW`|D0(5g?`WHT5bjKyV+N|{W?u`Ovm{q$`ZxUK$SDbaLd2<=}X%~=a zQ~S_p$VKVY9T;C}s?1De?QA%Y>00-Ifs&PumI#lMMsI_Hg}jhMhFeYX*i>9mzeGFg zLVjs&IQ}%+2#AKHIeZ7@A(*;N65_63pvowV4W|+LOcynxS>pAj^0!1}*k2h|w+e0+ zQYJW{x#BRDR}D&HOf+8UpA)L~`nDels*sAFoHdnZf^PTyHnkzcIQ-|pbMwyJQhK@D zIpCJttmsc%v1c{$Y3%=ju>t&nDEyXxq5hmj0iycVY^@D?v~Zd%0iTWDk&I6eZ$J1* z5Fd9P``oe#wTH^9dBhIjC)i8|khuHJrI-l5{N@xz}| z9N3}GO;Jl6P8+q5T8{gGQ;8uSKfQbxSQg}Rm-kszR_aTOjHYHt>+3kNv?TA zjbfPKfdaYMlw^*lsBjzBb|bvFf9vw}J&v&txH~Qr62bG>^A@&x^+NL?M^j1>GSizq zSyy4oXW}wz7mz%aX&C3Yf;qLg)Mjekn7bB{IPB>lP%#I&6}sQyh8#m?b{hTKkBTFi zjs|Z+-E9OnKE*@R%}hBlAhYFj6>9U1bM6ip9QSqaGm-Hzx*&;Fre zn{fz50M{QQid5K;kudU3frAgj;mfIlPacyz3y(3*w30JshTG8(m>U)B2Q=?Ls0y^P zF5bej*06pIEPS5mW9BQ2?c%=uT=5pqNB8%kEgX^GKQ)EPpM&=2LK-ykhR)hsPisb$H)rE0z*ybu&({cJ)J}=U?Mv>e z8Z`T87Q^Y_5h-rz(xyyr>YaOqGxFLAi5tx0fsoH;V%F^kjP+GIIXhMK7b)9{7ybCk z!kerq*WT#F@l)^7Lc`Ui`)&N4t=^Hy9$zq4qd!XKN5hK?@RWoE=m4J5MY6=`VbVCx z{Hfkp+%U7f!rThDK2k3C?8!{hLcL;vajlz_sl95{t@Q~}9NM#h+>Oa~sRhg>KCKYS zky}DE|Hw9+%JhKM$O!TzHIgf6cvaqvJl7BU_}^&`C}jH_A5h5#AH1$@+`83fx$$u# zr>{uZu(YrD^@7=SE2uw$n@{L*C#80?5=e`Y(OXdxBcw_frI!kNX4{_wzGM?Q2L;8u)hQWfxP2_F+$i*1Ekv=8u-ZqKsLl zccsIjLmlj zXJDZgOblSq+?qhNB)wq4JRD=+sjd*$@fJ|}1O>#-#+5&kU%IR9z`R1c%)JR0)U zubPnez~Z|aB?`BYP4uyFvpU^yY*#|R+>gtw14#ofHl{slcsHcqIe4(1D*Xut>X`^! z;}xEs7=pjex5;4tmE}d1ZgjSVETl@;=?VpUljaTE6iv)@F!KYyUvdw+6=2`y^=F?`HzY6(mMV70v*5!Vd)x{^igSB^7f%n*xLfnBA81^mUGkkb5^)RGh6~K zrZD1_9Tn^pZAlq6PIJ-_&M;#tZ+2f;2xPCzwh9!%L3Jm5qiyoG6y4@d#vT{?MQoM|fBaEl`U;dS#c~>;==oepOPrp()EvJ+-6yLD zz3Dff_AhzaX1~A7e=nedc8_Njjw_hB|N5hEcKU{<2gs`-3<=pbpKg{u z1WIb(9yCiUy0dh~bf{+Ddv`N>{P@sF%FoPM{MXyklDM~Q9gfU~UqxYePma2Kcgr-J zv}K2>`#Zmn_UMbRD;qW^KdLy#)Mpi@57VNe&pxk@_hnD{Vp_=vMosYH`DT-V{Z*qb zX!C;aYbBbbqw(#==uEH@4x z#~32>fd)~GA}3kz)T-?lKc?$F1lvu>8sXRCzyU^iw-rw1B$MFt()9ZJ3s2LK{!FIf2k7;i*F4d}GZp2|* z*~~OnjE;982wpqz`_cuFx%eb`{%my_m%Xg9nr+#5?rT$X9QyK@*>@R_*f7Nx< z2q(*d%C?an+@FaN*DF}jf9?Bd;Y3$Wp2hIP2O8IAd2zcj1RWw|1pu|2b=c^7P+KIO ziLK*7L6av3S+i=n?<{)!`6xMc34R(09_O!eS;+1Rnln?f9*B23DEG%^q1(PjPI+Td zHV;QC#W9FoF2|A~|JfG#qtKPkX_ulmJ$|Jj4#j5sQNX>S4Cq&4vL_X>!%;i4cUSoL z+0N9MYOcTQc7mlu&|3;!V`}qR7MbAy3RvUhw5OhX)n?QcuZAyV2T+!lKorlt{io3J zKQ~8R3`-eg@}1hMXq3D=yxJQnYtgdZ>^)+-s3Ob-RyW&6gR}a)Wu$mq5_!ZlqEr&M zUT{~90@L?}?zcSu+V-k%a{`E-(r%2ijn4P$>nhF9kc`!5if{k&MeW>i~I`8 z)df?_ih@irR|IO_CDD**9PzhNwOX2IX$ouKpoqfkWe^-$*-$n3h1IMXbl* z+mbsvn1OPutpsX}Z4OVm|K(Uc`2~RLof6C0kxrn|Xj+=)o0T|<$(~Ni4ch8N> zU8C_>EJ%Lq8k_FFrVBB`mBjcdJ{>UwsDE!|Iz#dU>(#5N8kg-Mj8KHGTJWfZOQOku zLCkgCE^{g!S9dNr&2LpE0%kiNJ*3LlCz*D)Y`xyU1iATjGvq8>RqC>n9V5&uZj{R| zk+G#1Zpl=c?oy4i^{L`lyqsE46P$>lT?+FwekdXM==&$=l^66b>s;gP8aByyg~;m} ziL$)z$!_L zVSTF+yRJ`0w;_5>-)#x-9DQ8$s5z`!@PQ%Z=SLQJbvOrEl@dYBkdAXSG2y*Q`n~Q~ zy+iK0=Ruu|zwWPQeTZbM%=GfhM@6x{?3p>1~HVck*J@u2>q$sHTuVDJH|ET%; zEt5Y*9Rv7<^NL`%xj&5!NbcCYJfk3UR%NrwFk^3>GVYP?^MMVpRBX;D>7vL!fhLPm zfZ%tQix^CBeFsXMM2h41A%k`Lwr6oTp0f_9I?(=|n|=?L?hr?;9{LzW$5~v>SK%Hn z^L4!Q&e}(umQqMbACgY%S34U|cdjlgewO4h^ZzzJAGHFgkP3Cb;j~F=_^bc$ zHT~aDPs{jmg;({bmF$4T3rng_DJrfwe~*Fj9abJZ6z)tV5Z^2=)c}SMMJCE-fxq7~Z4D>3wz)eI3U? zXXe$D)Rx*gGc$|8=vC^~HPiUIfHNfRFHg^fMBcn^Q}_E-VDhaQ{$fH+WwYHQdhE+5 z@$K95=vX+oi|cCd1w%da0xy$Jrslo)eGt-b+gO|5BwjWP2 zSPQTUafji#H>drEO_RQNdO(%8@4)08KY_X#!R!Lh#V;v!bi2EX-G19{U;9GhB{ZqB zbx)(&>yut{<6A;WW7avbr!1#y8#xLVryoj%98- zR8%%EpQSRN4JbxfWCZFa8q{udCC9;y#sdvQLTdX|q=%#d+C$=cq3pruO-ex!re;D( zvqR+$xtR~Of=}L5as13`a!qIUu`=!E6iBidSUmq0T2WcN_qV=o*yFUr2XFRU??mXi zEH|zx_XKxo1pKv^i@!?wQU@6TNxz7>c+C@3P{@U7qYd#-NqHL_BOn!Fi!z>S?Sgm7itx4*o`Rdp|ScFM-5 zNtwAVNHA)zBMPC{Grcf=Kdi)#@5?$!f6BEf#6~GFXl=75dX|IBJN@D098`g>O$Jqg zK9BH~5F#U#iG?x20swF|+Y`7@V^dvx#qD9g>ibhar740_W8L`Mh#bQ0_u++ESWj{C zcbXLsjse-+Qdy6`5EwjX|3 zHmvBC+ruPG#o!_LH7Pf@e@=)m4jEb7G*lP4>zF791GK-HMCny_l^9eSEW*7o@3nttBLAdRM^0-CaUaJg5<1FAmv^vV?GC--``Q1vsLDh214Z{=cQh>)4@ zS0?Sm>DxOMd2-cpgoJyo@;Kl>C-fj+$FJ4q_&j#a@;0*rOkEIt?_H6F>OBxu&qN$Q zDN0mUN>hMTY|8!wpe~QaxC@(?2k>bs4K>Y)3lj6lGiLGY(yv)N>bDliP-`-e`!hs)${qx?_QBL+r&iFjfc?irF?yz==s*T2sy|lAF5VkFpMYCJ@z~LppWb{t7uY47{9%xcR%Btr)akR|jf zYBvfih8mJIxzU^2*$0I>{r!eb`OThdisr9DQ^nkZ@3x>Y53_H=0oR-EX7CMeu6dzhm5Eu`twYL z55Pu7^?7u?vmWX15j-_Up>_jRrfRZuh)$XDBX(Ax2%>2=^*xg3!W<%clC|wW%D@4X0LXPc<=zuWPutaG zr0P}SFS0?|M;ZK!HF$&F^F^zN}6U+O=UC`-SgsP&x%=~wX z>q30anMUu~om6mgv>|A}vr2p4!x6ng3JeuTrr(ogn|jC~+yB{3 ze6bPByPk?#Dpon?$82@!jWIyDd+(6Ob+=k1{gvi+MXF1ORG8N#pS;2?z%LHt1R@}5 zn;Mo8*506c)B7>dWOz!UcyAwCI-&dHFpT0L4t{;2LdYSk6238P(V=2vN2{1N8;;e0 z^yKNqE*Q3qrbJ=VaNo7X09pn%f+d4{lhHnhY;T&J&e_>ih8optbUSXg3YQM2%@r7Y zN188m8+#1IDf`(5$;USTIv;vMhW*(?u=Tq%e)pHjo+jSuEmdc5b4H>W~!te+o)t4tEquBBY{(kG4BW9ctr%~QEa zal3*S>i(@2SQ5bL&sVLJ_0ZfVd&l|$bsrtZwpw$Uv?V$DK$bA}I7Zt@pLyfbZr^iv zUkR5}G$J&N>!>c@lzQO?eZ(fDNJ3PPiAqRHnA7Xd)vp#Y;rxTcOAl;s3u`VnT30hD zw*HS9{*ePd6okFj0WhI?xuFP+FrpwE=BKk&c;ffvPcD4ub%)-I$TF%LV| z$VO!kCpIQ6mpJ%|chyu>6kcc#i-v3zHI-$*NcgeP#Wqp0x^rBNb~-g&+&E-O=nJqj zxjaBxEtSn?mcLAe|5?D!^l=i`Ne3prno-=#vQo;^OFmPhboU4E6HrBcCeDyFkjAwH ziR7J3Zz+~;m#_uu-52?M-&a<@TFUtS86BT*;ch9N@b_R)%ut?Pc0630Zqu)l*9*TvouAo=($=YjIt^}@Fr z&@k(V2La)kPh=R9p&(`KmeMS%=#c#Sv*oMh_&`L*3TKlrFNeoq_*RLhWPiY^I<~%6>4F)Ycvm%8U=cSnL*4tUQ^-(9Q=coh=NMM8w^+L~ z(eSNdS!d+KBgdb;0!E2Mh5Da{4V%IIhBQEqC8;zVXxQhLMW9{P8IntM6qAs6BL6Ef zcBw@rjQ>lCUfqumw@Q#%Np){iAwQFa_cO$H%okwcHQMp51}PQo$mOG*34w#?u6tgr zIQ#mei{qc(+F(`H^0IvJMh#^FzWi(B8_iwd8Gk-VCgTNfnRh1`k$4AZdv&G-x?|k6 zF#7S&)1S_bqfOw1RO&?0eQycDj0tyC0pqo31=OpWCx@eR4}*bCxtql)!GuyAt^U7< zjBqiotmYyo_s3-K8Wz}DWT!f)KW~gZhj|wvyjVA2SR|A34IieZ?+I;(R_b=F2{(vz z)0P#~C|n(BG6D5XEumil^@8V0|JL#vDlQTqXp@@XLJbc#Z=)h$ok9Pc=)h?n9q(G* zgl=y54mrNuth^rqTNf=(bYWb>e*2sb`WPQJInlJU0@6D>5a90+rr3gdH3|B}P{auv zk96?*C>||7N%6!%^-xoVjW2bj4|f5(QE~T%S%i<^CdOx4#7Y%?vG+R)l_r7{PovG% z1p%%}ZyM8|sD36s5#Pm!yh1k8p~hi0t0ZcC*!|h!d*>Z- ztxL^^Q`&}`#QEXOnwaSNQjXjgxdn?vhrY&T2~-7NjdN)nPoWms=zG(Rx%dS<@a}F= z0l0XyB=zYTUiSxgV9wST9S5AQn|_)0L8E=Jz}VDkaWY!&vjiSbb*Psc{5b9uSzU*u z40;pv+CUd{jpHnz*ZT9;Nc59uSmSi5!fCT;L)k^hNV2?X)|)c|#G9X026#4_rp}Gy zULWUK;AwicbAjz^3T!J)weB!^uWhS7Nmlcq>Czu?xoo_=N0_^_dJ)|vWYpRJ^H*~L z(Zy^{dc(a}smbogb|aNi^acgSQ?9#G^A}t*Hn!`x6Ech&sU;6{u}ub=9=9F1l;;h} zEG_q1QvO}m=&ydU2k1FE-MaKm7&Nq?+Aw2UT?X@9{;wv9-HN5cHmJLze3HSN(-}2e zZE1j7m$dYs5I} z7;e;vl4^wb-tD8~{DpBG77aWr&&9QE{5cPNf=gf6(Sr~pN?)D)JQk-FW0hT+(l~71 z-i5jx{))wq&?67T^4ML1!8|`jEx3Jc^>X~Y@1kGtS*X=m6<`z8qFks}OKu=xwYE?R z(yU2`8zeo~rd{DzUu%jS8miCpFUFBMjp6v9-|9YsTG;wb@jfMS&TPZD=am3=3T0i61#aux@E9bhXNCYkgB{k77^*T~dIJGec=t!U)JeZ) z&vT@mJ`y&vQ!3XR3@0E*=C4`dU7(TU2Fiu|rZ3sN`~P9(etDf5CUTTXEfGG#&YS4_>4kCx#2~p?rJ$9pQ-3+`fn;qU>aTmzh@=h z>v!15{77ZtXr6gMp|>9=Q_pUUuJZfeC`Obo2KV2>>J}J1{jHB36x=dDjFT7T>Uz)- zkC{hNGI&t>9VRb1U9RRo^DR4x12kPd)WOUUVPz@iIuQhIrCE6>%p<&cO61HHF%_v8 zS?cvKl4Y^8d9!q(h$>%Hf%&S6^;!(%8oAF?vwy%@6n2+KQNh}7*kb7Kw}R*Ynzmt~ z*=Ut2ig6A(=zDp1eFW9p^OgkAtREcp{)h@N?wcbBS6YFkI(rlGk%!m=DziBc(mckVXXNamTQQvSjmP$?ZHil9svu-uRklk;Z1Ro1N*hP3&xUPIGTJ`}qMbM&Vlp(pC=RNGwcEn zQM{#zKoI9VVkGVS#l)C;5_wj;T4kkRmC8}?h-ABxdjI@-L$#wp+ghe43d<$p_Oom~ z-IkxykgSagL-kIycU5Pc`H>)g&;3pPZwvE&ZYe7t;i1j3Eo&&7zF}ixYgn3)3{L@s z=KR;RkzUBHInRA??$YScSD9aF$*Wen>=euTRao(Yny^DI({21HnhfIEZ=~pu()LJGzr4K+ZlKi*#@AP7B>3H`1-hw0$MH7U_j@B1c{W!0x@sd$t*=h zu`Q7tN@Y3M5MZXzo|f88=xgiG{@nyoalCqwF06d38tBb4&0$>TIMW;Fb8`4gwhmd^ zDq%NSX(;GpsU0i5azlo%_MDFSvZJmi7A6QoWusE3Wr>0tqr2-4n?i4fe`HNKvu+f> zsk=@{USn!BA7P5zWFN-Q;nnt+CM#SAvsMh4y7Q{#OBpo@GDfa~^M+==L#<;b-*<3f zywd05w^4=ouRW<6w4q%6DXQME2TsZO+v{JYnKk7ja%kq)m*MV7vX-10F}$nwGP^fO zi)luGMRJ-_5QG=3OLVaiKsn9mb26J++M-9Xtr3 zO#Sf3E|KukKKk+GKPL>EE4#1kajDeRn_*M0X9)Lh5yh_g-s7Xf6;Vfj{>W;!_zAbF zzqd_0on)U7v1MP)=T%45N3|`R3vd38d+9>HA$sSRR|Avb3p#fC*0ie{($ybe4DM0$ zZv0-narwPkI7@Qu0ZH<)-M9)?%<LnF?mJtODn;xd)Oz;UXCy zyraXjTvsR>1|#;6Yh7lj>Cz_(!zC#o1#?CiPclH)XFO<~W?@R;0!j!u>7fqtfGGYj zF|gFY65#soRJmME;sYhyURzl6igJYc{ZVmapKk>QhOW--kv7YWixoo&c&WEiqg78i zl4aj~@D&?PJUip>ECavh+i|p91WO-H$PnNfOb?_;K!aI@c(lmVZNH=FN;xy_s=jt` z?}Wruz=TMntna+`ZDPVcPq;*pt%`JC9b}qEk0O}MNdH>vU!(*PYZGPERmhoxGc9n% z*NHl1`mMm>kP-5lOZ#9!(}CsQd>g$+oOok!F#7Snix0h!U(R~aF^+4nQ69FvYWNAv zAVbr}fJNim9JE#9oNH`4b}Xa9KztoGGX(uxuH@V|yz`JD@~3WAe9dlZ!h?4$)+N2r zIGyI!};J4{T(7okq z_s~x_{yD)_^0eO8`1knDx%EGv|6F^M3biQwKIFvt=i|oruY(-_fm!muUft0_VvH@U z@S}8SXz!E|@u4}kUZ`sfiY*oQcLE-E@yCBSh8A78cLK}7D0jtywtZPi6!X!wRPz)UD)!rQ{ zrvLljY(Gj9eRD91>78PsXL+VnB9K1q7hEZR+glJJr}v=cIRK4q7=fmU0s%1b=zl%f ztDgR+>*D{>$^T6NOtGa>AfI}Fbbwnyo#REzL z4Z2i5djiK7JPH2iMEZQfotDu6@DvsBE;MQAoj2WlLS{p4UA*IXG>{W0i_%2Fqgly_ z3xEE5*|oy640k3QY69HS;iUu;erVWFIaCjAbQ@f6`$j&qPc=jJ$aPbVcrd#U6K;?j)j zDO;l{q}YCtow?_k%VLkHty>k+{*@+kAyO<3z?zrd>#;2<*Z_mpu{{g#|4@2AYdriO3LDFYz^ z8y7vp_x0#YBBD6eSbl{*<#Xf84IT&e?hO>Sag4U(gVyKqsfGaM8+~=H1u*$H&1qWq z-0ALjZ!JG@MoRInIeJ}0GO|K$8+ zeQH<3=G8cpK+Bb8;3%`koiKfje^+E$a>@SQ^&dyII5`3K(Vino)A{Iuc_Kl8{d0|v zN&(gqtlBgdAOV{GtBHHQGtca+(lj;KAc?VMntGk#r??VK{Qdl7kLOZ$nLCC_d6^?0 zAA`3I5GsL;X-3IRhjFzTN>|hWIkD8A>3KWfEK%Z)(OFFnDMJ6bwrCuR$m;w7t*lQXSPd+om|+^7ddNxlerkZfjV1S!GUPtBBu(e50j(uw3aK zwV{cb7R-oKUcHQYL%MiLLYFr{%UcniJ%GX5_U#5- z(kuF+#AMF5}kN5URv%<#k5KioR(Q%}gkJ zoglHY0dxt5#Bh(*oX-!|UO^`vuhJ~*eVqHWDDcjm>{~j;AMi$@Wq_{{_C(YR(oTVn zbHfmb^s%ewQAykz+Sa$-g5uxBDVr@awK1#f1}-IOpsREBNu$s#!v0j?1Oy$eLY3?% zL380#W2^}rr5g##OF4?U;I~Z`HticFR^T$*3&9Q9K1*%DMForSG$%cMHo(6SwS60Y55tIqwtWfWfd)4=<_JXo;3Dpq!w0~LYiqfxiOs4Ue{9+ zeDPY}04?Oe$yxbh_<(@Ne2F=bU@*A1ibge3aL(N$HOlfnFrp{z>6Xu;8jrjzDU?z_ zDt}F?9q2z>@9L0%WH$L|u(-yP!;6(O$|yMy%>8^yy*s_b^cUb~>zC1;0qkPNKBz~H zb`fCMl>a`UCh42xRC<)HUH*C;hNuiT?y50(`q(;IeL480ev@r|V%0gaR%3bd%%Lvr zo(#^e#H2XShIo6Z@gw8M&RHeO%|cW>j8=QjKyo%|U!B8GfN~)6*AzX?o^fAtjRsHgkwS zr7-S~>qS=G33)gl-0uvTt+}t=fp3^MA{3ew!LqKad)y(@p>peVpp$av*sH<_Pl0h+Zj2cW6EF|~<4$%0uR~V|!b<1ShqQ9h5 z(0}Md%H)!HBUTqB)8Vg@(d6E;p(-b%{*65LIs z3i&uX1m2j9v%^wB2I~)K+&32_WIf&W^|HQIOCL*QbMzXwElINM+#hdM^U899iEn&6Ml19q3)8E3Vf`CIsxjror6=f zQwo__hQaMn0VZy%>*1RPpa!v%ht8Sy2hUf=Lxp-&OAn}aO|k2`;+2S^SDA&G%9xwQ z&Z?JF!t>bOw0;lPTkk-z*>FwPw$kYm$rDlyD4xYvNuh~tEGT*} z)V<5~9`)qVYW%uMSx4htw_lcf+hi{E``5=F-{V|ZNu#hPWf{0snZjrgHT5=hEs}W{ z1f1EM^WF9O5>ifRUG&c;^(ixxlD%uJ0NM>q^x@uJ>x-X|<+KbYSu$^p2GX1A{b89! zVl=$!eTFs1bm!>1k$)G~92rt+MiVcU_przc`xw6!d1>l&PCm}E*s6i_S^Kp#nL#@i zZ5AOkEFq{j3v63%iG%vE&MwJ|E-4Mr5H<3wcB^wx!-)i|-YVnn+crN7>F_%9^$5ER zp|y&;l47WfwJ#3#`V}{f3YA@;$y$XZ{l?@zOq-u- z`qU2GJT<30ik#8`i6=2&;;dc`2^1Z1qFu1XXB^h9Qjjp4rO>Kmny6dv__}s|?a~9P ztDQJSsy6(qTElS1e!7^b{I|ztNj_uWOh+1W=jr#y9_5vd{0x#!fYNR>lazGMBL!Gp zY>`*6S#kaLW zb|h__)A)%q!FvK)IH;fIJoY8(=3%;j+FJyJ;^Qs$YBl69<9ZZoO<((Pb`#E8GD&5& zV;R02Sn&6YOlju zY=fy@J(SSp;}s)Ffh!Y5wD0Z?eiOUQYyqd-0VaR18@rFL{8{IgfRHXs|KMSgT&3)W z++IP8Jp118M)ev2K};GW{oHMHu^Y>bNFd>EaZ2`;=9yFalO7h_7(e2w!>5oLw~Pv< zM{?nyy_xuySz}DuU6s|`&UTN|m!60!%y}cwUd;R&*HL-DopYy%dGmA(40VwzWEf;? z(7O|(oc%Q!AM1=7EIRs~rRm|GkfNJvgjEpR{tkqb$%E0fy9T{+l?$5Dm(OolqiXInXR}SX zU#^Kc=_8yYiBP{Qsl&z);S;=(+}=qNCvtONA`+g3TD+QW8p$Dk$9Yy5Qm4Ea4H6ZK zR6(9fK^eE9)xjEsN~6m{MNN2NlK`I&V5Z@4yUrsEP-`%{epIA_f0-gvXPYV`b7(G2 zZwyJUhu#j)18x=?LdfGd72hPRq6Y2ez6D8zc18l}t?=e8^QFbB-bxjzA2K3Gf zef3jedULisckuHJi_0J#eH{F>Y|=>q>EocqNVkcGOx6O9PJ#w?)|Z zk5b$C9`ygk-h0P2)vWvCv7w@VXpwgSP00KdzOIJiX_{-k+^Sej)^}J{AQ}#Xg-go_x&ssB+nOU=Dp7pGGp6C0G zScyKjQX`SY$q5>7>Ue}7U~o399;iFbJL*xC@UAGeeG$mZ+(sHyyE2RGFOQgoOjFE# z3R@o_TR8-=hT9}{h1M${#HoqsFN;SZT>)0Cy zd3-`yNX2Jwb&g8pXkLrNqhK{i9XBNS)KWnhJU5{$>c$dg=6r+ZXGm=pL$>Q0S z$iP8~{j~UyVnM7JlWG3YA|~Q$oVzvjT-3gZcSem=5ieGvRRl)lg(ZYs- zc)H_;5s9WQ>R5OCaD+&AHJuJLxn40`iT2?ss?H>@A`exfy91Zm!i(ao&kl(LLubL+ z)tlTZd0EG*Eo7ue{l1uKv)5IGP(8YVfy%F(+j%1-!}2Lz*Hr-8u8KwjrBhO-R`$25MD9s zmNn~2LNhBi>yPXA_qVn7w*6N2(>?E|9`!!`pW6oj?pw4+_j`!2^g@qzpC#CSjL8+_ z5zDX;k_$nr11?fhVL_*Z8|rXum_>_oDjj1}8D10dSjp}a^oFTd@ojUrE^f*Zs$AqQ zL>k3StqiaPIQA&y>Qc=(L8>U|ta<0CkMnoc#+A9#AWmf*QZLoHcH$g)nyZ8%%1e@` zT5qpVm_;Z)rMsT9(*x>(>{LoZqWO_mC5HuNj4jCXI)O+wd*_=fk=Q46&SHP2xij5<2lV(GRM`#jBR5!#*EOIP(KNv z>ex$&Vdc$HEMH%0+c=6Cu0-y$lf8Ie1}5s(^9ke>=Zu}{ab&iyB$k62=VMgMMAvp!F5mg> zv;8&k-+I!&mj3r#{ZR|*1i%JxjInTAphTCrh-NKr)fUJ~jRL|9H#eNtB^&gC$aV`b zU-;S~y7V=(M7K{YvcQ6MXbWxE4;TAXv9UFd9_XZlDAc+-e3Dhg^K(Kp!@`K1q6QZ? z0jGOqQ}yy&0%;)UeckaAIUEjK=xH{%T3H+p>w=@WjiNRc+WG*Bj{;=VHG|lbAVKW( zGSL)j={C4<#UNZ5oq*@2gxq~rReN=We;29{6s^bwGB-e_xJhY&u@5~JgSG%1LI^7m zy;oDHZbZ`sx1Jmjaq-yRjtOCQiP~1=yG^HcsH*r5j;qc^kAYiIKrK#T z(q9-wmd77Z6yUb4|MB=vJTIE+g4Mr3z8nX688CF2Cd#5N$hi^?SYhTFWTS8imL7-E zq{~2DWbv$B-EST_2ZLd_Mo|t(P$Dlro?7dH9es%5g5CA$TW$q;SGB!#i#%g+8CE#&v(^B(40KzjOhjv1-JSxU zsL>Zd8O?2~&<{G%YeMX;Id~E0fKgWae6_OZcjFFN6fJW>K)b)EGkaH+10mCGj2>c- z&wZ92ss~S^Pmd!#M_~gqSD##z!Xw8k!`*X-K1(bPWODHJf+NO@Z}_3sg88BbNnv~b zLCcnWy4r}0S#=Zs=fXMZM)t1P&q*Ys6Ca|O@p7n#Uq$0W*8qx4e8$qw+T@u2jN&48 z*=cbFgFX-FJp@n~S69WUoREOU#o9?wVplkzQJ}4faz5*itZ0o_M{iC~ku!e)*0Yrk zT|!$|OOcItLfsYIj93YSDPDOG5^2j(Y!_T~fmP>gt|hj}hed^L2_Kx!0VsMI`BhwcDe*0%|WEqMv7SKc_@8ec==i3*7|BBOI`f{k#JC z>Xm$7c!UxlD8_R-vRUHfc2WW=?WiGp^fzP$}g{j_&xKv&7`b5 zai-hnNMEL#F^vl)f#%x|E=JONehOSx*VFsXoV3?Gi4w!dC$4U-`W=N+LeTR25t??d zU$+j})#{ct=m-mJnkJ-;Q(V>U9r_;oo@O1z>P~Fu2O89q@bvBF`;8C1V!K*>ML`WZ z`~sVn$|l5p3jHXv>#b|f3&2^qP@_Z_l_#q%KHyp>?-lU({o>{4%j*<*aiC(jM?o*wh{GW< zSDQCRgc{j@cV;Z0(EvBdmfdP~)AiM)m)ARYxH~Q{#Y?>cU8g~ZUvI>d-YD0e3Z_k! zoVZZQcGj})-7<8Eb7?xlxt&WXsUMR&%kpb*tRk|>4 z9QL6sJPrQDwT4wlLiE1$?u z`~c_HLGce7_JBEsF^G9}=z62U`{^Pc_zbn#%UbsaP_PaqX6aRORJfsI2R!>LGS@+7 zI{Eew06GYaTskK5yOr`cX@9hE2!B)d-*fo~_5TG5_Mdh9q7eTl__sJ%|7^20{)N>i zLsI{AhiUqniHL(y4FpS`so|JD=p)*sfWvj}dgvPmw^ zy5={z?RMCcV&`qN#8zRPy_aoOv-MhPwgKP5qd}qy0~FkJHcD!7J_G&k?_h6Ly|voT zWC@i`7+P25GlCa*!L(lFbs7%f&~(}A3uUp$_6Ij(+2(}#KG1ocazsdTPppqE+dA~9 z)e)TXj0mrEnt5)6dSO=m?|>|ENM>4O>3YK_p%mXoV?N>vK}J-$Yv1Tkk`Zx8>4^)V zv=#8lV*h(X1z-I3(1|5=;`7Owj|6chG2o>m8|ElGD)_iAV(&OTl*?A+Cm2W;gpi%yq7 zAvA{Ei~{BP)UH{B$XYkm0PX55p5d}jh}+3}0o_D$*xrQ|m`RmQCq^%xJUhn3l@LiP zTaLS6e0m~gV7BJ|RadFv9@Xr72yqCiYv4APecGukpSnw(gB08g@_ zs~4`ytK`%2;zx(|(~Z(ga${hlM87?5b;Q?W4{n*!C?_gcnPrelbad33KIAXiruyC& z?CxKdlzrC2^PE1nzuW~+6~JO9Zt(pBkv0Yc>OQ$--54sClT|Pp*lbm>)C0@Zx!1a25ZXDL(}a3A`u9bbFWBWtRcGm$8}BHvWFk`(qJ{xU2OW>T~|bGZ#DV7w;uDX*VUm#m2j@T6}abUN^615}D65POLTD zcinOdpkdK_+==BEWfC*Pv_1H=f}1ztL=?J!hU260D|7gZ*q0cRXe1ASbJggo%rh7KBJ?wEqBt zuQiyj_i^V+fVQX9#O3RVk3RtIUb4mThC*k?&T8w*&&CB(ImR8J^r(cbjX5wkf6H2> z3uc>p#mZ+g5Bi3FIviCNO|gElpQsmIif%G*lX_QRy4qKtO|s7I3|qpk4)=3MZ@q-8 zjd6$dX70oWaey1d6fw|Y_S;=mb0Z!aui_0oo`Q-IS>6%%6rTFn3irHIluwmR#^8k^ z;)}1KT?5OxcZk7=?*--8KTGgkB-vLn^BWbwF+B)wx@c|$2)sg37x&r&O;0UqwGXRN zA7*JJv?xyHmKsKoaX``Qx%ygQAvB&lvGhBqLDI6AehKS|6o0aacCMV^NRRbifrTN0 zLDqOtM_|nNLW|+cF!FKrZfm32=G`0SN?!H8#I_oS_7SM5IRpvwi>=;tqz4aH;=3fDN~1)fvKs~^g``0C&-XERzr0M6h2mOt%c-tL=z&x=E{#RYVcp82C}zeVfNK|DpAIYd*sal8mxn(R zANv6q=14Btr%__r%3#_dQCz!+kF7shU_gtF1xoI_GVKgq`D>A~7;(MUcH-N|(bh^w z)fZl#PFJgTV&XP=U*(*zR|q3ZnQrp)1)MdfWyX<$KwP6>h1cGoU5$*tjL3(0Acr^o;!mbE>{Wa6T1GH48#gcc?X{pz3LC0JZ_{OWhB{IXDC?&i(+f%oGoG^EmaFuc->8_kUt=Ufi z2SM-Kv^c;nCR?4UJ8yu0kjF>$>r3nQ?0SJ=!I4q)tq~^^nM4+(y26MEYkMqkp8M6@ zTUwpk@o;fS9}dfxpl(k&B>n%|*?-Ea;uqwDEP(-^ z`O=Ud0LQKEFY_mVueE@F-ojER{H&Jfv*dBrjnM9Y>5|#!^ZT@x_EllvD0@OqclYB5 zp2muKt8})i9l~T&ZWs!1@^=1;v`shWBp*=?A2J)1P{1@wL67!xZilRdcoEi#ATPnjbc(+5`F{dDU6LQ z+v44LoYmXdDJiw(!{3?~4)&@VH7XN)J_Cv@x2R`eK{rs@XK{UKkIi@q0#*@L)%y*e zZBPNL3R4WV^X5FQgvdq4v?d{4`4(eAw8HU4DXq`AR(HODv5z!Jdgdt?pf@}FV4Zc2 zCY-lz3#f{d_}>%9b2c>wzQM)a&xugsX!(d_3PyKq-r5^u`L<9Gd}F>$&AXwuo7z3M zOe)zYLsinvBB|6~f74}2^M2TH z5}P&<(C*SX*4(ZVEwwSMLr{rvtz@p~C&qB6_BO9R1muor2UrgaLt?IX)Y_JTwp~5! zn(F38KB?vw<>{W>0!ntNZ}@sh1`QTV@h;%3GV^R!z}p zNfxy;pJBk|Na1F_Q6nw!X~?L6UihQnOaOx@<5YK|FTx@|ud9n{{DXTk4WpNEr>6kU z{JX&Nh7Lz!!Ysw1X52n#S{>#bW=)6wN(U6A>mWlF-vW7&%Yq*j|M} z&$|1+G$?ACPNmRC#R+$FuJ+?BtdF;sn&_gWx^15tAun7XQuC`r)7w*QQQ6AvQPBb* zh1x60Z%&DqXp97_&=_xS4Rcfu>8qU`CT+iatRf99a<%Bva@-3tN z7~i!~a2)FFr>-*g)qL6(sAriBqVfzJy5Oxx>@=*{xSecLioz_4i^jG6t77R!@z`L? zZhk<3W6EXrSvOy=E7GU>O}!uUMpoWq$Z{GzhzPeb-eVwbZ7RKS&G==X60pPdou_ft z%e`@LA^itH_~Nt6`dUXLrj%`g&HOfs)DIy5&J%XnAD}4|6hmo00EgfkKLEQA{b_c? zACE1yJwB4^R66*C$ODw@@efMA#ao)2v{msaZ_fy1-&eBGURxvjN!(-+=N@4wg88v} z2?lI!9>{vV`m1o|H?8zfuZk(~NEN&e-L3lQY2nq-!f-#J*XyXCLIwJ@uH)jhNRPOL zRpL=-taXwxz`^ECWgOFCae?#?z|6UYAAr=*H|Y;W_pOZA_lb)?01H7T04fvzGl>+c zcxOVu4}cfrA*r4D8+0*BjUUUEGRgs*huotuV<@eEkqfo;&FZ7@0F$^0p(@M5FWhDTN5wY~37ARFOW@m36K0d15|lUlaAnK?tTQ<*8@1j@@d3>>|MZvMo{||>ibsbQkkhq0 zOymn>M?F$*+lCli!DT^AF|(R}74x}9rPy}RxZB!#qjeH104Crcin-?>pllj@z(>RM z10eF3o)DS+T@J04zGQ)H4l3ZU0NteBi(g0mUB0=e?-+a#J?ak3-?%md+8G^KQ2K&z z6Fq8&I{|_=!|@SRDECUOtI#SF#++_>1UsOkc;xeEFidPJK=>G)lV=Kx0*|L`lS4N`X-E*`Li*&GxGhHn7x zrms76Q6$ov%%mRx0hSwp>j8X=uKfe*a(Oe6B2$H?_lyhlOv!=yqu%*mtyk>(tdb2a z!D0h}SJxaz-st?buL4JT@)U3*Q=da6E_>&+@3|D%E$_T&N!1iu41JTE{Dv{Eo_UC6 zmx6MD4kL1Jeig3(9Dm|ZoqT8aFfp()*YC{F=Z&BKDDMR4!3%E_L6%*LWBAQXP0XRx zP&V09)3wXOct1+LSlOXc28ZXDOx9P2fx&JK&DJNZe!=@5y7kvC|1*C6$yT|)&nS1I zrr_4LX%Z-D(m`b%MUMT*d2_U(S0dS$SRWhF70|x**T!8%^;VMz5( z+-nSaXOHy#1UJ&V2I9>&_clL<&&~{B%sV(qsdiA;T<^}ei z>$$`JgJYhbT&12Dcu?LOVRdE?@ljSdL_ny(;p=sbNg#CXrr~Qu!=j#-2x)Wzukcnb zBQlfM^*KzA@=|4moztUjPX^Qby&I7VtG%z}mCc*G7u9umm)o)}uj}%;_xSN42*nG- zilMov)1lJEh{1ruyTQRms)*-QfqySTKpx-O5!=dhk&o1^iJ)op?qAbVrzS8!AvItb z$sFu7{yNy9<-WV%w0&Y`)9rK>1M1~~abMT`xid8xqu6(;(E^ewEXkfXFRz9OvM;v6 zN93B$U+$ICG-OpoaIeACp_pdb6|d-GS=|!&kWg*`wb#DipfIz0lH2W4BQ1kLYcC#M zP2VIkk~`^gt>Ki1!k*_1xVMSbVc@iV-$6%;DmJ?3KKXdu!uFotV+-sP$txAHynyp*Q&S=OriHIMvgff_X{ z0#@}bLi@w0%tzr_TBh@QDK>#u_n8Uf@a(*11K#0L#eE&xRpM%TVeP>q|9H-=Mt2Mb zCWyY_(BW=U;38dhQk>?yI9Mxq2}qB&(8}Gi$vYKWyzIj=;HFh@)lkSK*wbn_Q8hz5 zbDX659<$`fIB}DYTdqZjRyN^*mkzctnjh%G&1#iingcBpV4ABk4P+JIiWRenG>fV> z;=d@7rduhTBxM8vdr_Dny|_S^(h?EF5nkZ@vFn;)DXBijX9b){=z#l>6JRjvVe;Ac zetTgg8@@SC`*RlEofcKy&ROCfAB-V7{K-)~EGnf-lA2#F*L65JC4_d05`=m^MCy`m zu^p^Fp1ESY9+2PS8>kZoUe(=(^?H7O-n#D-)33!Foo?f#!{YrtT#kE5kj)MXo2;Jo zD|Nr=lMI=_k0&e$Twa>b+1G0aMN@e0HYE85(4v>G-`Oa#G4x{NGjl6wq{Oy6+jUj4 z1_Ifiy46cIg{`=?ztv8{0kbT^!7kA`vdnwHzR;YO6sO5M4|FP=MvF6}%KW6h>5ZCb z_6-6>MQg6%%803Ywu>xMialD8Sl5*A*DlXrC-o#IiLgYYO?#$bRteQ%d74#gOScCX zSk*Y_0!~7puF_qZ$&7v+F-?($&Q({8IP&y@VnKJ3kEuft%g8DNAc^jJMqV zq^h+XYVG)d^7}2I2Iu&l>9pAnkmxzD@#IKDWCiP4)K$Z?aIKfS-p_S2{dKOoD{OzZ zm+zFqm)85}SJsQa-PV{yQlTeowIY#OVZ_8H@4l@2WNA9xYb5n&oWO@KN|G+9=8W86 zPp=F*J{0Zvwo>5!$9$uEK)z^dluQggF4rCx{+uPnvzD>r_LUfmYW@#XWWQoWM{_Lo zN}~vHn3ug-L;Ypv=rdTOxqA?kn;8!J=!vDTYB3kbI&X5=BKzqKmgmba{MkUK1X0tsUuw|GT*e;W9PnM-;+TpqI zvkRTH7Q~MOUTwO@?PUlv=6B)F6lD1-pmEam@+kNADoMUr2in{>VZCooJ0@0|-{&#yTN4k8`7ebM{R$Mo8aO2PIRu!6KSBUFL3v4s^v$K-!>*G;PNSG5GI}2DIWO`42jC-+zmhMqc$_2e zbYk?ksks2BQq2q#SAv58kAkn4oN3wk7ptcR+OwFA>q0yDkKJ94XQC2vZRP?Uq!tcGdEK`&R#Db3WVT7j1y% z_u;F*t><4&{G$f`?^QPdfVmAGi87D+hKZ8L{R*TUNm*g=d7q>gW7UhM5^nd* zIPtveia6bZfc7I1)6!3tv{Tit&CnboPR)ELKWWU+%Bk0u+?O?J%Mrus!EY&)HCOJuT9+49jRmv^88pITbD@R?u$qoWo+MM zELZVkianY8V977tVEhTSv+W|Rt#db2sr~(xG~+zFb(sfFl4o@wPpZbYZ{mdA9VBvw zi9M=tvs201U3Om>14%71W38p}(ZYh9vD%g4iESpp7x`;z*B#0_n$r$53m(iO$U}`r zVna{P@Qn5i$FEXHeupqJ;jS+XEE!@!+?@y|L_FlZoSsaDhB%PfbwJ;tQ76>Md{CFB z`fD%;4OwQ3!LYw-6d7U3Tq3_Wg)bYWA_W&tLc(h4!u^Sh4exXSv}v4!))(K3Y9~dC z9mvX$Jpd_JVlrM|%BM4($$9nzz>As8^BCa?+06EyFccM7qj)M9CjS8VVleid zv5ZD_YtD}Zb@8Fvz4_lJLg<+*cx~yK_y_K2m5#8+H>ViVtE;DmMcUCiJk8bt+3x43 zjCC|8RGYjYNUFwt+W;nTDOtiM-JN17JKAWJ1mJ?h!;f7LIHeOu)ITmE5gu{9cXS$9t2%|Ia^^`Uedd5S{=y3w!dM_2_CCKZG)>4F(RQ;hAF+@w@_;la?&H-iDlO z(YskjM={6kof$?YdYyQhrqf1fc zMR9lB656>K5^9xYNqSMa>``(dU+3kh0*k%$z&Fur2lT%WS4F(XTRxM z8~0rgGG9W3s`4tY$-LmcOn)*ZGAh=MgkFNFLZ7TZF%^1{T7K%OcXQQuFREy_wgyb- zDk6$4{&?En_78wNzSi+*7wj%k4FlibrF)bFm74|}r>$}Ax!Y1LKwBg)9=${ln-#v{ zp!0gREnr^rkU?hPo={x2C>>DHEy1_pP_pI7R?KXC^zlCX@i&0!uk~iaq@q!evZ7Qs z{beU#2NpK=ve|i7C$xIJQI|tGIJt^TyZev&TZ5rYEJKlnka3?Jqc{h24Z#j}J`8)=u z9uESEp939F(I5>I+=oye4wl)ujuaiwUJj!hfA{!SbBILS?RnWPIij z|Hug;Nnj0kmutE@o0pusm(s_{fW5P-|1zBap|k&VQ-)ZHE+gztgFh}g2shQ;f5>c# z&9g#t6zr3uEmo%!eG>@M_pXDLeT9)F6qBvZ)nNnm(Pp4W?1 ze(|*Xz3J^ATRlHp<_z+r6=;2c6fi+)^Sl8D{is>{-kjGIY+wW!B{R?+g|1kyVQ(Y7 zrn31N-t-pp!1uwNE~&0s5f=6nr0{{Fh|1e3l#TkVArw2(P?guTIh313Yvii6O4pao z%@=;skNG-}-1yjd`O5xYs)GficQ%Oa_L7ia^zdE#UBbP*Vp$yUVihRkd9^wmBtdZm zW^e1$`0n@E7`dn+Wk+B<7AqTXQDU{G5inLkbQZ1T%-R?r@&}()-{u5K?bMZrQz*E} zdZ2>sQ;B)z-y?*hjcWyNl$rn)XKuOY;1!NOS0~cx%w0c;TZ7r-dEe|k`C73Jw_r$) z(W`rRzL)X7FL9!__EZ$AkWDI#Y`9xS=;tFlQ#D+#@jI)s||3 zW%85vJ`9I1GV_=0_qq!pukuJiqRmX*lQ(E68jPh%+L8c)JVeMYKIaCi!WYcZldM&Xaj6+Q~ zYfm9WzB)&$7vZ;0|9F;!t zZ7jF2=IUh*OQlYJJT~4nDF+PE9_o5$Fc_Wbt5tzFtJo(nOY`s)4RA}sc@{F|KwgXp zv$w2P4@bRr+NZNtCOAzyIDuZXHy?t73*5q$ZLv`hNbm9}r^^ix0W+HNKZ8<*x{1-Piu|?;U1ZNJcAEC+} z2$awVI6kK1)WuqmF2w*nsaG-AFv%?U@cS1Ie`r&$sMP3pZC@5>btvNyYZ1750wDwFm?lp;xXEyGk|j1{$hIT5o}IS_!*$;}oZr&#=E+>{*THDb z#9c`)J8|LOoHkPr3dej>9@CI|XO)M}r|j(Zk2McSuhRW<%AP5ZSLC8jn*e*NC|_{U z+Ds}P{2U87@D!<* zdfz(Re76y(-NB@uRd#mTsm#(tq1RJdHQ4FZ9>(gqlK}yhKx$#^W};ugyH#Ig zY$+@juDVaQ@awEn>(@;;iH8=CEPFG6f^R)rqOj6Uq!`?-mP%6^1%=Y9+t5emRTC?* zn3a83`~#zJbZ*AQk(_EG=%Gg4a7NV@$&Mtt75i($>h`KunhB5}fMYi9yeY9%a<_Ip?6vN;xnUKAIS>~ni2&bSX=Ar z!HaWp?^8LG2cY53)}A^2#^u23;GIlO?%H=RN1Y&GZHj73Wq9wsh^x{}#^?WHMP|al5 zMAjZ$oNyMDB6DDA1Vvj)BqzRw=+0^^k=3yxLqj<(tpoSHjRq=%EeaveJ!jfI*7$Ud z%23s z%R)KTVf)OuR=yE;5yoB}0wSNTe>@>Aq2NC42VrY7whc8XUt>1nkM4FC<9NRI!;OXfw(M*sv;i=8J;*Lp$U`XW#{CeV~ z6fHUY888POkbSOioG67C4S?P;ALq6sn3Ny~ijrHn7g2)Ry@8mSoc@eiS#`9R8?#_G zpW#)WE_64En@w=Wd64y1`-*jf&4Uq}M#A@6U!Rb))hR{XRox>U$V`{rrb$`ku zwPwzl)4EUvO|r^Lk(Pg?x+FVyb4-C<**=NMf|o`;kq9e_C1^KK2Elh56e^{1(+VoE zl6!^Q4y9T+V$8C7M9IoDa9Y`T4{gKT@-RJAH-|$F6}dDVqEcUit&#m)qFR?0vtq%f zt|ud52&YQq5m2huQp_cOJk_v3@|k&7R%}^m+HQtt+-$q_*&EOQ`7_a3*o5|aXC2~p z3IWQ$iJdNrbU-eD{mS881LL$=DBo|D$)mLoX({}gKM1O;8Hpc zF?Q?=maNRM@}as!EM>nJZcipwyfl+N%;IF@v4k7&wkgw8wp+}}kb^hSmDnw~h(klm zAo5i0r%L@QgitYyeYJs=5uem9_U2nl9pI7a!k}xmJa>62vhcPmS$gY6kW>DZ=C4IH z921q0R3n0M5;O5^dwr0rh5;Qtp35s4EI{r;zPaC7exKa&LI;~H(zU^o_iA|vhM7TZ zznO*~^vxQ|rdx{yLLaOU^=vp)^^ybI_!^6ZzD0{2R*5seNp*h{HNpNpo2Se@`{kJ> z-`uR1l|cCYXqZisLJey5uzzz_{-&4R^73iJrM;{M&ZZ|O>Jk27B&w9`N_I@P#kj#> z$H^Fe32c3@{daQg00)t&N9G%yVdb&J0%l+H7SYT1Upe!mcNI7Envo0>a@%_7^oJnuR}-Zu$7bwD+4FU>Hr~mbY|tQ*S2qC z8TUD?gHqlw)Y~|+`uhwfzbtnW5U4jyBoD=)D8PF8-QG&@-p1^iEz9b!i(SZGWN+8o znhTVTic}CDIwV{#06YOCvDS@v4DzpaB7$X2Tjyl6bm%an*SSZpAIV=N=()pu;45nN6zIUWbL*YhLJRy$0S%D`5RqhDnB(n-o`5OInUZ> zuEtZRX6a160#7u8GraRQS5S;XtI9+zDS>Di)n)4vnU|;v&J~Q*F)YFoU9rwm%>FFIWRhzHB z1U4QYg3Eoo)AYD}-*4x^aT8k8_(sVn>3yZD#?Tu;{omDj>}RNZN&R0uD4+biH_MJ} zb2mV;oKpW>y(IJoKVWwgWS^T@#_Uj$oRFm#tKG)^2Phxm`(xJ;i=9w8=?_JdIdh<7FzwAU0{THM1|60GKKEOAR_?fTz zWgQ9}Ws-X@C#|M=)Vnh(F?pcBpe>xQ2kM`raE;Pob~|EE_2FCgmB1i9k19IQRH=cn zJuBvgIjX3F5}0&5S+j@RkG*Lnm5M?4^5$5A6tFpA3>y$S&U@9XlCe`69Y7z?1p+CC zsB8l`6ckhSaJOT%@V8^BS=9%+XlE)gWAF-02gDG~NeQjtwYcEaeE(d5hE#rrIwv)%2m4;Dm_1_jps9+D_v8Ca@^i9Luy%k#`#Uw6cJ3U zlWH&4=!KBO_H(DxVPz7V-#tGo=pXxHz$YOGd(p#4&c2N|nnA^jU29W0PgM6yr@s~s zJj&v@Coy1Y)PdxlZb#!$j7yx8w&LGcYkmMa?e>3qZpSwCaE1gz6afzsYI?rspe{YC z71Go(85uUK(L&*x%vyrJ*n4xjOEyV|AmKt(Ut#FAVdE?Xs3XNZPRJ}u= zZ=8!3dy<;#c#e66OhSl_YR)GyU5Dy+-*dpscSwG2bT}Lm4s}&m4dhnnJ9flOi)n?T zVkO6|$9!94zt?HIJ1dazsxIBVbK)N!-90fE1i=qqBH`bokO=RXY@OA3VEPW%XR|l$r|{w*iW_*U9`COaJb&_ngPz|`2=I?4}g`2 z2^jfhLi8Pc{?fkg^~cQIs*`L7rxM@a_@=exC;m#oBA$INr`OgtV@N-3*(4%3(1PWq zMBb=m?%QU}ti5%nb7S5MJ*H2eNq6986ypUz7mnS=9kj z5y_3OmZ_P1Iv^({XTAissy5)9#AcXH75Y#)Qaf72E>`kXqS2T|$~|gvo;ZZK0VPBg z1`FhrRyzzxl{Q~vTehBa*0OMdY=c)9)z*|P$3*eF$LC=sDzW&HX3sT?N0D!Dj&NDa zlwUFesg)$aR0w(X-^9T2nlDM7ugW~rmBU+&!9dqZAd`&->1G$#@g*ur6oGGhl`8qL zCH|u&f!_!wVUWY$37685a(;lO8|y8b-G(8idTqHrbF3EdY`lA9?_)Ny1#NJpaJ+DN zopv%Rpz;)%Xw`S2<3vB=iyBa$${TLbGK}i(a=KPY69MUvk1FA3nDuq5-p?kVBW_ns zK76odJ?~@PRXVxhU-RH-`?^p3bB2IL5c`RS6e}s!eObv1k56R|sm8tdtj8&V#jA(X zY4ml+y0JZXgw#lWbu%|8WtG2*fE2%do@{Ixx?cKxAe;|;{W8-rotN$n-cvL9M8r!A99t>{vnA5o;C9L>L0nqr(U%ZNzB^Bvt9vlIHB8sVWaZ^^k`ncBE78Lk z#c)2pe@-e7ZNH_-3AvOgpXezP&UFamWgQPRa(~ZOSJLqwTdI`}j+=z3<7KCa_5+vH zh9HKNI7}uZap5NqYPBi+)djidAN!A-f1j@y)ya!ZoAzA1H1Ni;mgoY>1H9EGc^D@Gla8Ft4WoFx96^5VqLyFZ9uJt&V+3=99^bbbZ8Hg8GWccMi`R{M%fgN2-2r0TAD{oN^W7i7+OV_=7c)R zRt?9(&vA;#6UF~j^3k2$-@q!LJNh&4|IKmvMQEuOd>LB& z|8d9PQE%M)SW%cbcd>_=C72ybKTe2sAD*fdKC87_%2RW8et<$k!i@o&)1vs*8upoY zo{Zf3yOzcu7W$hn+kYHzzjN&1r%C?j#Qt-^6LS6T|19|aoD+Y}iU0j`;uqapWvXDH zt(&#ryNTR*u+2vBuJV_L!Y}nqtTQRLe+fGoQALaw4^OE&1m7ToUGn*jKvooD@#oC6 zxJX+wo8vb~|9Ipm7leqF7`Gwx6pwiBMk6EzqC$b)Sdqae-!^RA)pOb0TO<$`q-;r+ zsBX&9i~(?#NURD4u(+Fj81wlQn(U2HjFu@_LCSqmCH$H9=eYQMih0)g?ure|kX7-_ zOBDx;O5Pa)S2M1tVNMw1k) z;>B+)6#9AQ3tCu^RqnBc*@o$8UD=rkCsJj;Izo~eOF3ebdgQb?)L)uxNu};^ngD3c zewxQBf9Cx;E`QF6|0&o1To3;(`6?Qlvb?2rJ#C8y#9#|@4s)}tgC-%tjl;=tQ|S&>iy-! z&t(g@!#~JQ5hRT1CVdggI>J)VKohPkMl~o}?B=m<-(0xe=fQ}E*1^V;@;}|7oKQd< zk~QDSXnp(wfsjg77<`lZUaRl3fRou24q6i4-v>;AQFS0uaKqWIoGJL}1LpdCDn2$_ zS786D?g6d9lYegB_X&&WCQ~)Tm8=QrXBj=Ei>1qw!zMbI^2k%)-Cb|rry%}pa{>7q zETuN9!>Ld1c-;{rcrFUJhYRBrn|jg~-79JN1-QPWP^c$S|7Se#Unk~2O4Eqg`30rt zKgGuU-$I`Jk)iv4xl5%Mem-y!f*TL4!BQet#Wk*54v`mqtfbXSfdd4Xz^JV=gDNah zm6#;)BO=Sap``N(sZ&4kFIF|M`c zT94v&8jy2_FY~X^@=QOu~cHsU<=0&nL{hpD=w*0MZv!5iJJl}*+9bJCXIk@8 zy$ogsZuAu=)5%>i-wEkacjewWK<+)MOMWrjaCQKFUA@B#@jSUjtvpbeC6*b)Q{B%# zk%>+S=}XX@x

m?X+LpmP3!dm^NqiZ(fK<0l(K!9fWxBr+PhCT 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%0AaGntEJ!)ci_ioRJ|j+Xh&wP{Myv3JkB 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

b)crc3}oyY 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
0V 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 literal 0 HcmV?d00001 From 31911fb18c2103fa5c1b2ea73322baaf10a0b0ff Mon Sep 17 00:00:00 2001 From: chargehand <2502468276@qq.com> Date: Fri, 7 Oct 2022 19:24:25 +0800 Subject: [PATCH 2/5] g --- ...述.doc => 导航系统用例描述 .doc} | Bin 20480 -> 22016 bytes 1 file changed, 0 insertions(+), 0 deletions(-) rename model/用例描述/{导航系统用例描述.doc => 导航系统用例描述 .doc} (52%) diff --git a/model/用例描述/导航系统用例描述.doc b/model/用例描述/导航系统用例描述 .doc similarity index 52% rename from model/用例描述/导航系统用例描述.doc rename to model/用例描述/导航系统用例描述 .doc index 8a6b63143e14aeffb35a1451b9c890b4a97ff186..f38c3e5c7af313b8af3a4f0501cec32f65e1f31e 100644 GIT binary patch delta 2455 zcmY+Gdr(wW9LLYO>>@0?z=AHY0rGNZ143kZh{A^8G-e2bj5ug!n1PCnV@hefEGH33 zl%F*XVis9p8LD!ocsNr zz4iNK{Xu!eUy)H{R?6r-Por*lWMqUIJVWL1(SpUYMOR_+-#^>>@~s=vLkMwR-KeXV zGF2VW+oboaXqgL!cNJXk@(Pp5;>@FeQuAdN+QinJr@`GfM(eh|5O)S0PI0Dx@x$ei zTHyVLltb!K!(}<)kT05qAhT&I-O~lA=Z#CGve!)EzR{*s*D2RekB%aB;Z)(9;Clc` z0`x+Rmei|@(l0OxF_A9##DyLA5@HFi2=EpnQM<*_5L{h#M-dzPF7+#GubR z1|iB7Ats?*iZ~B_C(&l}hx#()?WCiAujvDDRV!*`-c~8ZS@iC9^=QOktTZj4Q$K=i zMe2n>lIp3zJYDJF;@A&N!kX7s*k3iF+&Yq8Ub)=9A+2;?er27dlxx(yqF_taKtb<< z#Nwu+{;DliiN(f|XVt&f-fqrqc=YkP+DqF43XLN-YX=HAYAV|DS=;u8H9_@%ulVZ| zC6RJ1!PI4$XyRmb`SuO1i|6HAXnSz6w~}ZQCNWjSs?UPT6kRN;RBDZ<63axj)w)2Z z%7|zs#E1#|f>odb)PoPeZZ$LNqIB*?^;2*hoCE`45DWw1BZLlkf?!|;6`&Gq0@Xg` zwEswdL`(;v&&!or!mk=9cYvMXOVAGbz(X(q2EigMWeIp2l!Hy68Z;VJXGF84pQbpR zjfk5-JLmupK|gp5h5@E8jKCMzK`h7sPLO9JXT-Z|O;oa^nutjlRUTUBgG#U#tOHG8 z2iOk|fIHwWcntmo3M8Qe3BKfv!Bk_~G0k~MmVm}YkOXo;9#{gFf+L^{Tms*NyWk!e z1j9i1sm>@5Nw3GXQFwGHvf(2vAQ;$y9jpWEK|AOGr@>ip3)}(y;4u*XquFZgXE>8T z1`XzeLQn)2f>odbYy#EbI5-KefNpRfJU}K}F)!CjWO{%W#f<3#PY@0wKmtevd0;*$ z1#f|BPzzeY9<%C<`A&N8L47ZH0?*u(RALWRgltJl*0Ulj)bymw@+B4}3zAjH3Un)v zRmX~BwXvXBOzku+In4JqCOvlaQ2vaN>=R=#DxKQk3vEE!V5>G*kKH0g22xx~Bwa~K zAs@%GNZin16F#pf;>{Qjj~I`f7_o3RE*fj6!KAD@7B>rD313U4eT8JghynR~zis2F==_k-C#YWId)HPZu3_TJ3m& zPN!LEpTkR2rqk+_$&{30t#i%Z#Dixaxjn@GVehbS*fZ=Gw>A2;xBEpK+|UL;XoFMQ zpi>k0i9MP~Y@?1D@pRQEiu$HoXfVTDdXhQCLZO*{&ufOXo%A#{h(34taG8b&C=Bda zb}KuTUCIt+caA!9)Pw9l_8$B0tRLm3hSJ)kxBprjj9c(=Dr?YotHDyIVz`T1 z(&MF>4$TaAjqTXXAUfxWqyy>UQ-zUD&IV_5vz4_rW(%`@*}81o2lQe_nEV+YD3g^) z9!t@gQ^=AY-;$no9{hu!RUGP{@^%_i+2Ks k4~dVv?k@ePDK}cTW%)4+9nMYk>fzTSAyU=fbK8{v0Fcw$>i_@% delta 1981 zcmY+_e@v8h90&04_vtyjgS+E6et8ER2iUn8*s0fX@#F6JDP;l5rp^?p8NX(1iEY}_ z&=@h@n({H*TrpsbF>MWbR(qJwz7?2naKuRqwIOZ@LZ6<_fHf8m3-^V(+1 zZYk%r^RbuZil7}$LQsP3QM#czwTsrBQaR=zk3Glc*T2#~Dpbl+J+#-p)?S4{oF*Y2 zZ0TDy+w{Fvh$Olc_ejPLvk*_=h#_nP{~s=HqaLLrwlY%yCsg#lO*m>5`Yc$4XjX*i z$F?5z1o|e^k%ZSwx6$JqosZvSI%5;!4ECBV_tE13dSB3c_;E2SX`S<&={Wk#2>W0^bZN!epUH3+cDtb$ z`rs#+f;qSYwQ)jhfqH0weXt*nLT8*7UjL~KcVfQ}24D()ft&Cr{0%BDHwL_r4FL#3 zB~)3puz#DRT@SZJMSK-no`XHm2pw<~-hdM@23KGbeuNpA1vjQF-A3V6U(um8!?Y{s zX$+Q*Mh}Fb0IJ|gcpG|Q1V-TsT!owP8%%>@r?B@K?NILX5+f;ijw(1I3F@H%PQhsy zhO_VmjKKs(W5IXeBWqa-IU=QWIAW%|MXB^oew@DjBoZNCB!#AnEQ@y-vsqaA@^~fi zD&Q5s>F2B)bIuv(d~>!r*LRF3{nc2E<3^h3RFQY_D%x-*x%wH0BRr=uif~eY#KXJP zRg$;H%H#1GSy~ai8h9n}D&Q5s>DQA_dC?5o7P6%+d#E28&;A~@mip|6jZN)%9hc)` zGU;a=J{k2N45?%;|X}oF_?OAHFHu!|w6nv-uRcPC5 zHps+#NoQAZE%iqJ8JyR8YfF?Y4ZDp0B>tE7m$vqvx*S?v=QmfVdLO^GyRKiM6A1_Y E1<<;4F#rGn From c59f16ced39e28ad8c337065b583559a11541d89 Mon Sep 17 00:00:00 2001 From: wny <1665951082@qq.com> Date: Sat, 8 Oct 2022 22:46:45 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- model/界面流图/界面流图-信息栏.jpg | Bin 45113 -> 48202 bytes .../界面流图-修改信息栏信息.jpg | Bin 61549 -> 64246 bytes .../界面流图-修改地图信息.jpg | Bin 43268 -> 42594 bytes .../界面流图-修改密码.jpg | Bin 33776 -> 24691 bytes model/界面流图/界面流图-导航.jpg | Bin 73549 -> 43740 bytes model/界面流图/界面流图-登陆.jpg | Bin 36669 -> 36253 bytes .../界面流图-管理账户信息.jpg | Bin 43130 -> 43477 bytes 7 files changed, 0 insertions(+), 0 deletions(-) diff --git a/model/界面流图/界面流图-信息栏.jpg b/model/界面流图/界面流图-信息栏.jpg index f6ca4c7d1a517905b820aae9326be5fb0a739f65..c47955fc615e5d81c6d32edf2b4a0f3f2e08ca9d 100644 GIT binary patch literal 48202 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

h2h8H2)c2yh{`;&6`tAGCU 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 z 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 literal 61549 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 NZ=U`iHwa{}?_b9~_xb<; diff --git a/model/界面流图/界面流图-修改地图信息.jpg b/model/界面流图/界面流图-修改地图信息.jpg index 5c38cde20b952cf8a0ed249f0942ac140c726b7c..5b4379db1619a8a996d5cc2bd3430733bc958f34 100644 GIT binary patch literal 42594 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 literal 43268 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 literal 33776 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 bz0kVnnQ#8)f(Ac|Bv0-q{$a8ch7bNfirO-{ diff --git a/model/界面流图/界面流图-导航.jpg b/model/界面流图/界面流图-导航.jpg index 3422a56bf5d4d12a8f90464fa4032dbf1e7b7259..70abf93dae6cab94e69916056c54afa999ad388a 100644 GIT binary patch literal 43740 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 literal 73549 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 ta3a(u?0S4hLl@cy5>*I+Sm}r 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 diff --git a/model/界面流图/界面流图-登陆.jpg b/model/界面流图/界面流图-登陆.jpg index 4558b08ac3ed39bd11ed17044feebf3187962edd..649d3a58e8c8d88aacff405a63a44bc74b04c4d7 100644 GIT binary patch literal 36253 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 diff --git a/model/界面流图/界面流图-管理账户信息.jpg b/model/界面流图/界面流图-管理账户信息.jpg index 357bb1def4edf9dc7ce602b1c97018a4817b4c9a..ca3d729f4977c4e72e725bd2b799cd954b3f68ef 100644 GIT binary patch literal 43477 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 VM=6GKd~0d5Q}*x6sp7x({RQANCma9( literal 43130 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

A^KQSoX|!Ub&=_(VV5&HIkD{ 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 From bedbb4d3ba41c241ef2430e67d8eefe3a11dfdb5 Mon Sep 17 00:00:00 2001 From: wny <1665951082@qq.com> Date: Sat, 8 Oct 2022 22:53:43 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- model/界面流图/界面流图-信息栏.jpg | Bin 48202 -> 48014 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/model/界面流图/界面流图-信息栏.jpg b/model/界面流图/界面流图-信息栏.jpg index c47955fc615e5d81c6d32edf2b4a0f3f2e08ca9d..3df0574220559d02891d49c814427623f89ea679 100644 GIT binary patch literal 48014 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 literal 48202 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

0aDJiH_{d=06lgSAZ&$J7VTEMhJE^I*JBMY-jZ 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 Date: Fri, 14 Oct 2022 11:04:42 +0800 Subject: [PATCH 5/5] g --- doc/文档.txt | 0 other/产品海报和ppt.txt | 0 scr/weichat_work/.eslintrc.js | 31 + scr/weichat_work/miniprogram/app.json | 14 + scr/weichat_work/miniprogram/app.ts | 18 + scr/weichat_work/miniprogram/app.wxss | 10 + .../miniprogram/pages/index/index.json | 3 + .../miniprogram/pages/index/index.ts | 49 + .../miniprogram/pages/index/index.wxml | 23 + .../miniprogram/pages/index/index.wxss | 19 + .../miniprogram/pages/logs/logs.json | 4 + .../miniprogram/pages/logs/logs.ts | 19 + .../miniprogram/pages/logs/logs.wxml | 6 + .../miniprogram/pages/logs/logs.wxss | 8 + scr/weichat_work/miniprogram/sitemap.json | 7 + scr/weichat_work/miniprogram/utils/util.ts | 19 + scr/weichat_work/package.json | 15 + scr/weichat_work/project.config.json | 30 + scr/weichat_work/project.private.config.json | 7 + scr/weichat_work/tsconfig.json | 30 + scr/weichat_work/typings/index.d.ts | 8 + scr/weichat_work/typings/types/index.d.ts | 1 + scr/weichat_work/typings/types/wx/index.d.ts | 134 + .../typings/types/wx/lib.wx.api.d.ts | 28852 ++++++++++++++++ .../typings/types/wx/lib.wx.app.d.ts | 270 + .../typings/types/wx/lib.wx.behavior.d.ts | 68 + .../typings/types/wx/lib.wx.cloud.d.ts | 979 + .../typings/types/wx/lib.wx.component.d.ts | 676 + .../typings/types/wx/lib.wx.event.d.ts | 1435 + .../typings/types/wx/lib.wx.page.d.ts | 263 + 30 files changed, 32998 insertions(+) create mode 100644 doc/文档.txt create mode 100644 other/产品海报和ppt.txt create mode 100644 scr/weichat_work/.eslintrc.js create mode 100644 scr/weichat_work/miniprogram/app.json create mode 100644 scr/weichat_work/miniprogram/app.ts create mode 100644 scr/weichat_work/miniprogram/app.wxss create mode 100644 scr/weichat_work/miniprogram/pages/index/index.json create mode 100644 scr/weichat_work/miniprogram/pages/index/index.ts create mode 100644 scr/weichat_work/miniprogram/pages/index/index.wxml create mode 100644 scr/weichat_work/miniprogram/pages/index/index.wxss create mode 100644 scr/weichat_work/miniprogram/pages/logs/logs.json create mode 100644 scr/weichat_work/miniprogram/pages/logs/logs.ts create mode 100644 scr/weichat_work/miniprogram/pages/logs/logs.wxml create mode 100644 scr/weichat_work/miniprogram/pages/logs/logs.wxss create mode 100644 scr/weichat_work/miniprogram/sitemap.json create mode 100644 scr/weichat_work/miniprogram/utils/util.ts create mode 100644 scr/weichat_work/package.json create mode 100644 scr/weichat_work/project.config.json create mode 100644 scr/weichat_work/project.private.config.json create mode 100644 scr/weichat_work/tsconfig.json create mode 100644 scr/weichat_work/typings/index.d.ts create mode 100644 scr/weichat_work/typings/types/index.d.ts create mode 100644 scr/weichat_work/typings/types/wx/index.d.ts create mode 100644 scr/weichat_work/typings/types/wx/lib.wx.api.d.ts create mode 100644 scr/weichat_work/typings/types/wx/lib.wx.app.d.ts create mode 100644 scr/weichat_work/typings/types/wx/lib.wx.behavior.d.ts create mode 100644 scr/weichat_work/typings/types/wx/lib.wx.cloud.d.ts create mode 100644 scr/weichat_work/typings/types/wx/lib.wx.component.d.ts create mode 100644 scr/weichat_work/typings/types/wx/lib.wx.event.d.ts create mode 100644 scr/weichat_work/typings/types/wx/lib.wx.page.d.ts diff --git a/doc/文档.txt b/doc/文档.txt new file mode 100644 index 0000000..e69de29 diff --git a/other/产品海报和ppt.txt b/other/产品海报和ppt.txt new file mode 100644 index 0000000..e69de29 diff --git a/scr/weichat_work/.eslintrc.js b/scr/weichat_work/.eslintrc.js new file mode 100644 index 0000000..115cc02 --- /dev/null +++ b/scr/weichat_work/.eslintrc.js @@ -0,0 +1,31 @@ +/* + * Eslint config file + * Documentation: https://eslint.org/docs/user-guide/configuring/ + * Install the Eslint extension before using this feature. + */ +module.exports = { + env: { + es6: true, + browser: true, + node: true, + }, + ecmaFeatures: { + modules: true, + }, + parserOptions: { + ecmaVersion: 2018, + sourceType: 'module', + }, + globals: { + wx: true, + App: true, + Page: true, + getCurrentPages: true, + getApp: true, + Component: true, + requirePlugin: true, + requireMiniProgram: true, + }, + // extends: 'eslint:recommended', + rules: {}, +} diff --git a/scr/weichat_work/miniprogram/app.json b/scr/weichat_work/miniprogram/app.json new file mode 100644 index 0000000..362db77 --- /dev/null +++ b/scr/weichat_work/miniprogram/app.json @@ -0,0 +1,14 @@ +{ + "pages": [ + "pages/index/index", + "pages/logs/logs" + ], + "window": { + "backgroundTextStyle": "light", + "navigationBarBackgroundColor": "#fff", + "navigationBarTitleText": "Weixin", + "navigationBarTextStyle": "black" + }, + "style": "v2", + "sitemapLocation": "sitemap.json" +} \ No newline at end of file diff --git a/scr/weichat_work/miniprogram/app.ts b/scr/weichat_work/miniprogram/app.ts new file mode 100644 index 0000000..1af73a8 --- /dev/null +++ b/scr/weichat_work/miniprogram/app.ts @@ -0,0 +1,18 @@ +// app.ts +App({ + globalData: {}, + onLaunch() { + // 展示本地存储能力 + const logs = wx.getStorageSync('logs') || [] + logs.unshift(Date.now()) + wx.setStorageSync('logs', logs) + + // 登录 + wx.login({ + success: res => { + console.log(res.code) + // 发送 res.code 到后台换取 openId, sessionKey, unionId + }, + }) + }, +}) \ No newline at end of file diff --git a/scr/weichat_work/miniprogram/app.wxss b/scr/weichat_work/miniprogram/app.wxss new file mode 100644 index 0000000..06c6fc9 --- /dev/null +++ b/scr/weichat_work/miniprogram/app.wxss @@ -0,0 +1,10 @@ +/**app.wxss**/ +.container { + height: 100%; + display: flex; + flex-direction: column; + align-items: center; + justify-content: space-between; + padding: 200rpx 0; + box-sizing: border-box; +} diff --git a/scr/weichat_work/miniprogram/pages/index/index.json b/scr/weichat_work/miniprogram/pages/index/index.json new file mode 100644 index 0000000..8835af0 --- /dev/null +++ b/scr/weichat_work/miniprogram/pages/index/index.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/scr/weichat_work/miniprogram/pages/index/index.ts b/scr/weichat_work/miniprogram/pages/index/index.ts new file mode 100644 index 0000000..52d84cf --- /dev/null +++ b/scr/weichat_work/miniprogram/pages/index/index.ts @@ -0,0 +1,49 @@ +// index.ts +// 获取应用实例 +const app = getApp() + +Page({ + data: { + motto: 'Hello World', + userInfo: {}, + hasUserInfo: false, + canIUse: wx.canIUse('button.open-type.getUserInfo'), + canIUseGetUserProfile: false, + canIUseOpenData: wx.canIUse('open-data.type.userAvatarUrl') && wx.canIUse('open-data.type.userNickName') // 如需尝试获取用户信息可改为false + }, + // 事件处理函数 + bindViewTap() { + wx.navigateTo({ + url: '../logs/logs', + }) + }, + onLoad() { + // @ts-ignore + if (wx.getUserProfile) { + this.setData({ + canIUseGetUserProfile: true + }) + } + }, + getUserProfile() { + // 推荐使用wx.getUserProfile获取用户信息,开发者每次通过该接口获取用户个人信息均需用户确认,开发者妥善保管用户快速填写的头像昵称,避免重复弹窗 + wx.getUserProfile({ + desc: '展示用户信息', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写 + success: (res) => { + console.log(res) + this.setData({ + userInfo: res.userInfo, + hasUserInfo: true + }) + } + }) + }, + getUserInfo(e: any) { + // 不推荐使用getUserInfo获取用户信息,预计自2021年4月13日起,getUserInfo将不再弹出弹窗,并直接返回匿名的用户个人信息 + console.log(e) + this.setData({ + userInfo: e.detail.userInfo, + hasUserInfo: true + }) + } +}) diff --git a/scr/weichat_work/miniprogram/pages/index/index.wxml b/scr/weichat_work/miniprogram/pages/index/index.wxml new file mode 100644 index 0000000..f00d294 --- /dev/null +++ b/scr/weichat_work/miniprogram/pages/index/index.wxml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + 请使用1.4.4及以上版本基础库 + + + + {{userInfo.nickName}} + + + + {{motto}} + + diff --git a/scr/weichat_work/miniprogram/pages/index/index.wxss b/scr/weichat_work/miniprogram/pages/index/index.wxss new file mode 100644 index 0000000..eb64203 --- /dev/null +++ b/scr/weichat_work/miniprogram/pages/index/index.wxss @@ -0,0 +1,19 @@ +/**index.wxss**/ +.userinfo { + display: flex; + flex-direction: column; + align-items: center; + color: #aaa; +} + +.userinfo-avatar { + overflow: hidden; + width: 128rpx; + height: 128rpx; + margin: 20rpx; + border-radius: 50%; +} + +.usermotto { + margin-top: 200px; +} \ No newline at end of file diff --git a/scr/weichat_work/miniprogram/pages/logs/logs.json b/scr/weichat_work/miniprogram/pages/logs/logs.json new file mode 100644 index 0000000..3ee76c1 --- /dev/null +++ b/scr/weichat_work/miniprogram/pages/logs/logs.json @@ -0,0 +1,4 @@ +{ + "navigationBarTitleText": "查看启动日志", + "usingComponents": {} +} \ No newline at end of file diff --git a/scr/weichat_work/miniprogram/pages/logs/logs.ts b/scr/weichat_work/miniprogram/pages/logs/logs.ts new file mode 100644 index 0000000..2fcfb22 --- /dev/null +++ b/scr/weichat_work/miniprogram/pages/logs/logs.ts @@ -0,0 +1,19 @@ +// logs.ts +// const util = require('../../utils/util.js') +import { formatTime } from '../../utils/util' + +Page({ + data: { + logs: [], + }, + onLoad() { + this.setData({ + logs: (wx.getStorageSync('logs') || []).map((log: string) => { + return { + date: formatTime(new Date(log)), + timeStamp: log + } + }), + }) + }, +}) diff --git a/scr/weichat_work/miniprogram/pages/logs/logs.wxml b/scr/weichat_work/miniprogram/pages/logs/logs.wxml new file mode 100644 index 0000000..0b6b645 --- /dev/null +++ b/scr/weichat_work/miniprogram/pages/logs/logs.wxml @@ -0,0 +1,6 @@ + + + + {{index + 1}}. {{log.date}} + + diff --git a/scr/weichat_work/miniprogram/pages/logs/logs.wxss b/scr/weichat_work/miniprogram/pages/logs/logs.wxss new file mode 100644 index 0000000..94d4b88 --- /dev/null +++ b/scr/weichat_work/miniprogram/pages/logs/logs.wxss @@ -0,0 +1,8 @@ +.log-list { + display: flex; + flex-direction: column; + padding: 40rpx; +} +.log-item { + margin: 10rpx; +} diff --git a/scr/weichat_work/miniprogram/sitemap.json b/scr/weichat_work/miniprogram/sitemap.json new file mode 100644 index 0000000..ca02add --- /dev/null +++ b/scr/weichat_work/miniprogram/sitemap.json @@ -0,0 +1,7 @@ +{ + "desc": "关于本文件的更多信息,请参考文档 https://developers.weixin.qq.com/miniprogram/dev/framework/sitemap.html", + "rules": [{ + "action": "allow", + "page": "*" + }] +} \ No newline at end of file diff --git a/scr/weichat_work/miniprogram/utils/util.ts b/scr/weichat_work/miniprogram/utils/util.ts new file mode 100644 index 0000000..69a2e19 --- /dev/null +++ b/scr/weichat_work/miniprogram/utils/util.ts @@ -0,0 +1,19 @@ +export const formatTime = (date: Date) => { + const year = date.getFullYear() + const month = date.getMonth() + 1 + const day = date.getDate() + const hour = date.getHours() + const minute = date.getMinutes() + const second = date.getSeconds() + + return ( + [year, month, day].map(formatNumber).join('/') + + ' ' + + [hour, minute, second].map(formatNumber).join(':') + ) +} + +const formatNumber = (n: number) => { + const s = n.toString() + return s[1] ? s : '0' + s +} diff --git a/scr/weichat_work/package.json b/scr/weichat_work/package.json new file mode 100644 index 0000000..5f731b7 --- /dev/null +++ b/scr/weichat_work/package.json @@ -0,0 +1,15 @@ +{ + "name": "miniprogram-ts-less-quickstart", + "version": "1.0.0", + "description": "", + "scripts": { + }, + "keywords": [], + "author": "", + "license": "", + "dependencies": { + }, + "devDependencies": { + "miniprogram-api-typings": "^2.8.3-1" + } +} diff --git a/scr/weichat_work/project.config.json b/scr/weichat_work/project.config.json new file mode 100644 index 0000000..ba361a6 --- /dev/null +++ b/scr/weichat_work/project.config.json @@ -0,0 +1,30 @@ +{ + "description": "项目配置文件", + "packOptions": { + "ignore": [], + "include": [] + }, + "miniprogramRoot": "miniprogram/", + "compileType": "miniprogram", + "projectname": "ts-demo", + "setting": { + "useCompilerPlugins": [ + "typescript" + ], + "babelSetting": { + "ignore": [], + "disablePlugins": [], + "outputPath": "" + } + }, + "simulatorType": "wechat", + "simulatorPluginLibVersion": {}, + "condition": {}, + "srcMiniprogramRoot": "miniprogram/", + "appid": "wxc5e37420ae989824", + "libVersion": "2.27.0", + "editorSetting": { + "tabIndent": "insertSpaces", + "tabSize": 2 + } +} \ No newline at end of file diff --git a/scr/weichat_work/project.private.config.json b/scr/weichat_work/project.private.config.json new file mode 100644 index 0000000..3be5a98 --- /dev/null +++ b/scr/weichat_work/project.private.config.json @@ -0,0 +1,7 @@ +{ + "description": "项目私有配置文件。此文件中的内容将覆盖 project.config.json 中的相同字段。项目的改动优先同步到此文件中。详见文档:https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html", + "projectname": "weichat_work", + "setting": { + "compileHotReLoad": true + } +} \ No newline at end of file diff --git a/scr/weichat_work/tsconfig.json b/scr/weichat_work/tsconfig.json new file mode 100644 index 0000000..ade784e --- /dev/null +++ b/scr/weichat_work/tsconfig.json @@ -0,0 +1,30 @@ +{ + "compilerOptions": { + "strictNullChecks": true, + "noImplicitAny": true, + "module": "CommonJS", + "target": "ES2020", + "allowJs": true, + "allowSyntheticDefaultImports": true, + "esModuleInterop": true, + "experimentalDecorators": true, + "noImplicitThis": true, + "noImplicitReturns": true, + "alwaysStrict": true, + "noFallthroughCasesInSwitch": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "strict": true, + "strictPropertyInitialization": true, + "lib": ["ES2020"], + "typeRoots": [ + "./typings" + ] + }, + "include": [ + "./**/*.ts" + ], + "exclude": [ + "node_modules" + ] +} diff --git a/scr/weichat_work/typings/index.d.ts b/scr/weichat_work/typings/index.d.ts new file mode 100644 index 0000000..3ee60c8 --- /dev/null +++ b/scr/weichat_work/typings/index.d.ts @@ -0,0 +1,8 @@ +/// + +interface IAppOption { + globalData: { + userInfo?: WechatMiniprogram.UserInfo, + } + userInfoReadyCallback?: WechatMiniprogram.GetUserInfoSuccessCallback, +} \ No newline at end of file diff --git a/scr/weichat_work/typings/types/index.d.ts b/scr/weichat_work/typings/types/index.d.ts new file mode 100644 index 0000000..a5e8a7c --- /dev/null +++ b/scr/weichat_work/typings/types/index.d.ts @@ -0,0 +1 @@ +/// diff --git a/scr/weichat_work/typings/types/wx/index.d.ts b/scr/weichat_work/typings/types/wx/index.d.ts new file mode 100644 index 0000000..8ecd122 --- /dev/null +++ b/scr/weichat_work/typings/types/wx/index.d.ts @@ -0,0 +1,134 @@ +/*! ***************************************************************************** +Copyright (c) 2022 Tencent, Inc. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +***************************************************************************** */ + +/// +/// +/// +/// +/// +/// +/// + +declare namespace WechatMiniprogram { + type IAnyObject = Record + type Optional = F extends (arg: infer P) => infer R ? (arg?: P) => R : F + type OptionalInterface = { [K in keyof T]: Optional } + interface AsyncMethodOptionLike { + success?: (...args: any[]) => void + } + type PromisifySuccessResult< + P, + T extends AsyncMethodOptionLike + > = P extends { + success: any + } + ? void + : P extends { fail: any } + ? void + : P extends { complete: any } + ? void + : Promise>[0]> + + // TODO: Extract real definition from `lib.dom.d.ts` to replace this + type IIRFilterNode = any + type WaveShaperNode = any + type ConstantSourceNode = any + type OscillatorNode = any + type GainNode = any + type BiquadFilterNode = any + type PeriodicWaveNode = any + type BufferSourceNode = any + type ChannelSplitterNode = any + type ChannelMergerNode = any + type DelayNode = any + type DynamicsCompressorNode = any + type ScriptProcessorNode = any + type PannerNode = any + type AnalyserNode = any + type AudioListener = any + type WebGLTexture = any + type WebGLRenderingContext = any +} + +declare let console: WechatMiniprogram.Console + +declare let wx: WechatMiniprogram.Wx +/** 引入模块。返回模块通过 `module.exports` 或 `exports` 暴露的接口。 */ +declare function require( + /** 需要引入模块文件相对于当前文件的相对路径,或 npm 模块名,或 npm 模块路径。不支持绝对路径 */ + module: string +): any +/** 引入插件。返回插件通过 `main` 暴露的接口。 */ +declare function requirePlugin( + /** 需要引入的插件的 alias */ + module: string +): any +/** 插件引入当前使用者小程序。返回使用者小程序通过 [插件配置中 `export` 暴露的接口](https://developers.weixin.qq.com/miniprogram/dev/framework/plugin/using.html#%E5%AF%BC%E5%87%BA%E5%88%B0%E6%8F%92%E4%BB%B6)。 + * + * 该接口只在插件中存在 + * + * 最低基础库: `2.11.1` */ +declare function requireMiniProgram(): any +/** 当前模块对象 */ +declare let module: { + /** 模块向外暴露的对象,使用 `require` 引用该模块时可以获取 */ + exports: any +} +/** `module.exports` 的引用 */ +declare let exports: any + +/** [clearInterval(number intervalID)](https://developers.weixin.qq.com/miniprogram/dev/api/base/timer/clearInterval.html) + * + * 取消由 setInterval 设置的定时器。 */ +declare function clearInterval( + /** 要取消的定时器的 ID */ + intervalID: number +): void +/** [clearTimeout(number timeoutID)](https://developers.weixin.qq.com/miniprogram/dev/api/base/timer/clearTimeout.html) + * + * 取消由 setTimeout 设置的定时器。 */ +declare function clearTimeout( + /** 要取消的定时器的 ID */ + timeoutID: number +): void +/** [number setInterval(function callback, number delay, any rest)](https://developers.weixin.qq.com/miniprogram/dev/api/base/timer/setInterval.html) + * + * 设定一个定时器。按照指定的周期(以毫秒计)来执行注册的回调函数 */ +declare function setInterval( + /** 回调函数 */ + callback: (...args: any[]) => any, + /** 执行回调函数之间的时间间隔,单位 ms。 */ + delay?: number, + /** param1, param2, ..., paramN 等附加参数,它们会作为参数传递给回调函数。 */ + rest?: any +): number +/** [number setTimeout(function callback, number delay, any rest)](https://developers.weixin.qq.com/miniprogram/dev/api/base/timer/setTimeout.html) + * + * 设定一个定时器。在定时到期以后执行注册的回调函数 */ +declare function setTimeout( + /** 回调函数 */ + callback: (...args: any[]) => any, + /** 延迟的时间,函数的调用会在该延迟之后发生,单位 ms。 */ + delay?: number, + /** param1, param2, ..., paramN 等附加参数,它们会作为参数传递给回调函数。 */ + rest?: any +): number diff --git a/scr/weichat_work/typings/types/wx/lib.wx.api.d.ts b/scr/weichat_work/typings/types/wx/lib.wx.api.d.ts new file mode 100644 index 0000000..433f8b9 --- /dev/null +++ b/scr/weichat_work/typings/types/wx/lib.wx.api.d.ts @@ -0,0 +1,28852 @@ +/*! ***************************************************************************** +Copyright (c) 2022 Tencent, Inc. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +***************************************************************************** */ + +declare namespace WechatMiniprogram { + interface AccessFailCallbackResult { + /** 错误信息 + * + * 可选值: + * - 'fail no such file or directory ${path}': 文件/目录不存在; + * - 'fail sdcard not mounted': Android sdcard 挂载失败; */ + errMsg: string + } + interface AccessOption { + /** 要判断是否存在的文件/目录路径 (本地路径) */ + path: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: AccessCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: AccessFailCallback + /** 接口调用成功的回调函数 */ + success?: AccessSuccessCallback + } + /** 帐号信息 */ + interface AccountInfo { + /** 小程序帐号信息 */ + miniProgram: MiniProgram + /** 插件帐号信息(仅在插件中调用时包含这一项) */ + plugin: Plugin + } + interface AddArcOption { + /** 终点 */ + end: MapPostion + /** 圆弧 id */ + id: number + /** 起始点 */ + start: MapPostion + /** 夹角角度 */ + angle?: number + /** 线的颜色 */ + color?: number + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: AddArcCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: AddArcFailCallback + /** 途经点 */ + pass?: MapPostion + /** 接口调用成功的回调函数 */ + success?: AddArcSuccessCallback + /** 线宽 */ + width?: number + } + interface AddCardOption { + /** 需要添加的卡券列表 */ + cardList: AddCardRequestInfo[] + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: AddCardCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: AddCardFailCallback + /** 接口调用成功的回调函数 */ + success?: AddCardSuccessCallback + } + /** 需要添加的卡券列表 */ + interface AddCardRequestInfo { + /** 卡券的扩展参数。需将 CardExt 对象 JSON 序列化为**字符串**传入 */ + cardExt: string + /** 卡券 ID */ + cardId: string + } + /** 卡券添加结果列表 */ + interface AddCardResponseInfo { + /** 卡券的扩展参数,结构请参考下文 */ + cardExt: string + /** 用户领取到卡券的 ID */ + cardId: string + /** 加密 code,为用户领取到卡券的code加密后的字符串,解密请参照:[code 解码接口](https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1499332673_Unm7V) */ + code: string + /** 是否成功 */ + isSuccess: boolean + } + interface AddCardSuccessCallbackResult { + /** 卡券添加结果列表 */ + cardList: AddCardResponseInfo[] + errMsg: string + } + interface AddCustomLayerOption { + /** 个性化图层id */ + layerId: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: AddCustomLayerCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: AddCustomLayerFailCallback + /** 接口调用成功的回调函数 */ + success?: AddCustomLayerSuccessCallback + } + interface AddFileToFavoritesOption { + /** 要收藏的文件地址,必须为本地路径或临时路径 */ + filePath: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: AddFileToFavoritesCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: AddFileToFavoritesFailCallback + /** 自定义文件名,若留空则使用filePath中的文件名 */ + fileName?: string + /** 接口调用成功的回调函数 */ + success?: AddFileToFavoritesSuccessCallback + } + interface AddGroundOverlayOption { + /** 图片覆盖的经纬度范围 */ + bounds: MapBounds + /** 图片图层 id */ + id: string + /** 图片路径,支持网络图片、临时路径、代码包路径 */ + src: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: AddGroundOverlayCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: AddGroundOverlayFailCallback + /** 图层透明度 */ + opacity?: number + /** 接口调用成功的回调函数 */ + success?: AddGroundOverlaySuccessCallback + /** 是否可见 */ + visible?: boolean + /** 图层绘制顺序 */ + zIndex?: number + } + interface AddMarkersOption { + /** 同传入 map 组件的 marker 属性 */ + markers: any[] + /** 是否先清空地图上所有 marker */ + clear?: boolean + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: AddMarkersCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: AddMarkersFailCallback + /** 接口调用成功的回调函数 */ + success?: AddMarkersSuccessCallback + } + interface AddPhoneCalendarOption { + /** 开始时间的 unix 时间戳 */ + startTime: number + /** 日历事件标题 */ + title: string + /** 是否提醒,默认 true */ + alarm?: boolean + /** 提醒提前量,单位秒,默认 0 表示开始时提醒 */ + alarmOffset?: number + /** 是否全天事件,默认 false */ + allDay?: boolean + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: AddPhoneCalendarCompleteCallback + /** 事件说明 */ + description?: string + /** 结束时间的 unix 时间戳,默认与开始时间相同 */ + endTime?: string + /** 接口调用失败的回调函数 */ + fail?: AddPhoneCalendarFailCallback + /** 事件位置 */ + location?: string + /** 接口调用成功的回调函数 */ + success?: AddPhoneCalendarSuccessCallback + } + interface AddPhoneContactOption { + /** 名字 */ + firstName: string + /** 联系地址城市 */ + addressCity?: string + /** 联系地址国家 */ + addressCountry?: string + /** 联系地址邮政编码 */ + addressPostalCode?: string + /** 联系地址省份 */ + addressState?: string + /** 联系地址街道 */ + addressStreet?: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: AddPhoneContactCompleteCallback + /** 电子邮件 */ + email?: string + /** 接口调用失败的回调函数 */ + fail?: AddPhoneContactFailCallback + /** 住宅地址城市 */ + homeAddressCity?: string + /** 住宅地址国家 */ + homeAddressCountry?: string + /** 住宅地址邮政编码 */ + homeAddressPostalCode?: string + /** 住宅地址省份 */ + homeAddressState?: string + /** 住宅地址街道 */ + homeAddressStreet?: string + /** 住宅传真 */ + homeFaxNumber?: string + /** 住宅电话 */ + homePhoneNumber?: string + /** 公司电话 */ + hostNumber?: string + /** 姓氏 */ + lastName?: string + /** 中间名 */ + middleName?: string + /** 手机号 */ + mobilePhoneNumber?: string + /** 昵称 */ + nickName?: string + /** 公司 */ + organization?: string + /** 头像本地文件路径 */ + photoFilePath?: string + /** 备注 */ + remark?: string + /** 接口调用成功的回调函数 */ + success?: AddPhoneContactSuccessCallback + /** 职位 */ + title?: string + /** 网站 */ + url?: string + /** 微信号 */ + weChatNumber?: string + /** 工作地址城市 */ + workAddressCity?: string + /** 工作地址国家 */ + workAddressCountry?: string + /** 工作地址邮政编码 */ + workAddressPostalCode?: string + /** 工作地址省份 */ + workAddressState?: string + /** 工作地址街道 */ + workAddressStreet?: string + /** 工作传真 */ + workFaxNumber?: string + /** 工作电话 */ + workPhoneNumber?: string + } + interface AddPhoneRepeatCalendarOption { + /** 开始时间的 unix 时间戳 (1970年1月1日开始所经过的秒数) */ + startTime: number + /** 日历事件标题 */ + title: string + /** 是否提醒,默认 true */ + alarm?: boolean + /** 提醒提前量,单位秒,默认 0 表示开始时提醒 */ + alarmOffset?: number + /** 是否全天事件,默认 false */ + allDay?: boolean + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: AddPhoneRepeatCalendarCompleteCallback + /** 事件说明 */ + description?: string + /** 结束时间的 unix 时间戳,默认与开始时间相同 */ + endTime?: string + /** 接口调用失败的回调函数 */ + fail?: AddPhoneRepeatCalendarFailCallback + /** 事件位置 */ + location?: string + /** 重复周期结束时间的 unix 时间戳,不填表示一直重复 */ + repeatEndTime?: number + /** 重复周期,默认 month 每月重复 + * + * 可选值: + * - 'day': 每天重复; + * - 'week': 每周重复; + * - 'month': 每月重复。该模式日期不能大于 28 日; + * - 'year': 每年重复; */ + repeatInterval?: 'day' | 'week' | 'month' | 'year' + /** 接口调用成功的回调函数 */ + success?: AddPhoneRepeatCalendarSuccessCallback + } + interface AddServiceOption { + /** 描述service的Object */ + service: BLEPeripheralService + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: AddServiceCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: AddServiceFailCallback + /** 接口调用成功的回调函数 */ + success?: AddServiceSuccessCallback + } + interface AddVideoToFavoritesOption { + /** 要收藏的视频地址,必须为本地路径或临时路径 */ + videoPath: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: AddVideoToFavoritesCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: AddVideoToFavoritesFailCallback + /** 接口调用成功的回调函数 */ + success?: AddVideoToFavoritesSuccessCallback + /** 缩略图路径,若留空则使用视频首帧 */ + thumbPath?: string + } + interface AddVisualLayerOption { + /** 可视化图层id([创建图层指引](https://lbs.qq.com/dev/console/layers/layerEdit)) */ + layerId: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: AddVisualLayerCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: AddVisualLayerFailCallback + /** 刷新周期,单位秒 */ + interval?: number + /** 图层透明度 */ + opacity?: number + /** 接口调用成功的回调函数 */ + success?: AddVisualLayerSuccessCallback + /** 图层绘制顺序 */ + zIndex?: number + } + /** 广播自定义参数 */ + interface AdvertiseReqObj { + /** 需要基础库: `2.20.1` + * + * 以 beacon 设备形式广播的参数。 */ + beacon?: BeaconInfoObj + /** 当前设备是否可连接 */ + connectable?: boolean + /** 广播中 deviceName 字段,默认为空 */ + deviceName?: string + /** 广播的制造商信息。仅安卓支持,iOS 因系统限制无法定制。 */ + manufacturerData?: ManufacturerData[] + /** 要广播的服务 UUID 列表。使用 16/32 位 UUID 时请参考注意事项。 */ + serviceUuids?: string[] + } + /** animationData */ + interface AnimationExportResult { + actions: IAnyObject[] + } + /** 动画效果 */ + interface AnimationOption { + /** 动画变化时间,单位 ms */ + duration?: number + /** 动画变化方式 + * + * 可选值: + * - 'linear': 动画从头到尾的速度是相同的; + * - 'easeIn': 动画以低速开始; + * - 'easeOut': 动画以低速结束; + * - 'easeInOut': 动画以低速开始和结束; */ + timingFunc?: 'linear' | 'easeIn' | 'easeOut' | 'easeInOut' + } + interface AppAuthorizeSetting { + /** 允许微信使用相册的开关(仅 iOS 有效) */ + albumAuthorized: 'authorized' | 'denied' | 'not determined' + /** 允许微信使用蓝牙的开关(仅 iOS 有效) */ + bluetoothAuthorized: 'authorized' | 'denied' | 'not determined' + /** 允许微信使用摄像头的开关 */ + cameraAuthorized: 'authorized' | 'denied' | 'not determined' + /** 允许微信使用定位的开关 */ + locationAuthorized: 'authorized' | 'denied' | 'not determined' + /** 定位准确度。true 表示模糊定位,false 表示精确定位(仅 iOS 有效) */ + locationReducedAccuracy: boolean + /** 允许微信使用麦克风的开关 */ + microphoneAuthorized: 'authorized' | 'denied' | 'not determined' + /** 允许微信通知带有提醒的开关(仅 iOS 有效) */ + notificationAlertAuthorized: 'authorized' | 'denied' | 'not determined' + /** 允许微信通知的开关 */ + notificationAuthorized: 'authorized' | 'denied' | 'not determined' + /** 允许微信通知带有标记的开关(仅 iOS 有效) */ + notificationBadgeAuthorized: 'authorized' | 'denied' | 'not determined' + /** 允许微信通知带有声音的开关(仅 iOS 有效) */ + notificationSoundAuthorized: 'authorized' | 'denied' | 'not determined' + /** 允许微信读写日历的开关 */ + phoneCalendarAuthorized: 'authorized' | 'denied' | 'not determined' + } + interface AppBaseInfo { + /** 客户端基础库版本 */ + SDKVersion: string + /** 是否已打开调试。可通过右上角菜单或 [wx.setEnableDebug](https://developers.weixin.qq.com/miniprogram/dev/api/base/debug/wx.setEnableDebug.html) 打开调试。 */ + enableDebug: boolean + /** 当前小程序运行的宿主环境 */ + host: AppBaseInfoHost + /** 微信设置的语言 */ + language: string + /** 微信版本号 */ + version: string + /** 系统当前主题,取值为`light`或`dark`,全局配置`"darkmode":true`时才能获取,否则为 undefined (不支持小游戏) + * + * 可选值: + * - 'dark': 深色主题; + * - 'light': 浅色主题; */ + theme?: 'dark' | 'light' + } + /** 当前小程序运行的宿主环境 */ + interface AppBaseInfoHost { + /** 宿主 app(第三方App) 对应的 appId (当小程序运行在第三方App环境时才返回) */ + appId: string + } + interface AppendFileFailCallbackResult { + /** 错误信息 + * + * 可选值: + * - 'fail no such file or directory, open ${filePath}': 指定的 filePath 文件不存在; + * - 'fail illegal operation on a directory, open "${filePath}"': 指定的 filePath 是一个已经存在的目录; + * - 'fail permission denied, open ${dirPath}': 指定的 filePath 路径没有写权限; + * - 'fail sdcard not mounted': Android sdcard 挂载失败; */ + errMsg: string + } + interface AppendFileOption { + /** 要追加的文本或二进制数据 */ + data: string | ArrayBuffer + /** 要追加内容的文件路径 (本地路径) */ + filePath: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: AppendFileCompleteCallback + /** 指定写入文件的字符编码 + * + * 可选值: + * - 'ascii': ; + * - 'base64': ; + * - 'binary': ; + * - 'hex': ; + * - 'ucs2': 以小端序读取; + * - 'ucs-2': 以小端序读取; + * - 'utf16le': 以小端序读取; + * - 'utf-16le': 以小端序读取; + * - 'utf-8': ; + * - 'utf8': ; + * - 'latin1': ; */ + encoding?: + | 'ascii' + | 'base64' + | 'binary' + | 'hex' + | 'ucs2' + | 'ucs-2' + | 'utf16le' + | 'utf-16le' + | 'utf-8' + | 'utf8' + | 'latin1' + /** 接口调用失败的回调函数 */ + fail?: AppendFileFailCallback + /** 接口调用成功的回调函数 */ + success?: AppendFileSuccessCallback + } + interface Asset { + src: string + /** 可选值: + * - 'font': 字体; + * - 'image': 图片; */ + type: 'font' | 'image' + } + /** 需要基础库: `2.19.0` + * + * AudioBuffer接口表示存在内存里的一段短小的音频资源,利用[WebAudioContext.decodeAudioData](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/WebAudioContext.decodeAudioData.html)方法从一个音频文件构建,或者利用 [AudioContext.createBuffer](#)从原始数据构建。把音频放入AudioBuffer后,可以传入到一个 AudioBufferSourceNode进行播放。 */ + interface AudioBuffer { + /** 返回存储在缓存区的PCM数据的时长(单位为秒) */ + duration: number + /** 返回存储在缓存区的PCM数据的采样帧率 */ + length: number + /** 储存在缓存区的PCM数据的通道数 */ + numberOfChannels: number + /** 存储在缓存区的PCM数据的采样率(单位为sample/s) */ + sampleRate: number + } + interface AuthPrivateMessageOption { + /** shareTicket。可以从 wx.onShow 中获取。详情 [shareTicket](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/share.html) */ + shareTicket: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: AuthPrivateMessageCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: AuthPrivateMessageFailCallback + /** 接口调用成功的回调函数 */ + success?: AuthPrivateMessageSuccessCallback + } + interface AuthPrivateMessageSuccessCallbackResult { + /** 经过加密的activityId,解密后可得到原始的activityId。若解密后得到的activityId可以与开发者后台的活动id对应上则验证通过,否则表明valid字段不可靠(被篡改) 详细见[加密数据解密算法](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html) */ + encryptedData: string + /** 错误信息 */ + errMsg: string + /** 加密算法的初始向量,详细见[加密数据解密算法](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html) */ + iv: string + /** 验证是否通过 */ + valid: boolean + } + /** 用户授权设置信息,详情参考[权限](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/authorize.html) */ + interface AuthSetting { + /** 是否授权系统日历,对应接口 [wx.addPhoneRepeatCalendar](https://developers.weixin.qq.com/miniprogram/dev/api/device/calendar/wx.addPhoneRepeatCalendar.html)、[wx.addPhoneCalendar](https://developers.weixin.qq.com/miniprogram/dev/api/device/calendar/wx.addPhoneCalendar.html) */ + 'scope.addPhoneCalendar'?: boolean + /** 是否添加通讯录联系人,对应接口 [wx.addPhoneContact](https://developers.weixin.qq.com/miniprogram/dev/api/device/contact/wx.addPhoneContact.html) */ + 'scope.addPhoneContact'?: boolean + /** 是否授权通讯地址,已取消此项授权,会默认返回true */ + 'scope.address'?: boolean + /** 是否授权蓝牙,对应接口 [wx.openBluetoothAdapter](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth/wx.openBluetoothAdapter.html)、[wx.createBLEPeripheralServer](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-peripheral/wx.createBLEPeripheralServer.html) */ + 'scope.bluetooth'?: boolean + /** 是否授权摄像头,对应[[camera](https://developers.weixin.qq.com/miniprogram/dev/component/camera.html)](https://developers.weixin.qq.com/miniprogram/dev/component/camera.html) 组件 */ + 'scope.camera'?: boolean + /** 是否授权获取发票,已取消此项授权,会默认返回true */ + 'scope.invoice'?: boolean + /** 是否授权发票抬头,已取消此项授权,会默认返回true */ + 'scope.invoiceTitle'?: boolean + /** 是否授权录音功能,对应接口 [wx.startRecord](https://developers.weixin.qq.com/miniprogram/dev/api/media/recorder/wx.startRecord.html) */ + 'scope.record'?: boolean + /** 是否授权用户信息,对应接口 [wx.getUserInfo](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/user-info/wx.getUserInfo.html) */ + 'scope.userInfo'?: boolean + /** 是否授权地理位置,对应接口 [wx.getLocation](https://developers.weixin.qq.com/miniprogram/dev/api/location/wx.getLocation.html), [wx.chooseLocation](https://developers.weixin.qq.com/miniprogram/dev/api/location/wx.chooseLocation.html) */ + 'scope.userLocation'?: boolean + /** 是否授权微信运动步数,对应接口 [wx.getWeRunData](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/werun/wx.getWeRunData.html) */ + 'scope.werun'?: boolean + /** 是否授权保存到相册 [wx.saveImageToPhotosAlbum](https://developers.weixin.qq.com/miniprogram/dev/api/media/image/wx.saveImageToPhotosAlbum.html), [wx.saveVideoToPhotosAlbum](https://developers.weixin.qq.com/miniprogram/dev/api/media/video/wx.saveVideoToPhotosAlbum.html) */ + 'scope.writePhotosAlbum'?: boolean + } + interface AuthorizeForMiniProgramOption { + /** 需要获取权限的 scope,详见 [scope 列表](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/authorize.html#scope-列表) + * + * 可选值: + * - 'scope.record': ; + * - 'scope.writePhotosAlbum': ; + * - 'scope.camera': ; */ + scope: 'scope.record' | 'scope.writePhotosAlbum' | 'scope.camera' + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: AuthorizeForMiniProgramCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: AuthorizeForMiniProgramFailCallback + /** 接口调用成功的回调函数 */ + success?: AuthorizeForMiniProgramSuccessCallback + } + interface AuthorizeOption { + /** 需要获取权限的 scope,详见 [scope 列表](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/authorize.html#scope-列表) */ + scope: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: AuthorizeCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: AuthorizeFailCallback + /** 接口调用成功的回调函数 */ + success?: AuthorizeSuccessCallback + } + /** 设备特征列表 */ + interface BLECharacteristic { + /** 该特征支持的操作类型 */ + properties: BLECharacteristicProperties + /** 蓝牙设备特征的 UUID */ + uuid: string + } + /** 该特征支持的操作类型 */ + interface BLECharacteristicProperties { + /** 该特征是否支持 indicate 操作 */ + indicate: boolean + /** 该特征是否支持 notify 操作 */ + notify: boolean + /** 该特征是否支持 read 操作 */ + read: boolean + /** 该特征是否支持 write 操作 */ + write: boolean + /** 该特征是否支持有回复写操作 */ + writeDefault: boolean + /** 该特征是否支持无回复写操作 */ + writeNoResponse: boolean + } + interface BLEPeripheralServerCloseOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: FileSystemManagerCloseCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: SocketTaskCloseFailCallback + /** 接口调用成功的回调函数 */ + success?: FileSystemManagerCloseSuccessCallback + } + /** 描述service的Object */ + interface BLEPeripheralService { + /** characteristics列表 */ + characteristics: Characteristic[] + /** 蓝牙服务的 UUID */ + uuid: string + } + /** 设备服务列表 */ + interface BLEService { + /** 该服务是否为主服务 */ + isPrimary: boolean + /** 蓝牙设备服务的 UUID */ + uuid: string + } + /** BackgroundAudioManager 实例,可通过 [wx.getBackgroundAudioManager](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/wx.getBackgroundAudioManager.html) 获取。 +* +* **示例代码** +* +* ```js +const backgroundAudioManager = wx.getBackgroundAudioManager() + +backgroundAudioManager.title = '此时此刻' +backgroundAudioManager.epname = '此时此刻' +backgroundAudioManager.singer = '许巍' +backgroundAudioManager.coverImgUrl = 'http://y.gtimg.cn/music/photo_new/T002R300x300M000003rsKF44GyaSk.jpg?max_age=2592000' +// 设置了 src 之后会自动播放 +backgroundAudioManager.src = 'http://ws.stream.qqmusic.qq.com/M500001VfvsJ21xFqb.mp3?guid=ffffffff82def4af4b12b3cd9337d5e7&uin=346897220&vkey=6292F51E1E384E061FF02C31F716658E5C81F5594D561F2E88B854E81CAAB7806D5E4F103E55D33C16F3FAC506D1AB172DE8600B37E43FAD&fromtag=46' +``` */ + interface BackgroundAudioManager { + /** 音频已缓冲的时间,仅保证当前播放时间点到此时间点内容已缓冲。(只读) */ + buffered: number + /** 封面图 URL,用于做原生音频播放器背景图。原生音频播放器中的分享功能,分享出去的卡片配图及背景也将使用该图。 */ + coverImgUrl: string + /** 当前音频的播放位置(单位:s),只有在有合法 src 时返回。(只读) */ + currentTime: number + /** 当前音频的长度(单位:s),只有在有合法 src 时返回。(只读) */ + duration: number + /** 专辑名,原生音频播放器中的分享功能,分享出去的卡片简介,也将使用该值。 */ + epname: string + /** 当前是否暂停或停止。(只读) */ + paused: boolean + /** 需要基础库: `2.11.0` + * + * 播放速度。范围 0.5-2.0,默认为 1。(Android 需要 6 及以上版本) */ + playbackRate: number + /** 需要基础库: `1.9.94` + * + * 音频协议。默认值为 'http',设置 'hls' 可以支持播放 HLS 协议的直播音频。 */ + protocol: string + /** 需要基础库: `2.13.0` + * + * `origin`: 发送完整的referrer; `no-referrer`: 不发送。格式固定为 `https://servicewechat.com/{appid}/{version}/page-frame.html`,其中 {appid} 为小程序的 appid,{version} 为小程序的版本号,版本号为 0 表示为开发版、体验版以及审核版本,版本号为 devtools 表示为开发者工具,其余为正式版本; */ + referrerPolicy: string + /** 歌手名,原生音频播放器中的分享功能,分享出去的卡片简介,也将使用该值。 */ + singer: string + /** 音频的数据源([2.2.3](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 开始支持云文件ID)。默认为空字符串,**当设置了新的 src 时,会自动开始播放**,目前支持的格式有 m4a, aac, mp3, wav。 */ + src: string + /** 音频开始播放的位置(单位:s)。 */ + startTime: number + /** 音频标题,用于原生音频播放器音频标题(必填)。原生音频播放器中的分享功能,分享出去的卡片标题,也将使用该值。 */ + title: string + /** 页面链接,原生音频播放器中的分享功能,分享出去的卡片简介,也将使用该值。 */ + webUrl: string + } + interface BatchGetStorageOption { + /** 本地缓存中指定的 keyList */ + keyList: string[] + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: BatchGetStorageCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: BatchGetStorageFailCallback + /** 接口调用成功的回调函数 */ + success?: BatchGetStorageSuccessCallback + } + interface BatchSetStorageOption { + /** { key, value } */ + kvList: IAnyObject + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: BatchSetStorageCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: BatchSetStorageFailCallback + /** 接口调用成功的回调函数 */ + success?: BatchSetStorageSuccessCallback + } + /** Beacon 设备 */ + interface BeaconInfo { + /** Beacon 设备的距离,单位 m。iOS 上,proximity 为 0 时,accuracy 为 -1。 */ + accuracy: number + /** Beacon 设备的主 ID */ + major: number + /** Beacon 设备的次 ID */ + minor: number + /** 表示设备距离的枚举值(仅iOS) + * + * 可选值: + * - 0: 信号太弱不足以计算距离,或非 iOS 设备; + * - 1: 十分近; + * - 2: 比较近; + * - 3: 远; */ + proximity: 0 | 1 | 2 | 3 + /** 表示设备的信号强度,单位 dBm */ + rssi: number + /** Beacon 设备广播的 UUID */ + uuid: string + } + /** 需要基础库: `2.20.1` + * + * 以 beacon 设备形式广播的参数。 */ + interface BeaconInfoObj { + /** Beacon 设备的主 ID */ + major: number + /** Beacon 设备的次 ID */ + minor: number + /** Beacon 设备广播的 UUID */ + uuid: string + /** 用于判断距离设备 1 米时 RSSI 大小的参考值 */ + measuredPower?: number + } + interface BindWifiOption { + /** 当前 wifi 网络的 BSSID ,可通过 wx.getConnectedWifi 获取 */ + BSSID: string + } + interface BlueToothDevice { + /** 当前蓝牙设备的信号强度,单位 dBm */ + RSSI: number + /** 当前蓝牙设备的广播数据段中的 ManufacturerData 数据段。 */ + advertisData: ArrayBuffer + /** 当前蓝牙设备的广播数据段中的 ServiceUUIDs 数据段 */ + advertisServiceUUIDs: string[] + /** 当前蓝牙设备是否可连接( Android 8.0 以下不支持返回该值 ) */ + connectable: boolean + /** 蓝牙设备 id */ + deviceId: string + /** 当前蓝牙设备的广播数据段中的 LocalName 数据段 */ + localName: string + /** 蓝牙设备名称,某些设备可能没有 */ + name: string + /** 当前蓝牙设备的广播数据段中的 ServiceData 数据段 */ + serviceData: IAnyObject + } + /** 搜索到的设备列表 */ + interface BluetoothDeviceInfo { + /** 用于区分设备的 id */ + deviceId: string + /** 蓝牙设备名称,某些设备可能没有 */ + name: string + } + interface BlurOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: BlurCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: BlurFailCallback + /** 接口调用成功的回调函数 */ + success?: BlurSuccessCallback + } + interface BoundingClientRectCallbackResult { + /** 节点的下边界坐标 */ + bottom: number + /** 节点的 dataset */ + dataset: IAnyObject + /** 节点的高度 */ + height: number + /** 节点的 ID */ + id: string + /** 节点的左边界坐标 */ + left: number + /** 节点的右边界坐标 */ + right: number + /** 节点的上边界坐标 */ + top: number + /** 节点的宽度 */ + width: number + } + /** 目标边界 */ + interface BoundingClientRectResult { + /** 下边界 */ + bottom: number + /** 高度 */ + height: number + /** 左边界 */ + left: number + /** 右边界 */ + right: number + /** 上边界 */ + top: number + /** 宽度 */ + width: number + } + /** 需要基础库: `2.24.0` + * + * 缓存管理器。全局只有唯一实例,一旦被创建出来即表示接入缓存管理器。其有以下几个能力: + * + * 1. 在网络通畅时,符合一定规则的用户网络请求(目前只包括普通 wx.request 请求)会被缓存。 + * 2. 在网络通畅时,某些 wx api 调用会被缓存。 + * 3. 进入弱网/离线状态时,会提供事件给用户,用户可以决定是否使用缓存返回。 + * 4. 提供进入和退出弱网/离线状态的事件。 + * + * > 1. 缓存管理器中涉及的网络请求如无特指,均指普通的 wx.request 异步请求,参数和返回值中均不考虑涉及 ArrayBuffer 或 TypedArray 的情形。 + * > 2. 缓存管理器中的缓存不会占用 storage 空间,但是有大小限制,请勿在非必要的请求上使用缓存。 */ + interface CacheManager { + /** 全局缓存有效时间 */ + maxAge: string + /** 当前缓存模式 + * + * 可选值: + * - 'weakNetwork': 默认值,弱网/离线使用缓存返回; + * - 'always': 总是使用缓存返回; + * - 'none': 不开启,后续可手动开启/停止使用缓存返回; */ + mode: 'weakNetwork' | 'always' | 'none' + /** 全局 origin */ + origin: string + /** 当前缓存管理器状态 + * + * 可选值: + * - 0: 不使用缓存返回; + * - 1: 使用缓存返回; + * - 2: 未知; */ + state: 0 | 1 | 2 + } + interface CameraContextStartRecordOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: StartRecordCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: StartRecordFailCallback + /** 需要基础库: `2.22.0` + * + * 是否开启镜像 */ + selfieMirror?: boolean + /** 接口调用成功的回调函数 */ + success?: CameraContextStartRecordSuccessCallback + /** 需要基础库: `2.22.0` + * + * 录制时长上限,单位为秒,最长不能超过 5 分钟 */ + timeout?: number + /** 超过录制时长上限时会结束录像并触发此回调,录像异常退出时也会触发此回调 */ + timeoutCallback?: StartRecordTimeoutCallback + } + interface CameraContextStopRecordOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: StopRecordCompleteCallback + /** 启动视频压缩,压缩效果同`chooseVideo` */ + compressed?: boolean + /** 接口调用失败的回调函数 */ + fail?: StopRecordFailCallback + /** 接口调用成功的回调函数 */ + success?: CameraContextStopRecordSuccessCallback + } + interface CameraFrameListenerStartOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: StartCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: StartFailCallback + /** 接口调用成功的回调函数 */ + success?: StartSuccessCallback + /** [Worker](https://developers.weixin.qq.com/miniprogram/dev/api/worker/Worker.html) + * + * 需要基础库: `2.25.1` + * + * 可选参数。如果需要在 iOS ExperimentalWorker 内监听摄像头帧数据,则需要传入对应 Worker 对象。详情 [Worker.getCameraFrameData](https://developers.weixin.qq.com/miniprogram/dev/api/worker/Worker.getCameraFrameData.html) */ + worker?: Worker + } + /** 需要基础库: `2.7.0` + * + * Canvas 实例,可通过 [SelectorQuery](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/SelectorQuery.html) 获取。 + * + * **示例代码** + * + * 2D Canvas 示例 + * [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/SHfgCmmq7UcM) + * + * WebGL 示例 + * [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/qEGUOqmf7T8z) */ + interface Canvas { + /** 画布高度 */ + height: number + /** 画布宽度 */ + width: number + } + /** @deprecated 基础库版本 [2.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) 替换 + * + * canvas 组件的绘图上下文。CanvasContext 是旧版的接口, 新版 Canvas 2D 接口与 Web 一致。 */ + interface CanvasContext { + /** 需要基础库: `1.9.90` + * + * 填充颜色。用法同 [CanvasContext.setFillStyle()](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.setFillStyle.html)。 */ + fillStyle: string | CanvasGradient + /** 需要基础库: `1.9.90` + * + * 当前字体样式的属性。符合 [CSS font 语法](https://developer.mozilla.org/zh-CN/docs/Web/CSS/font) 的 DOMString 字符串,至少需要提供字体大小和字体族名。默认值为 10px sans-serif。 */ + font: string + /** 全局画笔透明度。范围 0-1,0 表示完全透明,1 表示完全不透明。 */ + globalAlpha: number + /** 需要基础库: `1.9.90` + * + * 在绘制新形状时应用的合成操作的类型。目前安卓版本只适用于 `fill` 填充块的合成,用于 `stroke` 线段的合成效果都是 `source-over`。 + * + * 目前支持的操作有 + * - 安卓:xor, source-over, source-atop, destination-out, lighter, overlay, darken, lighten, hard-light + * - iOS:xor, source-over, source-atop, destination-over, destination-out, lighter, multiply, overlay, darken, lighten, color-dodge, color-burn, hard-light, soft-light, difference, exclusion, saturation, luminosity */ + globalCompositeOperation: string + /** 需要基础库: `1.9.90` + * + * 线条的端点样式。用法同 [CanvasContext.setLineCap()](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.setLineCap.html)。 */ + lineCap: string + /** 需要基础库: `1.9.90` + * + * 虚线偏移量,初始值为0 */ + lineDashOffset: number + /** 需要基础库: `1.9.90` + * + * 线条的交点样式。用法同 [CanvasContext.setLineJoin()](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.setLineJoin.html)。 + * + * 可选值: + * - 'bevel': 斜角; + * - 'round': 圆角; + * - 'miter': 尖角; */ + lineJoin: 'bevel' | 'round' | 'miter' + /** 需要基础库: `1.9.90` + * + * 线条的宽度。用法同 [CanvasContext.setLineWidth()](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.setLineWidth.html)。 */ + lineWidth: number + /** 需要基础库: `1.9.90` + * + * 最大斜接长度。用法同 [CanvasContext.setMiterLimit()](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.setMiterLimit.html)。 */ + miterLimit: number + /** 需要基础库: `1.9.90` + * + * 阴影的模糊级别 */ + shadowBlur: number + /** 需要基础库: `1.9.90` + * + * 阴影的颜色 */ + shadowColor: number + /** 需要基础库: `1.9.90` + * + * 阴影相对于形状在水平方向的偏移 */ + shadowOffsetX: number + /** 需要基础库: `1.9.90` + * + * 阴影相对于形状在竖直方向的偏移 */ + shadowOffsetY: number + /** 需要基础库: `1.9.90` + * + * 边框颜色。用法同 [CanvasContext.setStrokeStyle()](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.setStrokeStyle.html)。 */ + strokeStyle: string | CanvasGradient + } + interface CanvasGetImageDataOption { + /** 画布标识,传入 [canvas](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 组件的 `canvas-id` 属性。 */ + canvasId: string + /** 将要被提取的图像数据矩形区域的高度 */ + height: number + /** 将要被提取的图像数据矩形区域的宽度 */ + width: number + /** 将要被提取的图像数据矩形区域的左上角横坐标 */ + x: number + /** 将要被提取的图像数据矩形区域的左上角纵坐标 */ + y: number + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: CanvasGetImageDataCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: CanvasGetImageDataFailCallback + /** 接口调用成功的回调函数 */ + success?: CanvasGetImageDataSuccessCallback + } + interface CanvasGetImageDataSuccessCallbackResult { + /** 图像像素点数据,一维数组,每四项表示一个像素点的 rgba */ + data: Uint8ClampedArray + /** 图像数据矩形的高度 */ + height: number + /** 图像数据矩形的宽度 */ + width: number + errMsg: string + } + interface CanvasPutImageDataOption { + /** 画布标识,传入 [canvas](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 组件的 canvas-id 属性。 */ + canvasId: string + /** 图像像素点数据,一维数组,每四项表示一个像素点的 rgba */ + data: Uint8ClampedArray + /** 源图像数据矩形区域的高度 */ + height: number + /** 源图像数据矩形区域的宽度 */ + width: number + /** 源图像数据在目标画布中的位置偏移量(x 轴方向的偏移量) */ + x: number + /** 源图像数据在目标画布中的位置偏移量(y 轴方向的偏移量) */ + y: number + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: CanvasPutImageDataCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: CanvasPutImageDataFailCallback + /** 接口调用成功的回调函数 */ + success?: CanvasPutImageDataSuccessCallback + } + interface CanvasToTempFilePathOption { + /** 画布标识,传入 [canvas](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 组件实例 (canvas type="2d" 时使用该属性)。 */ + canvas?: IAnyObject + /** 画布标识,传入 [canvas](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 组件的 canvas-id */ + canvasId?: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: CanvasToTempFilePathCompleteCallback + /** 需要基础库: `1.2.0` + * + * 输出的图片的高度 */ + destHeight?: number + /** 需要基础库: `1.2.0` + * + * 输出的图片的宽度 */ + destWidth?: number + /** 接口调用失败的回调函数 */ + fail?: CanvasToTempFilePathFailCallback + /** 需要基础库: `1.7.0` + * + * 目标文件的类型 + * + * 可选值: + * - 'jpg': jpg 图片; + * - 'png': png 图片; */ + fileType?: 'jpg' | 'png' + /** 需要基础库: `1.2.0` + * + * 指定的画布区域的高度 */ + height?: number + /** 需要基础库: `1.7.0` + * + * 图片的质量,目前仅对 jpg 有效。取值范围为 (0, 1],不在范围内时当作 1.0 处理。 */ + quality?: number + /** 接口调用成功的回调函数 */ + success?: CanvasToTempFilePathSuccessCallback + /** 需要基础库: `1.2.0` + * + * 指定的画布区域的宽度 */ + width?: number + /** 需要基础库: `1.2.0` + * + * 指定的画布区域的左上角横坐标 */ + x?: number + /** 需要基础库: `1.2.0` + * + * 指定的画布区域的左上角纵坐标 */ + y?: number + } + interface CanvasToTempFilePathSuccessCallbackResult { + /** 生成文件的临时路径 (本地路径) */ + tempFilePath: string + errMsg: string + } + /** characteristics列表 */ + interface Characteristic { + /** characteristic 的 UUID */ + uuid: string + /** 描述符数据 */ + descriptors?: CharacteristicDescriptor[] + /** 特征权限 */ + permission?: CharacteristicPermission + /** 特征支持的操作 */ + properties?: CharacteristicProperties + /** 特征对应的二进制值 */ + value?: ArrayBuffer + } + /** 描述符数据 */ + interface CharacteristicDescriptor { + /** Descriptor 的 UUID */ + uuid: string + /** 描述符的权限 */ + permission?: DescriptorPermission + /** 描述符数据 */ + value?: ArrayBuffer + } + /** 特征权限 */ + interface CharacteristicPermission { + /** 加密读请求 */ + readEncryptionRequired?: boolean + /** 可读 */ + readable?: boolean + /** 加密写请求 */ + writeEncryptionRequired?: boolean + /** 可写 */ + writeable?: boolean + } + /** 特征支持的操作 */ + interface CharacteristicProperties { + /** 回包 */ + indicate?: boolean + /** 订阅 */ + notify?: boolean + /** 读 */ + read?: boolean + /** 写 */ + write?: boolean + /** 无回复写 */ + writeNoResponse?: boolean + } + interface CheckIsOpenAccessibilityOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: CheckIsOpenAccessibilityCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: CheckIsOpenAccessibilityFailCallback + /** 接口调用成功的回调函数 */ + success?: CheckIsOpenAccessibilitySuccessCallback + } + interface CheckIsOpenAccessibilitySuccessCallbackOption { + /** iOS 上开启辅助功能旁白,安卓开启 talkback 时返回 true */ + open: boolean + } + interface CheckIsSoterEnrolledInDeviceOption { + /** 认证方式 + * + * 可选值: + * - 'fingerPrint': 指纹识别; + * - 'facial': 人脸识别; + * - 'speech': 声纹识别(暂未支持); */ + checkAuthMode: 'fingerPrint' | 'facial' | 'speech' + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: CheckIsSoterEnrolledInDeviceCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: CheckIsSoterEnrolledInDeviceFailCallback + /** 接口调用成功的回调函数 */ + success?: CheckIsSoterEnrolledInDeviceSuccessCallback + } + interface CheckIsSoterEnrolledInDeviceSuccessCallbackResult { + /** 错误信息 */ + errMsg: string + /** 是否已录入信息 */ + isEnrolled: boolean + } + interface CheckIsSupportSoterAuthenticationOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: CheckIsSupportSoterAuthenticationCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: CheckIsSupportSoterAuthenticationFailCallback + /** 接口调用成功的回调函数 */ + success?: CheckIsSupportSoterAuthenticationSuccessCallback + } + interface CheckIsSupportSoterAuthenticationSuccessCallbackResult { + /** 该设备支持的可被SOTER识别的生物识别方式 + * + * 可选值: + * - 'fingerPrint': 指纹识别; + * - 'facial': 人脸识别; + * - 'speech': 声纹识别(暂未支持); */ + supportMode: Array<'fingerPrint' | 'facial' | 'speech'> + errMsg: string + } + interface CheckSessionOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: CheckSessionCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: CheckSessionFailCallback + /** 接口调用成功的回调函数 */ + success?: CheckSessionSuccessCallback + } + interface ChooseAddressOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: ChooseAddressCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: ChooseAddressFailCallback + /** 接口调用成功的回调函数 */ + success?: ChooseAddressSuccessCallback + } + interface ChooseAddressSuccessCallbackResult { + /** 国标收货地址第二级地址 */ + cityName: string + /** 国标收货地址第三级地址 */ + countyName: string + /** 详细收货地址信息(包括街道地址) */ + detailInfo: string + /** 新选择器详细收货地址信息 */ + detailInfoNew: string + /** 错误信息 */ + errMsg: string + /** 收货地址国家码 */ + nationalCode: string + /** 邮编 */ + postalCode: string + /** 国标收货地址第一级地址 */ + provinceName: string + /** 国标收货地址第四级地址 */ + streetName: string + /** 收货人手机号码 */ + telNumber: string + /** 收货人姓名 */ + userName: string + } + interface ChooseContactOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: ChooseContactCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: ChooseContactFailCallback + /** 接口调用成功的回调函数 */ + success?: ChooseContactSuccessCallback + } + interface ChooseContactSuccessCallbackOption { + /** 联系人姓名 */ + displayName: string + /** 手机号 */ + phoneNumber: string + /** 选定联系人的所有手机号(部分 Android 系统只能选联系人而不能选特定手机号) */ + phoneNumberList: string + } + /** 返回选择的文件的本地临时文件对象数组 */ + interface ChooseFile { + /** 选择的文件名称 */ + name: string + /** 本地临时文件路径 (本地路径) */ + path: string + /** 本地临时文件大小,单位 B */ + size: number + /** 选择的文件的会话发送时间,Unix时间戳,工具暂不支持此属性 */ + time: number + /** 选择的文件类型 + * + * 可选值: + * - 'video': 选择了视频文件; + * - 'image': 选择了图片文件; + * - 'file': 选择了除图片和视频的文件; */ + type: 'video' | 'image' | 'file' + } + interface ChooseImageOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: ChooseImageCompleteCallback + /** 最多可以选择的图片张数 */ + count?: number + /** 接口调用失败的回调函数 */ + fail?: ChooseImageFailCallback + /** 所选的图片的尺寸 + * + * 可选值: + * - 'original': 原图; + * - 'compressed': 压缩图; */ + sizeType?: Array<'original' | 'compressed'> + /** 选择图片的来源 + * + * 可选值: + * - 'album': 从相册选图; + * - 'camera': 使用相机; */ + sourceType?: Array<'album' | 'camera'> + /** 接口调用成功的回调函数 */ + success?: ChooseImageSuccessCallback + } + interface ChooseImageSuccessCallbackResult { + /** 图片的本地临时文件路径列表 (本地路径) */ + tempFilePaths: string[] + /** 需要基础库: `1.2.0` + * + * 图片的本地临时文件列表 */ + tempFiles: ImageFile[] + errMsg: string + } + interface ChooseInvoiceOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: ChooseInvoiceCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: ChooseInvoiceFailCallback + /** 接口调用成功的回调函数 */ + success?: ChooseInvoiceSuccessCallback + } + interface ChooseInvoiceSuccessCallbackResult { + /** 用户选中的发票信息,格式为一个 JSON 字符串,包含三个字段: card_id:所选发票卡券的 cardId,encrypt_code:所选发票卡券的加密 code,报销方可以通过 cardId 和 encryptCode 获得报销发票的信息,app_id: 发票方的 appId。 */ + invoiceInfo: string + errMsg: string + } + interface ChooseInvoiceTitleOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: ChooseInvoiceTitleCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: ChooseInvoiceTitleFailCallback + /** 接口调用成功的回调函数 */ + success?: ChooseInvoiceTitleSuccessCallback + } + interface ChooseInvoiceTitleSuccessCallbackResult { + /** 银行账号 */ + bankAccount: string + /** 银行名称 */ + bankName: string + /** 单位地址 */ + companyAddress: string + /** 错误信息 */ + errMsg: string + /** 抬头税号 */ + taxNumber: string + /** 手机号码 */ + telephone: string + /** 抬头名称 */ + title: string + /** 抬头类型 + * + * 可选值: + * - 0: 单位; + * - 1: 个人; */ + type: 0 | 1 + } + interface ChooseLicensePlateOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: ChooseLicensePlateCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: ChooseLicensePlateFailCallback + /** 接口调用成功的回调函数 */ + success?: ChooseLicensePlateSuccessCallback + } + interface ChooseLicensePlateSuccessCallbackResult { + /** 用户选择的车牌号 */ + plateNumber: string + errMsg: string + } + interface ChooseLocationOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: ChooseLocationCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: ChooseLocationFailCallback + /** 需要基础库: `2.9.0` + * + * 目标地纬度 */ + latitude?: number + /** 需要基础库: `2.9.0` + * + * 目标地经度 */ + longitude?: number + /** 接口调用成功的回调函数 */ + success?: ChooseLocationSuccessCallback + } + interface ChooseLocationSuccessCallbackResult { + /** 详细地址 */ + address: string + /** 纬度,浮点数,范围为-90~90,负数表示南纬。使用 gcj02 国测局坐标系 */ + latitude: number + /** 经度,浮点数,范围为-180~180,负数表示西经。使用 gcj02 国测局坐标系 */ + longitude: number + /** 位置名称 */ + name: string + errMsg: string + } + interface ChooseMediaOption { + /** 仅在 sourceType 为 camera 时生效,使用前置或后置摄像头 + * + * 可选值: + * - 'back': 使用后置摄像头; + * - 'front': 使用前置摄像头; */ + camera?: 'back' | 'front' + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: ChooseMediaCompleteCallback + /** 最多可以选择的文件个数 */ + count?: number + /** 接口调用失败的回调函数 */ + fail?: ChooseMediaFailCallback + /** 拍摄视频最长拍摄时间,单位秒。时间范围为 3s 至 60s 之间。不限制相册。 */ + maxDuration?: number + /** 文件类型 + * + * 可选值: + * - 'image': 只能拍摄图片或从相册选择图片; + * - 'video': 只能拍摄视频或从相册选择视频; + * - 'mix': 可同时选择图片和视频; */ + mediaType?: Array<'image' | 'video' | 'mix'> + /** 仅对 mediaType 为 image 时有效,是否压缩所选文件 */ + sizeType?: string[] + /** 图片和视频选择的来源 + * + * 可选值: + * - 'album': 从相册选择; + * - 'camera': 使用相机拍摄; */ + sourceType?: Array<'album' | 'camera'> + /** 接口调用成功的回调函数 */ + success?: ChooseMediaSuccessCallback + } + interface ChooseMediaSuccessCallbackResult { + /** 本地临时文件列表 */ + tempFiles: MediaFile[] + /** 文件类型,有效值有 image 、video、mix */ + type: string + errMsg: string + } + interface ChooseMessageFileOption { + /** 最多可以选择的文件个数,可以 0~100 */ + count: number + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: ChooseMessageFileCompleteCallback + /** 需要基础库: `2.6.0` + * + * 根据文件拓展名过滤,仅 type==file 时有效。每一项都不能是空字符串。默认不过滤。 */ + extension?: string[] + /** 接口调用失败的回调函数 */ + fail?: ChooseMessageFileFailCallback + /** 接口调用成功的回调函数 */ + success?: ChooseMessageFileSuccessCallback + /** 所选的文件的类型 + * + * 可选值: + * - 'all': 从所有文件选择; + * - 'video': 只能选择视频文件; + * - 'image': 只能选择图片文件; + * - 'file': 可以选择除了图片和视频之外的其它的文件; */ + type?: 'all' | 'video' | 'image' | 'file' + } + interface ChooseMessageFileSuccessCallbackResult { + /** 返回选择的文件的本地临时文件对象数组 */ + tempFiles: ChooseFile[] + errMsg: string + } + interface ChoosePoiOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: ChoosePoiCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: ChoosePoiFailCallback + /** 接口调用成功的回调函数 */ + success?: ChoosePoiSuccessCallback + } + interface ChoosePoiSuccessCallbackResult { + /** 详细地址 */ + address: string + /** 城市名称 */ + city: number + /** 纬度,浮点数,范围为-90~90,负数表示南纬。使用 gcj02 国测局坐标系(即将废弃) */ + latitude: number + /** 经度,浮点数,范围为-180~180,负数表示西经。使用 gcj02 国测局坐标系(即将废弃) */ + longitude: number + /** 位置名称 */ + name: string + /** 选择城市时,值为 1,选择精确位置时,值为 2 */ + type: number + errMsg: string + } + interface ChooseVideoOption { + /** 默认拉起的是前置或者后置摄像头。部分 Android 手机下由于系统 ROM 不支持无法生效 + * + * 可选值: + * - 'back': 默认拉起后置摄像头; + * - 'front': 默认拉起前置摄像头; */ + camera?: 'back' | 'front' + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: ChooseVideoCompleteCallback + /** 需要基础库: `1.6.0` + * + * 是否压缩所选择的视频文件 */ + compressed?: boolean + /** 接口调用失败的回调函数 */ + fail?: ChooseVideoFailCallback + /** 拍摄视频最长拍摄时间,单位秒 */ + maxDuration?: number + /** 视频选择的来源 + * + * 可选值: + * - 'album': 从相册选择视频; + * - 'camera': 使用相机拍摄视频; */ + sourceType?: Array<'album' | 'camera'> + /** 接口调用成功的回调函数 */ + success?: ChooseVideoSuccessCallback + } + interface ChooseVideoSuccessCallbackResult { + /** 选定视频的时间长度 */ + duration: number + /** 返回选定视频的高度 */ + height: number + /** 选定视频的数据量大小 */ + size: number + /** 选定视频的临时文件路径 (本地路径) */ + tempFilePath: string + /** 返回选定视频的宽度 */ + width: number + errMsg: string + } + interface ClearOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: ClearCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: ClearFailCallback + /** 接口调用成功的回调函数 */ + success?: ClearSuccessCallback + } + interface ClearStorageOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: ClearStorageCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: ClearStorageFailCallback + /** 接口调用成功的回调函数 */ + success?: ClearStorageSuccessCallback + } + /** 菜单按钮的布局位置信息 */ + interface ClientRect { + /** 下边界坐标,单位:px */ + bottom: number + /** 高度,单位:px */ + height: number + /** 左边界坐标,单位:px */ + left: number + /** 右边界坐标,单位:px */ + right: number + /** 上边界坐标,单位:px */ + top: number + /** 宽度,单位:px */ + width: number + } + interface CloseBLEConnectionOption { + /** 蓝牙设备 id */ + deviceId: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: CloseBLEConnectionCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: CloseBLEConnectionFailCallback + /** 接口调用成功的回调函数 */ + success?: CloseBLEConnectionSuccessCallback + } + interface CloseBluetoothAdapterOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: CloseBluetoothAdapterCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: CloseBluetoothAdapterFailCallback + /** 接口调用成功的回调函数 */ + success?: CloseBluetoothAdapterSuccessCallback + } + interface CloseFailCallbackResult { + /** 错误信息 + * + * 可选值: + * - 'bad file descriptor': 无效的文件描述符; */ + errMsg: string + } + interface CloseSocketOption { + /** 一个数字值表示关闭连接的状态号,表示连接被关闭的原因。 */ + code?: number + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: CloseSocketCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: CloseSocketFailCallback + /** 一个可读的字符串,表示连接被关闭的原因。这个字符串必须是不长于 123 字节的 UTF-8 文本(不是字符)。 */ + reason?: string + /** 接口调用成功的回调函数 */ + success?: CloseSocketSuccessCallback + } + interface CloseSyncOption { + /** 需要被关闭的文件描述符。fd 通过 [FileSystemManager.open](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.open.html) 或 [FileSystemManager.openSync](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.openSync.html) 接口获得 */ + fd: string + } + /** 颜色。可以用以下几种方式来表示 canvas 中使用的颜色: + * + * - RGB 颜色: 如 `'rgb(255, 0, 0)'` + * - RGBA 颜色:如 `'rgba(255, 0, 0, 0.3)'` + * - 16 进制颜色: 如 `'#FF0000'` + * - 预定义的颜色: 如 `'red'` + * + * 其中预定义颜色有以下148个: + * *注意**: Color Name 大小写不敏感 + * + * | Color Name | HEX | + * | -------------------- | ------- | + * | AliceBlue | #F0F8FF | + * | AntiqueWhite | #FAEBD7 | + * | Aqua | #00FFFF | + * | Aquamarine | #7FFFD4 | + * | Azure | #F0FFFF | + * | Beige | #F5F5DC | + * | Bisque | #FFE4C4 | + * | Black | #000000 | + * | BlanchedAlmond | #FFEBCD | + * | Blue | #0000FF | + * | BlueViolet | #8A2BE2 | + * | Brown | #A52A2A | + * | BurlyWood | #DEB887 | + * | CadetBlue | #5F9EA0 | + * | Chartreuse | #7FFF00 | + * | Chocolate | #D2691E | + * | Coral | #FF7F50 | + * | CornflowerBlue | #6495ED | + * | Cornsilk | #FFF8DC | + * | Crimson | #DC143C | + * | Cyan | #00FFFF | + * | DarkBlue | #00008B | + * | DarkCyan | #008B8B | + * | DarkGoldenRod | #B8860B | + * | DarkGray | #A9A9A9 | + * | DarkGrey | #A9A9A9 | + * | DarkGreen | #006400 | + * | DarkKhaki | #BDB76B | + * | DarkMagenta | #8B008B | + * | DarkOliveGreen | #556B2F | + * | DarkOrange | #FF8C00 | + * | DarkOrchid | #9932CC | + * | DarkRed | #8B0000 | + * | DarkSalmon | #E9967A | + * | DarkSeaGreen | #8FBC8F | + * | DarkSlateBlue | #483D8B | + * | DarkSlateGray | #2F4F4F | + * | DarkSlateGrey | #2F4F4F | + * | DarkTurquoise | #00CED1 | + * | DarkViolet | #9400D3 | + * | DeepPink | #FF1493 | + * | DeepSkyBlue | #00BFFF | + * | DimGray | #696969 | + * | DimGrey | #696969 | + * | DodgerBlue | #1E90FF | + * | FireBrick | #B22222 | + * | FloralWhite | #FFFAF0 | + * | ForestGreen | #228B22 | + * | Fuchsia | #FF00FF | + * | Gainsboro | #DCDCDC | + * | GhostWhite | #F8F8FF | + * | Gold | #FFD700 | + * | GoldenRod | #DAA520 | + * | Gray | #808080 | + * | Grey | #808080 | + * | Green | #008000 | + * | GreenYellow | #ADFF2F | + * | HoneyDew | #F0FFF0 | + * | HotPink | #FF69B4 | + * | IndianRed | #CD5C5C | + * | Indigo | #4B0082 | + * | Ivory | #FFFFF0 | + * | Khaki | #F0E68C | + * | Lavender | #E6E6FA | + * | LavenderBlush | #FFF0F5 | + * | LawnGreen | #7CFC00 | + * | LemonChiffon | #FFFACD | + * | LightBlue | #ADD8E6 | + * | LightCoral | #F08080 | + * | LightCyan | #E0FFFF | + * | LightGoldenRodYellow | #FAFAD2 | + * | LightGray | #D3D3D3 | + * | LightGrey | #D3D3D3 | + * | LightGreen | #90EE90 | + * | LightPink | #FFB6C1 | + * | LightSalmon | #FFA07A | + * | LightSeaGreen | #20B2AA | + * | LightSkyBlue | #87CEFA | + * | LightSlateGray | #778899 | + * | LightSlateGrey | #778899 | + * | LightSteelBlue | #B0C4DE | + * | LightYellow | #FFFFE0 | + * | Lime | #00FF00 | + * | LimeGreen | #32CD32 | + * | Linen | #FAF0E6 | + * | Magenta | #FF00FF | + * | Maroon | #800000 | + * | MediumAquaMarine | #66CDAA | + * | MediumBlue | #0000CD | + * | MediumOrchid | #BA55D3 | + * | MediumPurple | #9370DB | + * | MediumSeaGreen | #3CB371 | + * | MediumSlateBlue | #7B68EE | + * | MediumSpringGreen | #00FA9A | + * | MediumTurquoise | #48D1CC | + * | MediumVioletRed | #C71585 | + * | MidnightBlue | #191970 | + * | MintCream | #F5FFFA | + * | MistyRose | #FFE4E1 | + * | Moccasin | #FFE4B5 | + * | NavajoWhite | #FFDEAD | + * | Navy | #000080 | + * | OldLace | #FDF5E6 | + * | Olive | #808000 | + * | OliveDrab | #6B8E23 | + * | Orange | #FFA500 | + * | OrangeRed | #FF4500 | + * | Orchid | #DA70D6 | + * | PaleGoldenRod | #EEE8AA | + * | PaleGreen | #98FB98 | + * | PaleTurquoise | #AFEEEE | + * | PaleVioletRed | #DB7093 | + * | PapayaWhip | #FFEFD5 | + * | PeachPuff | #FFDAB9 | + * | Peru | #CD853F | + * | Pink | #FFC0CB | + * | Plum | #DDA0DD | + * | PowderBlue | #B0E0E6 | + * | Purple | #800080 | + * | RebeccaPurple | #663399 | + * | Red | #FF0000 | + * | RosyBrown | #BC8F8F | + * | RoyalBlue | #4169E1 | + * | SaddleBrown | #8B4513 | + * | Salmon | #FA8072 | + * | SandyBrown | #F4A460 | + * | SeaGreen | #2E8B57 | + * | SeaShell | #FFF5EE | + * | Sienna | #A0522D | + * | Silver | #C0C0C0 | + * | SkyBlue | #87CEEB | + * | SlateBlue | #6A5ACD | + * | SlateGray | #708090 | + * | SlateGrey | #708090 | + * | Snow | #FFFAFA | + * | SpringGreen | #00FF7F | + * | SteelBlue | #4682B4 | + * | Tan | #D2B48C | + * | Teal | #008080 | + * | Thistle | #D8BFD8 | + * | Tomato | #FF6347 | + * | Turquoise | #40E0D0 | + * | Violet | #EE82EE | + * | Wheat | #F5DEB3 | + * | White | #FFFFFF | + * | WhiteSmoke | #F5F5F5 | + * | Yellow | #FFFF00 | + * | YellowGreen | #9ACD32 | */ + interface Color {} + interface CompressImageOption { + /** 图片路径,图片的路径,支持本地路径、代码包路径 */ + src: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: CompressImageCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: CompressImageFailCallback + /** 压缩质量,范围0~100,数值越小,质量越低,压缩率越高(仅对jpg有效)。 */ + quality?: number + /** 接口调用成功的回调函数 */ + success?: CompressImageSuccessCallback + } + interface CompressImageSuccessCallbackResult { + /** 压缩后图片的临时文件路径 (本地路径) */ + tempFilePath: string + errMsg: string + } + interface CompressVideoOption { + /** 码率,单位 kbps */ + bitrate: number + /** 帧率 */ + fps: number + /** 压缩质量 + * + * 可选值: + * - 'low': 低; + * - 'medium': 中; + * - 'high': 高; */ + quality: 'low' | 'medium' | 'high' + /** 相对于原视频的分辨率比例,取值范围(0, 1] */ + resolution: number + /** 视频文件路径,可以是临时文件路径也可以是永久文件路径 */ + src: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: CompressVideoCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: CompressVideoFailCallback + /** 接口调用成功的回调函数 */ + success?: CompressVideoSuccessCallback + } + interface CompressVideoSuccessCallbackResult { + /** 压缩后的大小,单位 kB */ + size: string + /** 压缩后的临时文件地址 */ + tempFilePath: string + errMsg: string + } + interface ConnectSocketOption { + /** 开发者服务器 wss 接口地址 */ + url: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: ConnectSocketCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: ConnectSocketFailCallback + /** HTTP Header,Header 中不能设置 Referer */ + header?: IAnyObject + /** 需要基础库: `2.8.0` + * + * 是否开启压缩扩展 */ + perMessageDeflate?: boolean + /** 需要基础库: `1.4.0` + * + * 子协议数组 */ + protocols?: string[] + /** 接口调用成功的回调函数 */ + success?: ConnectSocketSuccessCallback + /** 需要基础库: `2.4.0` + * + * 建立 TCP 连接的时候的 TCP_NODELAY 设置 */ + tcpNoDelay?: boolean + /** 需要基础库: `2.10.0` + * + * 超时时间,单位为毫秒 */ + timeout?: number + } + interface ConnectWifiOption { + /** Wi-Fi 设备 SSID */ + SSID: string + /** Wi-Fi 设备密码 */ + password: string + /** Wi-Fi 设备 BSSID */ + BSSID?: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: ConnectWifiCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: ConnectWifiFailCallback + /** 需要基础库: `2.12.0` + * + * 跳转到系统设置页进行连接 */ + maunal?: boolean + /** 需要基础库: `2.22.0` + * + * 是否需要返回部分 Wi-Fi 信息,仅安卓生效 */ + partialInfo?: boolean + /** 接口调用成功的回调函数 */ + success?: ConnectWifiSuccessCallback + } + /** 一个字典对象,它指定是否应该禁用规范化(默认启用规范化) */ + interface Constraints { + /** 如果指定为true则禁用标准化,默认为false */ + disableNormalization?: boolean + } + interface ContextCallbackResult { + /** 节点对应的 Context 对象 */ + context: IAnyObject + } + interface CopyFileFailCallbackResult { + /** 错误信息 + * + * 可选值: + * - 'fail permission denied, copyFile ${srcPath} -> ${destPath}': 指定目标文件路径没有写权限; + * - 'fail no such file or directory, copyFile ${srcPath} -> ${destPath}': 源文件不存在,或目标文件路径的上层目录不存在; + * - 'fail the maximum size of the file storage limit is exceeded': 存储空间不足; + * - 'fail sdcard not mounted': Android sdcard 挂载失败; */ + errMsg: string + } + interface CopyFileOption { + /** 目标文件路径,支持本地路径 */ + destPath: string + /** 源文件路径,支持本地路径 */ + srcPath: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: CopyFileCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: CopyFileFailCallback + /** 接口调用成功的回调函数 */ + success?: CopyFileSuccessCallback + } + interface CreateBLEConnectionOption { + /** 蓝牙设备 id */ + deviceId: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: CreateBLEConnectionCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: CreateBLEConnectionFailCallback + /** 接口调用成功的回调函数 */ + success?: CreateBLEConnectionSuccessCallback + /** 超时时间,单位 ms,不填表示不会超时 */ + timeout?: number + } + interface CreateBLEPeripheralServerOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: CreateBLEPeripheralServerCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: CreateBLEPeripheralServerFailCallback + /** 接口调用成功的回调函数 */ + success?: CreateBLEPeripheralServerSuccessCallback + } + interface CreateBLEPeripheralServerSuccessCallbackResult { + /** [BLEPeripheralServer](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-peripheral/BLEPeripheralServer.html) + * + * 外围设备的服务端。 */ + server: BLEPeripheralServer + errMsg: string + } + interface CreateCacheManagerOption { + /** 额外的缓存处理 */ + extra?: ExtraOption + /** 全局缓存有效时间,单位为毫秒,默认为 7 天,最长不超过 30 天 */ + maxAge?: number + /** 缓存模式 + * + * 可选值: + * - 'weakNetwork': 弱网/离线使用缓存返回; + * - 'always': 总是使用缓存返回; + * - 'none': 不开启,后续可手动开启/停止使用缓存返回; */ + mode?: 'weakNetwork' | 'always' | 'none' + /** 全局 origin */ + origin?: string + } + interface CreateInnerAudioContextOption { + /** 需要基础库: `2.19.0` + * + * 是否使用 WebAudio 作为底层音频驱动,默认关闭。对于短音频、播放频繁的音频建议开启此选项,开启后将获得更优的性能表现。由于开启此选项后也会带来一定的内存增长,因此对于长音频建议关闭此选项。 */ + useWebAudioImplement?: boolean + } + /** 选项 */ + interface CreateIntersectionObserverOption { + /** 初始的相交比例,如果调用时检测到的相交比例与这个值不相等且达到阈值,则会触发一次监听器的回调函数。 */ + initialRatio?: number + /** 需要基础库: `2.0.0` + * + * 是否同时观测多个目标节点(而非一个),如果设为 true ,observe 的 targetSelector 将选中多个节点(注意:同时选中过多节点将影响渲染性能) */ + observeAll?: boolean + /** 一个数值数组,包含所有阈值。 */ + thresholds?: number[] + } + interface CreateInterstitialAdOption { + /** 广告单元 id */ + adUnitId: string + } + interface CreateMediaRecorderOption { + /** 指定录制的时长(s),到达自动停止。最大 7200,最小 5 */ + duration?: number + /** 视频 fps */ + fps?: number + /** 视频关键帧间隔 */ + gop?: number + /** 视频比特率(kbps),最小值 600,最大值 3000 */ + videoBitsPerSecond?: number + } + interface CreateOffscreenCanvasOption { + /** 在自定义组件下,当前组件实例的 this */ + compInst?: Component.TrivialInstance | Page.TrivialInstance + /** 画布高度 */ + height?: number + /** 创建的离屏 canvas 类型 + * + * 可选值: + * - 'webgl': webgl类型上下文; + * - '2d': 2d类型上下文; */ + type?: 'webgl' | '2d' + /** 画布宽度 */ + width?: number + } + interface CreateRewardedVideoAdOption { + /** 广告单元 id */ + adUnitId: string + /** 需要基础库: `2.8.0` + * + * 是否启用多例模式,默认为false */ + multiton?: boolean + } + /** 可选参数 */ + interface CreateWorkerOption { + /** 需要基础库: `2.13.0` + * + * 是否使用实验worker。在iOS下,实验worker的JS运行效率比非实验worker提升近十倍,如需在worker内进行重度计算的建议开启此选项。同时,实验worker存在极小概率会在系统资源紧张时被系统回收,因此建议配合 worker.onProcessKilled 事件使用,在worker被回收后可重新创建一个。 */ + useExperimentalWorker?: boolean + } + interface CurrentState { + /** 当前缓存中的日志条数 */ + logCount: number + /** 当前缓存中最大可存日志条数 */ + maxLogCount: number + /** 当前缓存最大可用空间,以字节为单位 */ + maxSize: number + /** 当前缓存中已使用空间,以字节为单位 */ + size: number + } + /** 弹幕内容 */ + interface Danmu { + /** 弹幕文字 */ + text: string + /** 弹幕颜色 */ + color?: string + } + /** 可选的字体描述符 */ + interface DescOption { + /** 字体样式,可选值为 normal / italic / oblique */ + style?: string + /** 设置小型大写字母的字体显示文本,可选值为 normal / small-caps / inherit */ + variant?: string + /** 字体粗细,可选值为 normal / bold / 100 / 200../ 900 */ + weight?: string + } + /** 描述符的权限 */ + interface DescriptorPermission { + /** 读 */ + read?: boolean + /** 写 */ + write?: boolean + } + /** 指定 marker 移动到的目标点 */ + interface DestinationOption { + /** 纬度 */ + latitude: number + /** 经度 */ + longitude: number + } + interface DetectFaceOption { + /** 人脸图像像素点数据,每四项表示一个像素点的 RGBA */ + frameBuffer: ArrayBuffer + /** 图像高度 */ + height: number + /** 图像宽度 */ + width: number + /** 算法模型类型。正常情况传入 1 即可。0、1、2 分别表示小、中、大模型,模型越大识别准确率越高,但资源占用也越高。建议根据用户设备性能进行选择。 + * + * 可选值: + * - 0: 小模型; + * - 1: 中模型; + * - 2: 大模型; */ + modelModel?: 0 | 1 | 2 + /** 评分阈值。正常情况传入 0.8 即可。 */ + scoreThreshold?: number + /** 图像源类型。正常情况传入 1 即可。当输入的图片是来自一个连续视频的每一帧图像时,sourceType 传入 0 会得到更优的效果 + * + * 可选值: + * - 1: 表示输入的图片是随机的图片; + * - 0: 表示输入的图片是来自一个连续视频的每一帧图像; */ + sourceType?: 1 | 0 + } + interface DeviceInfo { + /** 应用(微信APP)二进制接口类型(仅 Android 支持) */ + abi: string + /** 设备性能等级(仅 Android 支持)。取值为:-2 或 0(该设备无法运行小游戏),-1(性能未知),>=1(设备性能值,该值越高,设备性能越好,目前最高不到50) */ + benchmarkLevel: number + /** 设备品牌 */ + brand: string + /** 需要基础库: `2.25.1` + * + * 设备二进制接口类型(仅 Android 支持) */ + deviceAbi: string + /** 设备型号。新机型刚推出一段时间会显示unknown,微信会尽快进行适配。 */ + model: string + /** 客户端平台 */ + platform: string + /** 操作系统及版本 */ + system: string + } + interface DisableAlertBeforeUnloadOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: DisableAlertBeforeUnloadCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: DisableAlertBeforeUnloadFailCallback + /** 接口调用成功的回调函数 */ + success?: DisableAlertBeforeUnloadSuccessCallback + } + interface DownloadFileOption { + /** 下载资源的 url */ + url: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: DownloadFileCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: DownloadFileFailCallback + /** 需要基础库: `1.8.0` + * + * 指定文件下载后存储的路径 (本地路径) */ + filePath?: string + /** HTTP 请求的 Header,Header 中不能设置 Referer */ + header?: IAnyObject + /** 接口调用成功的回调函数 */ + success?: DownloadFileSuccessCallback + /** 需要基础库: `2.10.0` + * + * 超时时间,单位为毫秒 */ + timeout?: number + } + interface DownloadFileSuccessCallbackResult { + /** 用户文件路径 (本地路径)。传入 filePath 时会返回,跟传入的 filePath 一致 */ + filePath: string + /** 需要基础库: `2.10.4` + * + * 网络请求过程中一些调试信息,[查看详细说明](https://developers.weixin.qq.com/miniprogram/dev/framework/performance/network.html) */ + profile: RequestProfile + /** 开发者服务器返回的 HTTP 状态码 */ + statusCode: number + /** 临时文件路径 (本地路径)。没传入 filePath 指定文件存储路径时会返回,下载后的文件会存储到一个临时文件 */ + tempFilePath: string + errMsg: string + } + interface DownloadTaskOnProgressUpdateListenerResult { + /** 下载进度百分比 */ + progress: number + /** 预期需要下载的数据总长度,单位 Bytes */ + totalBytesExpectedToWrite: number + /** 已经下载的数据长度,单位 Bytes */ + totalBytesWritten: number + } + interface EditImageOption { + /** 图片路径,图片的路径,支持本地路径、代码包路径 */ + src: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: EditImageCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: EditImageFailCallback + /** 接口调用成功的回调函数 */ + success?: EditImageSuccessCallback + } + interface EditImageSuccessCallbackResult { + /** 编辑后图片的临时文件路径 (本地路径) */ + tempFilePath: string + errMsg: string + } + interface EnableAlertBeforeUnloadOption { + /** 询问对话框内容 */ + message: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: EnableAlertBeforeUnloadCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: EnableAlertBeforeUnloadFailCallback + /** 接口调用成功的回调函数 */ + success?: EnableAlertBeforeUnloadSuccessCallback + } + /** 文件读取结果。res.entries 是一个对象,key是文件路径,value是一个对象 FileItem ,表示该文件的读取结果。每个 FileItem 包含 data (文件内容) 和 errMsg (错误信息) 属性。 */ + interface EntriesResult { + /** 文件路径 */ + [path: string]: ZipFileItem + } + /** 要读取的压缩包内的文件列表(当传入"all" 时表示读取压缩包内所有文件) */ + interface EntryItem { + /** 压缩包内文件路径 */ + path: string + /** 指定读取文件的字符编码,如果不传 encoding,则以 ArrayBuffer 格式读取文件的二进制内容 + * + * 可选值: + * - 'ascii': ; + * - 'base64': ; + * - 'binary': ; + * - 'hex': ; + * - 'ucs2': 以小端序读取; + * - 'ucs-2': 以小端序读取; + * - 'utf16le': 以小端序读取; + * - 'utf-16le': 以小端序读取; + * - 'utf-8': ; + * - 'utf8': ; + * - 'latin1': ; */ + encoding?: + | 'ascii' + | 'base64' + | 'binary' + | 'hex' + | 'ucs2' + | 'ucs-2' + | 'utf16le' + | 'utf-16le' + | 'utf-8' + | 'utf8' + | 'latin1' + /** 指定文件的长度,如果不指定,则读到文件末尾。有效范围:[1, fileLength]。单位:byte */ + length?: number + /** 从文件指定位置开始读,如果不指定,则从文件头开始读。读取的范围应该是左闭右开区间 [position, position+length)。有效范围:[0, fileLength - 1]。单位:byte */ + position?: number + } + interface Err { + /** 错误信息 */ + errMsg: string + /** 需要基础库: `2.24.0` + * + * errno 错误码,错误码的详细说明参考 [Errno错误码](https://developers.weixin.qq.com/miniprogram/dev/framework/usability/PublicErrno.html) */ + errno: number + } + interface ExitFullScreenOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: ExitFullScreenCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: ExitFullScreenFailCallback + /** 接口调用成功的回调函数 */ + success?: ExitFullScreenSuccessCallback + } + interface ExitMiniProgramOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: ExitMiniProgramCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: ExitMiniProgramFailCallback + /** 接口调用成功的回调函数 */ + success?: ExitMiniProgramSuccessCallback + } + interface ExitPictureInPictureOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: ExitPictureInPictureCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: ExitPictureInPictureFailCallback + /** 接口调用成功的回调函数 */ + success?: ExitPictureInPictureSuccessCallback + } + interface ExitVoIPChatOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: ExitVoIPChatCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: ExitVoIPChatFailCallback + /** 接口调用成功的回调函数 */ + success?: ExitVoIPChatSuccessCallback + } + /** 客服信息 */ + interface ExtInfoOption { + /** 客服链接 */ + url: string + } + /** 额外的缓存处理 */ + interface ExtraOption { + /** 需要缓存的 wx api 接口,不传则表示支持缓存的接口全都做缓存处理。返回的如果是缓存数据,开发者可通过 fromCache 标记区分 + * + * 可选值: + * - 'wx.login': ; + * - 'wx.checkSession': ; + * - 'wx.getSetting': ; */ + apiList?: Array<'wx.login' | 'wx.checkSession' | 'wx.getSetting'> + } + interface ExtractDataSourceOption { + /** 视频源地址,只支持本地文件 */ + source: string + } + /** 人脸角度信息,取值范围 [-1, 1],数值越接近 0 表示越正对摄像头 */ + interface FaceAngel { + /** 仰俯角(点头) */ + pitch: number + /** 翻滚角(左右倾) */ + roll: number + /** 偏航角(摇头) */ + yaw: number + } + /** 人脸置信度,取值范围 [0, 1],数值越大置信度越高(遮挡越少) */ + interface FaceConf { + /** 整体可信度 */ + global: number + /** 左眼可信度 */ + leftEye: number + /** 嘴巴可信度 */ + mouth: number + /** 鼻子可信度 */ + nose: number + /** 右眼可信度 */ + rightEye: number + } + interface FaceDetectOption { + /** 图像像素点数据,每四项表示一个像素点的 RGBA */ + frameBuffer: ArrayBuffer + /** 图像高度 */ + height: number + /** 图像宽度 */ + width: number + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: FaceDetectCompleteCallback + /** 是否返回当前图像的人脸角度信息 */ + enableAngle?: boolean + /** 是否返回当前图像的人脸的置信度(可表示器官遮挡情况) */ + enableConf?: boolean + /** 是否返回多张人脸的信息 */ + enableMultiFace?: boolean + /** 是否返回当前图像的人脸(106 个点) */ + enablePoint?: boolean + /** 接口调用失败的回调函数 */ + fail?: FaceDetectFailCallback + /** 接口调用成功的回调函数 */ + success?: FaceDetectSuccessCallback + } + interface FaceDetectSuccessCallbackResult { + /** 人脸角度信息,取值范围 [-1, 1],数值越接近 0 表示越正对摄像头 */ + angleArray: FaceAngel + /** 人脸置信度,取值范围 [0, 1],数值越大置信度越高(遮挡越少) */ + confArray: FaceConf + /** 脸部方框数值,对象包含 height, weight, originX, originY 四个属性 (origin 为方框左上角坐标) */ + detectRect: IAnyObject + /** 多人模式(enableMultiFace)下的人脸信息,每个对象包含上述其它属性 */ + faceInfo: IAnyObject[] + /** 标记人脸轮廓的 106 个点位置数组,数组每个对象包含 x 和 y */ + pointArray: IAnyObject[] + /** 脸部中心点横坐标,检测不到人脸则为 -1 */ + x: number + /** 脸部中心点纵坐标,检测不到人脸则为 -1 */ + y: number + errMsg: string + } + /** 需要基础库: `2.25.0` + * + * 人脸检测配置。用法详情[指南文档](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/visionkit/face.html)。安卓微信8.0.25开始支持,iOS微信8.0.24开始支持。 */ + interface FaceTrack { + /** 需要基础库: `2.25.0` + * + * 人脸检测模式 + * + * 可选值: + * - 1: 静态图片检测; + * - 2: 通过摄像头实时检测; */ + mode: 1 | 2 + } + interface Fields { + /** 需要基础库: `2.1.0` + * + * 指定样式名列表,返回节点对应样式名的当前值 */ + computedStyle?: string[] + /** 需要基础库: `2.4.2` + * + * 是否返回节点对应的 Context 对象 */ + context?: boolean + /** 是否返回节点 dataset */ + dataset?: boolean + /** 是否返回节点 id */ + id?: boolean + /** 是否返回节点 mark */ + mark?: boolean + /** 需要基础库: `2.7.0` + * + * 是否返回节点对应的 Node 实例 */ + node?: boolean + /** 指定属性名列表,返回节点对应属性名的当前属性值(只能获得组件文档中标注的常规属性值,id class style 和事件绑定的属性值不可获取) */ + properties?: string[] + /** 是否返回节点布局位置(`left` `right` `top` `bottom`) */ + rect?: boolean + /** 否 是否返回节点的 `scrollLeft` `scrollTop`,节点必须是 `scroll-view` 或者 `viewport` */ + scrollOffset?: boolean + /** 是否返回节点尺寸(`width` `height`) */ + size?: boolean + } + interface FileItem { + /** 文件保存时的时间戳,从1970/01/01 08:00:00 到当前时间的秒数 */ + createTime: number + /** 文件路径 (本地路径) */ + filePath: string + /** 本地文件大小,以字节为单位 */ + size: number + } + interface FileSystemManagerCloseOption { + /** 需要被关闭的文件描述符。fd 通过 [FileSystemManager.open](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.open.html) 或 [FileSystemManager.openSync](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.openSync.html) 接口获得 */ + fd: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: FileSystemManagerCloseCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: FileSystemManagerCloseFailCallback + /** 接口调用成功的回调函数 */ + success?: FileSystemManagerCloseSuccessCallback + } + interface FileSystemManagerGetFileInfoOption { + /** 要读取的文件路径 (本地路径) */ + filePath: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: GetFileInfoCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: FileSystemManagerGetFileInfoFailCallback + /** 接口调用成功的回调函数 */ + success?: FileSystemManagerGetFileInfoSuccessCallback + } + interface FileSystemManagerGetFileInfoSuccessCallbackResult { + /** 文件大小,以字节为单位 */ + size: number + errMsg: string + } + interface FileSystemManagerGetSavedFileListOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: GetSavedFileListCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: GetSavedFileListFailCallback + /** 接口调用成功的回调函数 */ + success?: FileSystemManagerGetSavedFileListSuccessCallback + } + interface FileSystemManagerGetSavedFileListSuccessCallbackResult { + /** 文件数组 */ + fileList: FileItem[] + errMsg: string + } + interface FileSystemManagerRemoveSavedFileOption { + /** 需要删除的文件路径 (本地路径) */ + filePath: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: RemoveSavedFileCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: FileSystemManagerRemoveSavedFileFailCallback + /** 接口调用成功的回调函数 */ + success?: RemoveSavedFileSuccessCallback + } + interface FileSystemManagerSaveFileOption { + /** 临时存储文件路径 (本地路径) */ + tempFilePath: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: SaveFileCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: FileSystemManagerSaveFileFailCallback + /** 要存储的文件路径 (本地路径) */ + filePath?: string + /** 接口调用成功的回调函数 */ + success?: SaveFileSuccessCallback + } + /** 打开的文件信息数组,只有从聊天素材场景打开(scene为1173)才会携带该参数 */ + interface ForwardMaterials { + /** 文件名 */ + name: string + /** 文件路径(如果是webview则是url) */ + path: string + /** 文件大小 */ + size: number + /** 文件的mimetype类型 */ + type: string + } + /** 视频帧数据,若取不到则返回 null。当缓冲区为空的时候可能暂停取不到数据。 */ + interface FrameDataOptions { + /** 帧数据 */ + data: ArrayBuffer + /** 帧数据高度 */ + height: number + /** 帧原始 dts */ + pkDts: number + /** 帧原始 pts */ + pkPts: number + /** 帧数据宽度 */ + width: number + } + interface FromScreenLocationOption { + /** x 坐标值 */ + x: number + /** y 坐标值 */ + y: number + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: FromScreenLocationCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: FromScreenLocationFailCallback + /** 接口调用成功的回调函数 */ + success?: FromScreenLocationSuccessCallback + } + interface FstatFailCallbackResult { + /** 错误信息 + * + * 可选值: + * - 'bad file descriptor': 无效的文件描述符; + * - 'fail permission denied': 指定的 fd 路径没有读权限; */ + errMsg: string + } + interface FstatOption { + /** 文件描述符。fd 通过 [FileSystemManager.open](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.open.html) 或 [FileSystemManager.openSync](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.openSync.html) 接口获得 */ + fd: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: FstatCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: FstatFailCallback + /** 接口调用成功的回调函数 */ + success?: FstatSuccessCallback + } + interface FstatSuccessCallbackResult { + /** [Stats](https://developers.weixin.qq.com/miniprogram/dev/api/file/Stats.html) + * + * Stats 对象,包含了文件的状态信息 */ + stats: Stats + errMsg: string + } + interface FstatSyncOption { + /** 文件描述符。fd 通过 [FileSystemManager.open](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.open.html) 或 [FileSystemManager.openSync](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.openSync.html) 接口获得 */ + fd: string + } + interface FtruncateFailCallbackResult { + /** 错误信息 + * + * 可选值: + * - 'bad file descriptor': 无效的文件描述符; + * - 'fail permission denied': 指定的 fd 没有写权限; + * - 'fail the maximum size of the file storage limit is exceeded': 存储空间不足; + * - 'fail sdcard not mounted': android sdcard 挂载失败; */ + errMsg: string + } + interface FtruncateOption { + /** 文件描述符。fd 通过 [FileSystemManager.open](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.open.html) 或 [FileSystemManager.openSync](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.openSync.html) 接口获得 */ + fd: string + /** 截断位置,默认0。如果 length 小于文件长度(单位:字节),则只有前面 length 个字节会保留在文件中,其余内容会被删除;如果 length 大于文件长度,则会对其进行扩展,并且扩展部分将填充空字节('\0') */ + length: number + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: FtruncateCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: FtruncateFailCallback + /** 接口调用成功的回调函数 */ + success?: FtruncateSuccessCallback + } + interface FtruncateSyncOption { + /** 文件描述符。fd 通过 [FileSystemManager.open](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.open.html) 或 [FileSystemManager.openSync](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.openSync.html) 接口获得 */ + fd: string + /** 截断位置,默认0。如果 length 小于文件长度(单位:字节),则只有前面 length 个字节会保留在文件中,其余内容会被删除;如果 length 大于文件长度,则会对其进行扩展,并且扩展部分将填充空字节('\0') */ + length: number + } + interface GeneralCallbackResult { + /** 错误信息 */ + errMsg: string + } + interface GetAtqaOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: GetAtqaCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: GetAtqaFailCallback + /** 接口调用成功的回调函数 */ + success?: GetAtqaSuccessCallback + } + interface GetAtqaSuccessCallbackResult { + /** 返回 ATQA/SENS_RES 数据 */ + atqa: ArrayBuffer + errMsg: string + } + interface GetAvailableAudioSourcesOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: GetAvailableAudioSourcesCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: GetAvailableAudioSourcesFailCallback + /** 接口调用成功的回调函数 */ + success?: GetAvailableAudioSourcesSuccessCallback + } + interface GetAvailableAudioSourcesSuccessCallbackResult { + /** 支持的音频输入源列表,可在 [RecorderManager.start()](https://developers.weixin.qq.com/miniprogram/dev/api/media/recorder/RecorderManager.start.html) 接口中使用。返回值定义参考 https://developer.android.com/reference/kotlin/android/media/MediaRecorder.AudioSource + * + * 可选值: + * - 'auto': 自动设置,默认使用手机麦克风,插上耳麦后自动切换使用耳机麦克风,所有平台适用; + * - 'buildInMic': 手机麦克风,仅限 iOS; + * - 'headsetMic': 耳机麦克风,仅限 iOS; + * - 'mic': 麦克风(没插耳麦时是手机麦克风,插耳麦时是耳机麦克风),仅限 Android; + * - 'camcorder': 同 mic,适用于录制音视频内容,仅限 Android; + * - 'voice_communication': 同 mic,适用于实时沟通,仅限 Android; + * - 'voice_recognition': 同 mic,适用于语音识别,仅限 Android; */ + audioSources: Array< + | 'auto' + | 'buildInMic' + | 'headsetMic' + | 'mic' + | 'camcorder' + | 'voice_communication' + | 'voice_recognition' + > + errMsg: string + } + interface GetBLEDeviceCharacteristicsOption { + /** 蓝牙设备 id。需要已经通过 [wx.createBLEConnection](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.createBLEConnection.html) 建立连接 */ + deviceId: string + /** 蓝牙服务 UUID。需要先调用 [wx.getBLEDeviceServices](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.getBLEDeviceServices.html) 获取 */ + serviceId: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: GetBLEDeviceCharacteristicsCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: GetBLEDeviceCharacteristicsFailCallback + /** 接口调用成功的回调函数 */ + success?: GetBLEDeviceCharacteristicsSuccessCallback + } + interface GetBLEDeviceCharacteristicsSuccessCallbackResult { + /** 设备特征列表 */ + characteristics: BLECharacteristic[] + errMsg: string + } + interface GetBLEDeviceRSSIOption { + /** 蓝牙设备 id */ + deviceId: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: GetBLEDeviceRSSICompleteCallback + /** 接口调用失败的回调函数 */ + fail?: GetBLEDeviceRSSIFailCallback + /** 接口调用成功的回调函数 */ + success?: GetBLEDeviceRSSISuccessCallback + } + interface GetBLEDeviceRSSISuccessCallbackResult { + /** 信号强度,单位 dBm */ + RSSI: number + errMsg: string + } + interface GetBLEDeviceServicesOption { + /** 蓝牙设备 id。需要已经通过 [wx.createBLEConnection](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.createBLEConnection.html) 建立连接 */ + deviceId: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: GetBLEDeviceServicesCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: GetBLEDeviceServicesFailCallback + /** 接口调用成功的回调函数 */ + success?: GetBLEDeviceServicesSuccessCallback + } + interface GetBLEDeviceServicesSuccessCallbackResult { + /** 设备服务列表 */ + services: BLEService[] + errMsg: string + } + interface GetBLEMTUOption { + /** 蓝牙设备 id */ + deviceId: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: GetBLEMTUCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: GetBLEMTUFailCallback + /** 接口调用成功的回调函数 */ + success?: GetBLEMTUSuccessCallback + /** 写模式 (iOS 特有参数) + * + * 可选值: + * - 'write': 有回复写; + * - 'writeNoResponse': 无回复写; */ + writeType?: 'write' | 'writeNoResponse' + } + interface GetBLEMTUSuccessCallbackResult { + /** 最大传输单元 */ + mtu: number + errMsg: string + } + interface GetBackgroundAudioPlayerStateOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: GetBackgroundAudioPlayerStateCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: GetBackgroundAudioPlayerStateFailCallback + /** 接口调用成功的回调函数 */ + success?: GetBackgroundAudioPlayerStateSuccessCallback + } + interface GetBackgroundAudioPlayerStateSuccessCallbackResult { + /** 选定音频的播放位置(单位:s),只有在音乐播放中时返回 */ + currentPosition: number + /** 歌曲数据链接,只有在音乐播放中时返回 */ + dataUrl: string + /** 音频的下载进度百分比,只有在音乐播放中时返回 */ + downloadPercent: number + /** 选定音频的长度(单位:s),只有在音乐播放中时返回 */ + duration: number + /** 播放状态 + * + * 可选值: + * - 0: 暂停中; + * - 1: 播放中; + * - 2: 没有音乐播放; */ + status: 0 | 1 | 2 + errMsg: string + } + interface GetBackgroundFetchDataOption { + /** 缓存数据类别,取值为 periodic 或 pre */ + fetchType: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: GetBackgroundFetchDataCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: GetBackgroundFetchDataFailCallback + /** 接口调用成功的回调函数 */ + success?: GetBackgroundFetchDataSuccessCallback + } + interface GetBackgroundFetchDataSuccessCallbackResult { + /** 缓存数据 */ + fetchedData: string + /** 小程序页面路径 */ + path: string + /** 传给页面的 query 参数 */ + query: string + /** 进入小程序的场景值 */ + scene: number + /** 客户端拿到缓存数据的时间戳。(注:安卓 timeStamp 单位是 ms,iOS timeStamp 单位是 s) */ + timeStamp: number + errMsg: string + } + interface GetBackgroundFetchTokenOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: GetBackgroundFetchTokenCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: GetBackgroundFetchTokenFailCallback + /** 接口调用成功的回调函数 */ + success?: GetBackgroundFetchTokenSuccessCallback + } + interface GetBackgroundFetchTokenSuccessCallbackResult { + /** 接口调用结果 */ + errMsg: string + /** 自定义的登录态 */ + token: number + } + interface GetBatteryInfoOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: GetBatteryInfoCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: GetBatteryInfoFailCallback + /** 接口调用成功的回调函数 */ + success?: GetBatteryInfoSuccessCallback + } + interface GetBatteryInfoSuccessCallbackResult { + /** 是否正在充电中 */ + isCharging: boolean + /** 设备电量,范围 1 - 100 */ + level: number + errMsg: string + } + interface GetBatteryInfoSyncResult { + /** 是否正在充电中 */ + isCharging: boolean + /** 设备电量,范围 1 - 100 */ + level: number + } + interface GetBeaconsOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: GetBeaconsCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: GetBeaconsFailCallback + /** 接口调用成功的回调函数 */ + success?: GetBeaconsSuccessCallback + } + interface GetBeaconsSuccessCallbackResult { + /** Beacon 设备列表 */ + beacons: BeaconInfo[] + errMsg: string + } + interface GetBluetoothAdapterStateOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: GetBluetoothAdapterStateCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: GetBluetoothAdapterStateFailCallback + /** 接口调用成功的回调函数 */ + success?: GetBluetoothAdapterStateSuccessCallback + } + interface GetBluetoothAdapterStateSuccessCallbackResult { + /** 蓝牙适配器是否可用 */ + available: boolean + /** 是否正在搜索设备 */ + discovering: boolean + errMsg: string + } + interface GetBluetoothDevicesOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: GetBluetoothDevicesCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: GetBluetoothDevicesFailCallback + /** 接口调用成功的回调函数 */ + success?: GetBluetoothDevicesSuccessCallback + } + interface GetBluetoothDevicesSuccessCallbackResult { + /** UUID 对应的已连接设备列表 */ + devices: BlueToothDevice[] + errMsg: string + } + interface GetCenterLocationOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: GetCenterLocationCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: GetCenterLocationFailCallback + /** 图标路径,支持网络路径、本地路径、代码包路径 */ + iconPath?: string + /** 接口调用成功的回调函数 */ + success?: GetCenterLocationSuccessCallback + } + interface GetCenterLocationSuccessCallbackResult { + /** 纬度 */ + latitude: number + /** 经度 */ + longitude: number + errMsg: string + } + interface GetChannelsLiveInfoOption { + /** 视频号 id,以“sph”开头的id,可在视频号助手获取 */ + finderUserName: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: GetChannelsLiveInfoCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: GetChannelsLiveInfoFailCallback + /** 接口调用成功的回调函数 */ + success?: GetChannelsLiveInfoSuccessCallback + } + interface GetChannelsLiveInfoSuccessCallbackResult { + /** 直播主题 */ + description: string + /** 直播 feedId */ + feedId: string + /** 视频号头像 */ + headUrl: string + /** 视频号昵称 */ + nickname: string + /** 直播 nonceId */ + nonceId: string + /** 直播状态,2直播中,3直播结束 */ + status: number + errMsg: string + } + interface GetChannelsLiveNoticeInfoOption { + /** 视频号 id,以“sph”开头的id,可在视频号助手获取 */ + finderUserName: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: GetChannelsLiveNoticeInfoCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: GetChannelsLiveNoticeInfoFailCallback + /** 接口调用成功的回调函数 */ + success?: GetChannelsLiveNoticeInfoSuccessCallback + } + interface GetChannelsLiveNoticeInfoSuccessCallbackResult { + /** 直播封面 */ + headUrl: string + /** 视频号昵称 */ + nickname: string + /** 预告 id */ + noticeId: string + /** 需要基础库: `2.24.6` + * + * 除最近的一条预告信息外,其他的预告信息列表(注意:每次最多返回按时间戳增序排列的15个预告信息,其中时间最近的那个预告信息会在接口其他的返回参数中展示,其余的预告信息会在该字段中展示)。 */ + otherInfos: any[] + /** 是否可预约 */ + reservable: boolean + /** 开始时间 */ + startTime: string + /** 预告状态:0可用 1取消 2已用 */ + status: number + errMsg: string + } + interface GetChannelsShareKeyOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: GetChannelsShareKeyCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: GetChannelsShareKeyFailCallback + /** 接口调用成功的回调函数 */ + success?: GetChannelsShareKeySuccessCallback + } + interface GetChannelsShareKeySuccessCallbackResult { + /** 推广员 */ + promoter: PromoterResult + /** 分享者 openid */ + sharerOpenId: string + errMsg: string + } + interface GetClipboardDataOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: GetClipboardDataCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: GetClipboardDataFailCallback + /** 接口调用成功的回调函数 */ + success?: GetClipboardDataSuccessCallback + } + interface GetClipboardDataSuccessCallbackOption { + /** 剪贴板的内容 */ + data: string + } + interface GetConnectedBluetoothDevicesOption { + /** 蓝牙设备主服务的 UUID 列表(支持 16/32/128 位 UUID) */ + services: string[] + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: GetConnectedBluetoothDevicesCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: GetConnectedBluetoothDevicesFailCallback + /** 接口调用成功的回调函数 */ + success?: GetConnectedBluetoothDevicesSuccessCallback + } + interface GetConnectedBluetoothDevicesSuccessCallbackResult { + /** 搜索到的设备列表 */ + devices: BluetoothDeviceInfo[] + errMsg: string + } + interface GetConnectedWifiOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: GetConnectedWifiCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: GetConnectedWifiFailCallback + /** 需要基础库: `2.22.0` + * + * 是否需要返回部分 Wi-Fi 信息 */ + partialInfo?: boolean + /** 接口调用成功的回调函数 */ + success?: GetConnectedWifiSuccessCallback + } + interface GetConnectedWifiSuccessCallbackResult { + /** [WifiInfo](https://developers.weixin.qq.com/miniprogram/dev/api/device/wifi/WifiInfo.html) + * + * Wi-Fi 信息 */ + wifi: WifiInfo + errMsg: string + } + interface GetContentsOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: GetContentsCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: GetContentsFailCallback + /** 接口调用成功的回调函数 */ + success?: GetContentsSuccessCallback + } + interface GetContentsSuccessCallbackResult { + /** 表示内容的delta对象 */ + delta: IAnyObject + /** 带标签的HTML内容 */ + html: string + /** 纯文本内容 */ + text: string + errMsg: string + } + interface GetExtConfigOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: GetExtConfigCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: GetExtConfigFailCallback + /** 接口调用成功的回调函数 */ + success?: GetExtConfigSuccessCallback + } + interface GetExtConfigSuccessCallbackResult { + /** 第三方平台自定义的数据 */ + extConfig: IAnyObject + errMsg: string + } + interface GetFileInfoFailCallbackResult { + /** 错误信息 + * + * 可选值: + * - 'fail file not exist': 指定的 filePath 找不到文件; */ + errMsg: string + } + interface GetFuzzyLocationOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: GetFuzzyLocationCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: GetFuzzyLocationFailCallback + /** 接口调用成功的回调函数 */ + success?: GetFuzzyLocationSuccessCallback + /** wgs84 返回 gps 坐标,gcj02 返回可用于 wx.openLocation 的坐标 */ + type?: string + } + interface GetFuzzyLocationSuccessCallbackResult { + /** 纬度,范围为 -90~90,负数表示南纬 */ + latitude: number + /** 经度,范围为 -180~180,负数表示西经 */ + longitude: number + errMsg: string + } + interface GetGroupEnterInfoOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: GetGroupEnterInfoCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: GetGroupEnterInfoFailCallback + /** 接口调用成功的回调函数 */ + success?: GetGroupEnterInfoSuccessCallback + } + interface GetGroupEnterInfoSuccessCallbackResult { + /** 需要基础库: `2.7.0` + * + * 敏感数据对应的云 ID,开通[云开发](https://developers.weixin.qq.com/miniprogram/dev/wxcloud/basis/getting-started.html)的小程序才会返回,可通过云调用直接获取开放数据,详细见[云调用直接获取开放数据](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html#method-cloud) */ + cloudID: string + /** 包括敏感数据在内的完整转发信息的加密数据,详细见[加密数据解密算法](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html) */ + encryptedData: string + /** 错误信息 */ + errMsg: string + /** 加密算法的初始向量,详细见[加密数据解密算法](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html) */ + iv: string + } + interface GetHCEStateOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: GetHCEStateCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: GetHCEStateFailCallback + /** 接口调用成功的回调函数 */ + success?: GetHCEStateSuccessCallback + } + interface GetHistoricalBytesOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: GetHistoricalBytesCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: GetHistoricalBytesFailCallback + /** 接口调用成功的回调函数 */ + success?: GetHistoricalBytesSuccessCallback + } + interface GetHistoricalBytesSuccessCallbackResult { + /** 返回历史二进制数据 */ + histBytes: ArrayBuffer + errMsg: string + } + interface GetImageInfoOption { + /** 图片的路径,支持网络路径、本地路径、代码包路径 */ + src: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: GetImageInfoCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: GetImageInfoFailCallback + /** 接口调用成功的回调函数 */ + success?: GetImageInfoSuccessCallback + } + interface GetImageInfoSuccessCallbackResult { + /** 图片原始高度,单位px。不考虑旋转。 */ + height: number + /** 需要基础库: `1.9.90` + * + * [拍照时设备方向](http://sylvana.net/jpegcrop/exif_orientation.html) + * + * 可选值: + * - 'up': 默认方向(手机横持拍照),对应 Exif 中的 1。或无 orientation 信息。; + * - 'up-mirrored': 同 up,但镜像翻转,对应 Exif 中的 2; + * - 'down': 旋转180度,对应 Exif 中的 3; + * - 'down-mirrored': 同 down,但镜像翻转,对应 Exif 中的 4; + * - 'left-mirrored': 同 left,但镜像翻转,对应 Exif 中的 5; + * - 'right': 顺时针旋转90度,对应 Exif 中的 6; + * - 'right-mirrored': 同 right,但镜像翻转,对应 Exif 中的 7; + * - 'left': 逆时针旋转90度,对应 Exif 中的 8; */ + orientation: + | 'up' + | 'up-mirrored' + | 'down' + | 'down-mirrored' + | 'left-mirrored' + | 'right' + | 'right-mirrored' + | 'left' + /** 图片的本地路径 */ + path: string + /** 需要基础库: `1.9.90` + * + * 图片格式 + * + * 可选值: + * - 'unknown': 未知格式; + * - 'jpeg': jpeg压缩格式; + * - 'png': png压缩格式; + * - 'gif': gif压缩格式; + * - 'tiff': tiff压缩格式; */ + type: 'unknown' | 'jpeg' | 'png' | 'gif' | 'tiff' + /** 图片原始宽度,单位px。不考虑旋转。 */ + width: number + errMsg: string + } + interface GetLatestUserKeyOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: GetLatestUserKeyCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: GetLatestUserKeyFailCallback + /** 接口调用成功的回调函数 */ + success?: GetLatestUserKeySuccessCallback + } + interface GetLatestUserKeySuccessCallbackResult { + /** 用户加密密钥 */ + encryptKey: string + /** 密钥过期时间 */ + expireTime: number + /** 密钥初始向量 */ + iv: string + /** 密钥版本 */ + version: number + errMsg: string + } + interface GetLocalIPAddressOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: GetLocalIPAddressCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: GetLocalIPAddressFailCallback + /** 接口调用成功的回调函数 */ + success?: GetLocalIPAddressSuccessCallback + } + interface GetLocalIPAddressSuccessCallbackResult { + /** 错误信息 */ + errMsg: string + /** 本机局域网IP地址 */ + localip: string + /** 本机局域网子网掩码,基础库 2.24.0 开始支持 */ + netmask: string + } + interface GetLocationOption { + /** 需要基础库: `1.6.0` + * + * 传入 true 会返回高度信息,由于获取高度需要较高精确度,会减慢接口返回速度 */ + altitude?: boolean + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: GetLocationCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: GetLocationFailCallback + /** 需要基础库: `2.9.0` + * + * 高精度定位超时时间(ms),指定时间内返回最高精度,该值3000ms以上高精度定位才有效果 */ + highAccuracyExpireTime?: number + /** 需要基础库: `2.9.0` + * + * 开启高精度定位 */ + isHighAccuracy?: boolean + /** 接口调用成功的回调函数 */ + success?: GetLocationSuccessCallback + /** wgs84 返回 gps 坐标,gcj02 返回可用于 wx.openLocation 的坐标 */ + type?: string + } + interface GetLocationSuccessCallbackResult { + /** 位置的精确度,反应与真实位置之间的接近程度,可以理解成10即与真实位置相差10m,越小越精确 */ + accuracy: number + /** 需要基础库: `1.2.0` + * + * 高度,单位 m */ + altitude: number + /** 需要基础库: `1.2.0` + * + * 水平精度,单位 m */ + horizontalAccuracy: number + /** 纬度,范围为 -90~90,负数表示南纬 */ + latitude: number + /** 经度,范围为 -180~180,负数表示西经 */ + longitude: number + /** 速度,单位 m/s */ + speed: number + /** 需要基础库: `1.2.0` + * + * 垂直精度,单位 m(Android 无法获取,返回 0) */ + verticalAccuracy: number + errMsg: string + } + interface GetLogManagerOption { + /** 需要基础库: `2.3.2` + * + * 取值为0/1,取值为0表示会把 `App`、`Page` 的生命周期函数和 `wx` 命名空间下的函数调用写入日志,取值为1则不会。默认值是 0 */ + level?: number + } + interface GetMaxTransceiveLengthOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: GetMaxTransceiveLengthCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: GetMaxTransceiveLengthFailCallback + /** 接口调用成功的回调函数 */ + success?: GetMaxTransceiveLengthSuccessCallback + } + interface GetMaxTransceiveLengthSuccessCallbackResult { + /** 最大传输长度 */ + length: number + errMsg: string + } + interface GetNetworkTypeOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: GetNetworkTypeCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: GetNetworkTypeFailCallback + /** 接口调用成功的回调函数 */ + success?: GetNetworkTypeSuccessCallback + } + interface GetNetworkTypeSuccessCallbackResult { + /** 需要基础库: `2.22.1` + * + * 设备是否使用了网络代理 */ + hasSystemProxy: boolean + /** 网络类型 + * + * 可选值: + * - 'wifi': wifi 网络; + * - '2g': 2g 网络; + * - '3g': 3g 网络; + * - '4g': 4g 网络; + * - '5g': 5g 网络; + * - 'unknown': Android 下不常见的网络类型; + * - 'none': 无网络; */ + networkType: 'wifi' | '2g' | '3g' | '4g' | '5g' | 'unknown' | 'none' + /** 信号强弱,单位 dbm */ + signalStrength: number + errMsg: string + } + interface GetRandomValuesOption { + /** 整数,生成随机数的字节数,最大 1048576 */ + length: number + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: GetRandomValuesCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: GetRandomValuesFailCallback + /** 接口调用成功的回调函数 */ + success?: GetRandomValuesSuccessCallback + } + interface GetRandomValuesSuccessCallbackResult { + /** 随机数内容,长度为传入的字节数 */ + randomValues: ArrayBuffer + errMsg: string + } + interface GetRegionOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: GetRegionCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: GetRegionFailCallback + /** 接口调用成功的回调函数 */ + success?: GetRegionSuccessCallback + } + interface GetRegionSuccessCallbackResult { + /** 东北角经纬度 */ + northeast: MapPostion + /** 西南角经纬度 */ + southwest: MapPostion + errMsg: string + } + interface GetRotateOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: GetRotateCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: GetRotateFailCallback + /** 接口调用成功的回调函数 */ + success?: GetRotateSuccessCallback + } + interface GetRotateSuccessCallbackResult { + /** 旋转角 */ + rotate: number + errMsg: string + } + interface GetSakOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: GetSakCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: GetSakFailCallback + /** 接口调用成功的回调函数 */ + success?: GetSakSuccessCallback + } + interface GetSakSuccessCallbackResult { + /** 返回 SAK/SEL_RES 数据 */ + sak: number + errMsg: string + } + interface GetSavedFileInfoOption { + /** 文件路径 (本地路径) */ + filePath: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: GetSavedFileInfoCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: GetSavedFileInfoFailCallback + /** 接口调用成功的回调函数 */ + success?: GetSavedFileInfoSuccessCallback + } + interface GetSavedFileInfoSuccessCallbackResult { + /** 文件保存时的时间戳,从1970/01/01 08:00:00 到该时刻的秒数 */ + createTime: number + /** 文件大小,单位 B */ + size: number + errMsg: string + } + interface GetScaleOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: GetScaleCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: GetScaleFailCallback + /** 接口调用成功的回调函数 */ + success?: GetScaleSuccessCallback + } + interface GetScaleSuccessCallbackResult { + /** 缩放值 */ + scale: number + errMsg: string + } + interface GetScreenBrightnessOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: GetScreenBrightnessCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: GetScreenBrightnessFailCallback + /** 接口调用成功的回调函数 */ + success?: GetScreenBrightnessSuccessCallback + } + interface GetScreenBrightnessSuccessCallbackOption { + /** 屏幕亮度值,范围 0 ~ 1,0 最暗,1 最亮 */ + value: number + } + interface GetScreenRecordingStateOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: GetScreenRecordingStateCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: GetScreenRecordingStateFailCallback + /** 接口调用成功的回调函数 */ + success?: GetScreenRecordingStateSuccessCallback + } + interface GetScreenRecordingStateSuccessCallbackResult { + /** 录屏状态 + * + * 可选值: + * - 'on': 开启; + * - 'off': 关闭; */ + state: 'on' | 'off' + errMsg: string + } + interface GetSelectedTextRangeOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: GetSelectedTextRangeCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: GetSelectedTextRangeFailCallback + /** 接口调用成功的回调函数 */ + success?: GetSelectedTextRangeSuccessCallback + } + interface GetSelectedTextRangeSuccessCallbackResult { + /** 输入框光标结束位置 */ + end: number + /** 输入框光标起始位置 */ + start: number + errMsg: string + } + interface GetSelectionTextOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: GetSelectionTextCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: GetSelectionTextFailCallback + /** 接口调用成功的回调函数 */ + success?: GetSelectionTextSuccessCallback + } + interface GetSelectionTextSuccessCallbackResult { + /** 纯文本内容 */ + text: string + errMsg: string + } + interface GetSettingOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: GetSettingCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: GetSettingFailCallback + /** 接口调用成功的回调函数 */ + success?: GetSettingSuccessCallback + /** 需要基础库: `2.10.1` + * + * 是否同时获取用户订阅消息的订阅状态,默认不获取。注意:withSubscriptions 只返回用户勾选过订阅面板中的“总是保持以上选择,不再询问”的订阅消息。 */ + withSubscriptions?: boolean + } + interface GetSettingSuccessCallbackResult { + /** [AuthSetting](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/setting/AuthSetting.html) + * + * 用户授权结果 */ + authSetting: AuthSetting + /** [SubscriptionsSetting](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/setting/SubscriptionsSetting.html) + * + * 需要基础库: `2.10.1` + * + * 用户订阅消息设置,接口参数`withSubscriptions`值为`true`时才会返回。 */ + subscriptionsSetting: SubscriptionsSetting + /** [AuthSetting](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/setting/AuthSetting.html) + * + * 在插件中调用时,当前宿主小程序的用户授权结果 */ + miniprogramAuthSetting?: AuthSetting + errMsg: string + } + interface GetShareInfoOption { + /** shareTicket */ + shareTicket: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: GetShareInfoCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: GetShareInfoFailCallback + /** 接口调用成功的回调函数 */ + success?: GetShareInfoSuccessCallback + /** 需要基础库: `1.9.90` + * + * 超时时间,单位 ms */ + timeout?: number + } + interface GetSkewOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: GetSkewCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: GetSkewFailCallback + /** 接口调用成功的回调函数 */ + success?: GetSkewSuccessCallback + } + interface GetSkewSuccessCallbackResult { + /** 倾斜角 */ + skew: number + errMsg: string + } + interface GetStorageInfoOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: GetStorageInfoCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: GetStorageInfoFailCallback + /** 接口调用成功的回调函数 */ + success?: GetStorageInfoSuccessCallback + } + interface GetStorageInfoSuccessCallbackOption { + /** 当前占用的空间大小, 单位 KB */ + currentSize: number + /** 当前 storage 中所有的 key */ + keys: string[] + /** 限制的空间大小,单位 KB */ + limitSize: number + } + interface GetStorageInfoSyncOption { + /** 当前占用的空间大小, 单位 KB */ + currentSize: number + /** 当前 storage 中所有的 key */ + keys: string[] + /** 限制的空间大小,单位 KB */ + limitSize: number + } + interface GetStorageOption { + /** 本地缓存中指定的 key */ + key: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: GetStorageCompleteCallback + /** 需要基础库: `2.21.3` + * + * 是否开启加密存储。只有异步的 getStorage 接口支持开启加密存储。开启后,将会对 data 使用 AES128 解密,接口回调耗时将会增加。若开启加密存储,setStorage 和 getStorage 需要同时声明 encrypt 的值为 true */ + encrypt?: boolean + /** 接口调用失败的回调函数 */ + fail?: GetStorageFailCallback + /** 接口调用成功的回调函数 */ + success?: GetStorageSuccessCallback + } + interface GetStorageSuccessCallbackResult { + /** key对应的内容 */ + data: T + errMsg: string + } + interface GetSystemInfoAsyncOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: GetSystemInfoAsyncCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: GetSystemInfoAsyncFailCallback + /** 接口调用成功的回调函数 */ + success?: GetSystemInfoAsyncSuccessCallback + } + interface GetSystemInfoOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: GetSystemInfoCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: GetSystemInfoFailCallback + /** 接口调用成功的回调函数 */ + success?: GetSystemInfoSuccessCallback + } + interface GetUserInfoOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: GetUserInfoCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: GetUserInfoFailCallback + /** 显示用户信息的语言 + * + * 可选值: + * - 'en': 英文; + * - 'zh_CN': 简体中文; + * - 'zh_TW': 繁体中文; */ + lang?: 'en' | 'zh_CN' | 'zh_TW' + /** 接口调用成功的回调函数 */ + success?: GetUserInfoSuccessCallback + /** 是否带上登录态信息。当 withCredentials 为 true 时,要求此前有调用过 wx.login 且登录态尚未过期,此时返回的数据会包含 encryptedData, iv 等敏感信息;当 withCredentials 为 false 时,不要求有登录态,返回的数据不包含 encryptedData, iv 等敏感信息。 */ + withCredentials?: boolean + } + interface GetUserInfoSuccessCallbackResult { + /** 需要基础库: `2.7.0` + * + * 敏感数据对应的云 ID,开通[云开发](https://developers.weixin.qq.com/miniprogram/dev/wxcloud/basis/getting-started.html)的小程序才会返回,可通过云调用直接获取开放数据,详细见[云调用直接获取开放数据](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html#method-cloud) */ + cloudID: string + /** 包括敏感数据在内的完整用户信息的加密数据,详见 [用户数据的签名验证和加解密](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html#加密数据解密算法) */ + encryptedData: string + /** 加密算法的初始向量,详见 [用户数据的签名验证和加解密](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html#加密数据解密算法) */ + iv: string + /** 不包括敏感信息的原始数据字符串,用于计算签名 */ + rawData: string + /** 使用 sha1( rawData + sessionkey ) 得到字符串,用于校验用户信息,详见 [用户数据的签名验证和加解密](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html) */ + signature: string + /** [UserInfo](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/user-info/UserInfo.html) + * + * 用户信息对象,不包含 openid 等敏感信息 */ + userInfo: UserInfo + errMsg: string + } + interface GetUserProfileOption { + /** 声明获取用户个人信息后的用途,不超过30个字符 */ + desc: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: GetUserProfileCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: GetUserProfileFailCallback + /** 显示用户信息的语言 + * + * 可选值: + * - 'en': 英文; + * - 'zh_CN': 简体中文; + * - 'zh_TW': 繁体中文; */ + lang?: 'en' | 'zh_CN' | 'zh_TW' + /** 接口调用成功的回调函数 */ + success?: GetUserProfileSuccessCallback + } + interface GetUserProfileSuccessCallbackResult { + /** 需要基础库: `2.10.4` + * + * 敏感数据对应的云 ID,开通[云开发](https://developers.weixin.qq.com/miniprogram/dev/wxcloud/basis/getting-started.html)的小程序才会返回,可通过云调用直接获取开放数据,详细见[云调用直接获取开放数据](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html#method-cloud) */ + cloudID: string + /** 需要基础库: `2.10.4` + * + * 包括敏感数据在内的完整用户信息的加密数据,详见 [用户数据的签名验证和加解密](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html#加密数据解密算法) */ + encryptedData: string + /** 需要基础库: `2.10.4` + * + * 加密算法的初始向量,详见 [用户数据的签名验证和加解密](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html#加密数据解密算法) */ + iv: string + /** 需要基础库: `2.10.4` + * + * 不包括敏感信息的原始数据字符串,用于计算签名 */ + rawData: string + /** 需要基础库: `2.10.4` + * + * 使用 sha1( rawData + sessionkey ) 得到字符串,用于校验用户信息,详见 [用户数据的签名验证和加解密](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html) */ + signature: string + /** [UserInfo](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/user-info/UserInfo.html) + * + * 需要基础库: `2.10.4` + * + * 用户信息对象 */ + userInfo: UserInfo + errMsg: string + } + interface GetVideoInfoOption { + /** 视频文件路径,可以是临时文件路径也可以是永久文件路径 */ + src: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: GetVideoInfoCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: GetVideoInfoFailCallback + /** 接口调用成功的回调函数 */ + success?: GetVideoInfoSuccessCallback + } + interface GetVideoInfoSuccessCallbackResult { + /** 视频码率,单位 kbps */ + bitrate: number + /** 视频长度 */ + duration: number + /** 视频帧率 */ + fps: number + /** 视频的长,单位 px */ + height: number + /** 画面方向 + * + * 可选值: + * - 'up': 默认; + * - 'down': 180度旋转; + * - 'left': 逆时针旋转90度; + * - 'right': 顺时针旋转90度; + * - 'up-mirrored': 同up,但水平翻转; + * - 'down-mirrored': 同down,但水平翻转; + * - 'left-mirrored': 同left,但垂直翻转; + * - 'right-mirrored': 同right,但垂直翻转; */ + orientation: + | 'up' + | 'down' + | 'left' + | 'right' + | 'up-mirrored' + | 'down-mirrored' + | 'left-mirrored' + | 'right-mirrored' + /** 视频大小,单位 kB */ + size: number + /** 视频格式 */ + type: string + /** 视频的宽,单位 px */ + width: number + errMsg: string + } + interface GetWeRunDataOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: GetWeRunDataCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: GetWeRunDataFailCallback + /** 接口调用成功的回调函数 */ + success?: GetWeRunDataSuccessCallback + } + interface GetWeRunDataSuccessCallbackResult { + /** 需要基础库: `2.7.0` + * + * 敏感数据对应的云 ID,开通云开发的小程序才会返回,可通过云调用直接获取开放数据,详细见[云调用直接获取开放数据](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html#method-cloud) */ + cloudID: string + /** 包括敏感数据在内的完整用户信息的加密数据,详细见[加密数据解密算法](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html)。解密后得到的数据结构见后文 */ + encryptedData: string + /** 加密算法的初始向量,详细见[加密数据解密算法](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html) */ + iv: string + errMsg: string + } + interface GetWifiListOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: GetWifiListCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: GetWifiListFailCallback + /** 接口调用成功的回调函数 */ + success?: GetWifiListSuccessCallback + } + interface HideHomeButtonOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: HideHomeButtonCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: HideHomeButtonFailCallback + /** 接口调用成功的回调函数 */ + success?: HideHomeButtonSuccessCallback + } + interface HideKeyboardOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: HideKeyboardCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: HideKeyboardFailCallback + /** 接口调用成功的回调函数 */ + success?: HideKeyboardSuccessCallback + } + interface HideLoadingOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: HideLoadingCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: HideLoadingFailCallback + /** 需要基础库: `2.22.1` + * + * 目前 toast 和 loading 相关接口可以相互混用,此参数可用于取消混用特性 */ + noConflict?: boolean + /** 接口调用成功的回调函数 */ + success?: HideLoadingSuccessCallback + } + interface HideNavigationBarLoadingOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: HideNavigationBarLoadingCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: HideNavigationBarLoadingFailCallback + /** 接口调用成功的回调函数 */ + success?: HideNavigationBarLoadingSuccessCallback + } + interface HideShareMenuOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: HideShareMenuCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: HideShareMenuFailCallback + /** 需要基础库: `2.11.3` + * + * 本接口为 Beta 版本,暂只在 Android 平台支持。需要隐藏的转发按钮名称列表,默认['shareAppMessage', 'shareTimeline']。按钮名称合法值包含 "shareAppMessage"、"shareTimeline" 两种 */ + menus?: string[] + /** 接口调用成功的回调函数 */ + success?: HideShareMenuSuccessCallback + } + interface HideTabBarOption { + /** 是否需要动画效果 */ + animation?: boolean + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: HideTabBarCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: HideTabBarFailCallback + /** 接口调用成功的回调函数 */ + success?: HideTabBarSuccessCallback + } + interface HideTabBarRedDotOption { + /** tabBar 的哪一项,从左边算起 */ + index: number + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: HideTabBarRedDotCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: HideTabBarRedDotFailCallback + /** 接口调用成功的回调函数 */ + success?: HideTabBarRedDotSuccessCallback + } + interface HideToastOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: HideToastCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: HideToastFailCallback + /** 需要基础库: `2.22.1` + * + * 目前 toast 和 loading 相关接口可以相互混用,此参数可用于取消混用特性 */ + noConflict?: number + /** 接口调用成功的回调函数 */ + success?: HideToastSuccessCallback + } + /** 检测结果 */ + interface HitTestRes { + /** 包含位置、旋转、放缩信息的矩阵,以列为主序 */ + transform: Float32Array + } + /** 需要基础库: `2.7.0` + * + * 图片对象 */ + interface Image { + /** 图片的真实高度 */ + height: number + /** 图片加载发生错误后触发的回调函数 */ + onerror: (...args: any[]) => any + /** 图片加载完成后触发的回调函数 */ + onload: (...args: any[]) => any + /** 需要基础库: `2.13.0` + * + * `origin`: 发送完整的referrer; `no-referrer`: 不发送。格式固定为 `https://servicewechat.com/{appid}/{version}/page-frame.html`,其中 {appid} 为小程序的 appid,{version} 为小程序的版本号,版本号为 0 表示为开发版、体验版以及审核版本,版本号为 devtools 表示为开发者工具,其余为正式版本; */ + referrerPolicy: string + /** 图片的 URL。v2.11.0 起支持传递 base64 Data URI */ + src: string + /** 图片的真实宽度 */ + width: number + } + /** 需要基础库: `2.9.0` + * + * ImageData 对象 */ + interface ImageData { + /** 一维数组,包含以 RGBA 顺序的数据,数据使用 0 至 255(包含)的整数表示 */ + data: Uint8ClampedArray + /** 使用像素描述 ImageData 的实际高度 */ + height: number + /** 使用像素描述 ImageData 的实际宽度 */ + width: number + } + /** 需要基础库: `1.2.0` + * + * 图片的本地临时文件列表 */ + interface ImageFile { + /** 本地临时文件路径 (本地路径) */ + path: string + /** 本地临时文件大小,单位 B */ + size: number + } + interface IncludePointsOption { + /** 要显示在可视区域内的坐标点列表 */ + points: MapPostion[] + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: IncludePointsCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: IncludePointsFailCallback + /** 坐标点形成的矩形边缘到地图边缘的距离,单位像素。格式为[上,右,下,左],安卓上只能识别数组第一项,上下左右的padding一致。开发者工具暂不支持padding参数。 */ + padding?: number[] + /** 接口调用成功的回调函数 */ + success?: IncludePointsSuccessCallback + } + interface InitFaceDetectOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: InitFaceDetectCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: InitFaceDetectFailCallback + /** 接口调用成功的回调函数 */ + success?: InitFaceDetectSuccessCallback + } + interface InitMarkerClusterOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: InitMarkerClusterCompleteCallback + /** 启用默认的聚合样式 */ + enableDefaultStyle?: boolean + /** 接口调用失败的回调函数 */ + fail?: InitMarkerClusterFailCallback + /** 聚合算法的可聚合距离,即距离小于该值的点会聚合至一起,以像素为单位 */ + gridSize?: boolean + /** 接口调用成功的回调函数 */ + success?: InitMarkerClusterSuccessCallback + /** 点击已经聚合的标记点时是否实现聚合分离 */ + zoomOnClick?: boolean + } + /** InnerAudioContext 实例,可通过 [wx.createInnerAudioContext](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/wx.createInnerAudioContext.html) 接口获取实例。注意,音频播放过程中,可能被系统中断,可通过 [wx.onAudioInterruptionBegin](https://developers.weixin.qq.com/miniprogram/dev/api/base/app/app-event/wx.onAudioInterruptionBegin.html)、[wx.onAudioInterruptionEnd](https://developers.weixin.qq.com/miniprogram/dev/api/base/app/app-event/wx.onAudioInterruptionEnd.html)事件来处理这种情况。 +* +* **支持格式** +* +* | 格式 | iOS | Android | +* | ---- | ---- | ------- | +* | flac | x | √ | +* | m4a | √ | √ | +* | ogg | x | √ | +* | ape | x | √ | +* | amr | x | √ | +* | wma | x | √ | +* | wav | √ | √ | +* | mp3 | √ | √ | +* | mp4 | x | √ | +* | aac | √ | √ | +* | aiff | √ | x | +* | caf | √ | x | +* +* **示例代码** +* +* ```js +const innerAudioContext = wx.createInnerAudioContext() +innerAudioContext.autoplay = true +innerAudioContext.src = 'http://ws.stream.qqmusic.qq.com/M500001VfvsJ21xFqb.mp3?guid=ffffffff82def4af4b12b3cd9337d5e7&uin=346897220&vkey=6292F51E1E384E061FF02C31F716658E5C81F5594D561F2E88B854E81CAAB7806D5E4F103E55D33C16F3FAC506D1AB172DE8600B37E43FAD&fromtag=46' +innerAudioContext.onPlay(() => { + console.log('开始播放') +}) +innerAudioContext.onError((res) => { + console.log(res.errMsg) + console.log(res.errCode) +}) +``` */ + interface InnerAudioContext { + /** 是否自动开始播放,默认为 `false` */ + autoplay: boolean + /** 音频缓冲的时间点,仅保证当前播放时间点到此时间点内容已缓冲(只读) */ + buffered: number + /** 当前音频的播放位置(单位 s)。只有在当前有合法的 src 时返回,时间保留小数点后 6 位(只读) */ + currentTime: number + /** 当前音频的长度(单位 s)。只有在当前有合法的 src 时返回(只读) */ + duration: number + /** 是否循环播放,默认为 `false` */ + loop: boolean + /** 是否遵循系统静音开关,默认为 `true`。当此参数为 `false` 时,即使用户打开了静音开关,也能继续发出声音。从 2.3.0 版本开始此参数不生效,使用 [wx.setInnerAudioOption](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/wx.setInnerAudioOption.html) 接口统一设置。 */ + obeyMuteSwitch: boolean + /** 当前是是否暂停或停止状态(只读) */ + paused: boolean + /** 需要基础库: `2.11.0` + * + * 播放速度。范围 0.5-2.0,默认为 1。(Android 需要 6 及以上版本) */ + playbackRate: number + /** 需要基础库: `2.13.0` + * + * `origin`: 发送完整的referrer; `no-referrer`: 不发送。格式固定为 `https://servicewechat.com/{appid}/{version}/page-frame.html`,其中 {appid} 为小程序的 appid,{version} 为小程序的版本号,版本号为 0 表示为开发版、体验版以及审核版本,版本号为 devtools 表示为开发者工具,其余为正式版本; */ + referrerPolicy: string + /** 音频资源的地址,用于直接播放。[2.2.3](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 开始支持云文件ID */ + src: string + /** 开始播放的位置(单位:s),默认为 0 */ + startTime: number + /** 需要基础库: `1.9.90` + * + * 音量。范围 0~1。默认为 1 */ + volume: number + } + interface InnerAudioContextOnErrorListenerResult { + /** 可选值: + * - 10001: 系统错误; + * - 10002: 网络错误; + * - 10003: 文件错误; + * - 10004: 格式错误; + * - -1: 未知错误; */ + errCode: 10001 | 10002 | 10003 | 10004 | -1 + errMsg: string + } + interface InsertDividerOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: InsertDividerCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: InsertDividerFailCallback + /** 接口调用成功的回调函数 */ + success?: InsertDividerSuccessCallback + } + interface InsertImageOption { + /** 图片地址,仅支持 http(s)、base64、云图片(2.8.0)、临时文件(2.8.3)。 */ + src: string + /** 图像无法显示时的替代文本 */ + alt?: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: InsertImageCompleteCallback + /** data 被序列化为 name=value;name1=value2 的格式挂在属性 data-custom 上 */ + data?: IAnyObject + /** 添加到图片 img 标签上的类名 */ + extClass?: string + /** 接口调用失败的回调函数 */ + fail?: InsertImageFailCallback + /** 图片高度 (pixels/百分比) */ + height?: string + /** 插入图片后是否自动换行,默认换行 */ + nowrap?: boolean + /** 接口调用成功的回调函数 */ + success?: InsertImageSuccessCallback + /** 图片宽度(pixels/百分比) */ + width?: string + } + interface InsertTextOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: InsertTextCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: InsertTextFailCallback + /** 接口调用成功的回调函数 */ + success?: InsertTextSuccessCallback + /** 文本内容 */ + text?: string + } + interface IntersectionObserverObserveCallbackResult { + /** 目标边界 */ + boundingClientRect: BoundingClientRectResult + /** 节点自定义数据属性 */ + dataset: Record + /** 节点 ID */ + id: string + /** 相交比例 */ + intersectionRatio: number + /** 相交区域的边界 */ + intersectionRect: IntersectionRectResult + /** 参照区域的边界 */ + relativeRect: RelativeRectResult + /** 相交检测时的时间戳 */ + time: number + } + /** 相交区域的边界 */ + interface IntersectionRectResult { + /** 下边界 */ + bottom: number + /** 高度 */ + height: number + /** 左边界 */ + left: number + /** 右边界 */ + right: number + /** 上边界 */ + top: number + /** 宽度 */ + width: number + } + interface InterstitialAdOnErrorListenerResult { + /** 错误码 + * + * 可选值: + * - 1000: 后端接口调用失败; + * - 1001: 参数错误; + * - 1002: 广告单元无效; + * - 1003: 内部错误; + * - 1004: 无合适的广告; + * - 1005: 广告组件审核中; + * - 1006: 广告组件被驳回; + * - 1007: 广告组件被封禁; + * - 1008: 广告单元已关闭; */ + errCode: 1000 | 1001 | 1002 | 1003 | 1004 | 1005 | 1006 | 1007 | 1008 + /** 错误信息 */ + errMsg: string + } + interface IsBluetoothDevicePairedOption { + /** 蓝牙设备 id */ + deviceId: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: IsBluetoothDevicePairedCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: IsBluetoothDevicePairedFailCallback + /** 接口调用成功的回调函数 */ + success?: IsBluetoothDevicePairedSuccessCallback + } + interface IsConnectedOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: IsConnectedCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: IsConnectedFailCallback + /** 接口调用成功的回调函数 */ + success?: IsConnectedSuccessCallback + } + interface Join1v1ChatOption { + /** 呼叫方信息 */ + caller: VoIP1v1ChatUser + /** 接听方信息 */ + listener: VoIP1v1ChatUser + /** 窗口背景色(音频通话背景以及小窗模式背景) + * + * 可选值: + * - 0: #262930; + * - 1: #FA5151; + * - 2: #FA9D3B; + * - 3: #3D7257; + * - 4: #1485EE; + * - 5: #6467F0; */ + backgroundType?: 0 | 1 | 2 | 3 | 4 | 5 + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: Join1v1ChatCompleteCallback + /** 不允许切换到语音通话 */ + disableSwitchVoice?: boolean + /** 接口调用失败的回调函数 */ + fail?: Join1v1ChatFailCallback + /** 小窗样式 */ + minWindowType?: number + /** 通话类型 + * + * 可选值: + * - 'voice': 语音通话; + * - 'video': 视频通话; */ + roomType?: 'voice' | 'video' + /** 接口调用成功的回调函数 */ + success?: Join1v1ChatSuccessCallback + } + interface JoinVoIPChatOption { + /** 小游戏内此房间/群聊的 ID。同一时刻传入相同 groupId 的用户会进入到同个实时语音房间。 */ + groupId: string + /** 验证所需的随机字符串 */ + nonceStr: string + /** 签名,用于验证小游戏的身份 */ + signature: string + /** 验证所需的时间戳 */ + timeStamp: number + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: JoinVoIPChatCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: JoinVoIPChatFailCallback + /** 静音设置 */ + muteConfig?: MuteConfig + /** 房间类型 + * + * 可选值: + * - 'voice': 音频房间,用于语音通话; + * - 'video': 视频房间,结合 [voip-room](https://developers.weixin.qq.com/miniprogram/dev/component/voip-room.html) 组件可显示成员画面; */ + roomType?: 'voice' | 'video' + /** 接口调用成功的回调函数 */ + success?: JoinVoIPChatSuccessCallback + } + interface JoinVoIPChatSuccessCallbackResult { + /** 错误码 */ + errCode: number + /** 调用结果 */ + errMsg: string + /** 在此通话中的成员 openId 名单 */ + openIdList: string[] + } + interface KVArray { + /** key 本地缓存中指定的 key */ + key: string + /** data 需要存储的内容。只支持原生类型、Date、及能够通过`JSON.stringify`序列化的对象。 */ + value: any + } + /** 启动参数 */ + interface LaunchOptionsApp { + /** 需要基础库: `2.20.0` + * + * API 类别 + * + * 可选值: + * - 'default': 默认类别; + * - 'nativeFunctionalized': 原生功能化,视频号直播商品、商品橱窗等场景打开的小程序; + * - 'browseOnly': 仅浏览,朋友圈快照页等场景打开的小程序; + * - 'embedded': 内嵌,通过打开半屏小程序能力打开的小程序; */ + apiCategory: + | 'default' + | 'nativeFunctionalized' + | 'browseOnly' + | 'embedded' + /** 打开的文件信息数组,只有从聊天素材场景打开(scene为1173)才会携带该参数 */ + forwardMaterials: ForwardMaterials[] + /** 启动小程序的路径 (代码包路径) */ + path: string + /** 启动小程序的 query 参数 */ + query: IAnyObject + /** 来源信息。从另一个小程序、公众号或 App 进入小程序时返回。否则返回 `{}`。(参见后文注意) */ + referrerInfo: ReferrerInfo + /** 启动小程序的[场景值](https://developers.weixin.qq.com/miniprogram/dev/framework/app-service/scene.html) */ + scene: number + /** 从微信群聊/单聊打开小程序时,chatType 表示具体微信群聊/单聊类型 + * + * 可选值: + * - 1: 微信联系人单聊; + * - 2: 企业微信联系人单聊; + * - 3: 普通微信群聊; + * - 4: 企业微信互通群聊; */ + chatType?: 1 | 2 | 3 | 4 + /** shareTicket,详见[获取更多转发信息](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/share.html) */ + shareTicket?: string + } + interface LivePlayerContextRequestFullScreenOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: RequestFullScreenCompleteCallback + /** 设置全屏时的方向 + * + * 可选值: + * - 0: 正常竖向; + * - 90: 屏幕逆时针90度; + * - -90: 屏幕顺时针90度; */ + direction?: 0 | 90 | -90 + /** 接口调用失败的回调函数 */ + fail?: RequestFullScreenFailCallback + /** 接口调用成功的回调函数 */ + success?: RequestFullScreenSuccessCallback + } + interface LivePlayerContextSnapshotOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: SnapshotCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: SnapshotFailCallback + /** 需要基础库: `2.10.0` + * + * 图片的质量,默认原图。有效值为 raw、compressed */ + quality?: string + /** 需要基础库: `2.25.0` + * + * 截取的源类型,有效值为 stream(截取视频源)、view(截取渲染后的画面) */ + sourceType?: string + /** 接口调用成功的回调函数 */ + success?: LivePlayerContextSnapshotSuccessCallback + } + interface LivePlayerContextSnapshotSuccessCallbackResult { + /** 图片的高度 */ + height: string + /** 图片文件的临时路径 (本地路径) */ + tempImagePath: string + /** 图片的宽度 */ + width: string + errMsg: string + } + interface LivePusherContextSnapshotOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: SnapshotCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: SnapshotFailCallback + /** 需要基础库: `2.10.0` + * + * 图片的质量,默认原图。有效值为 raw、compressed */ + quality?: string + /** 需要基础库: `2.25.0` + * + * 截取的源类型,有效值为 stream(截取视频源)、view(截取渲染后的画面) */ + sourceType?: string + /** 接口调用成功的回调函数 */ + success?: LivePusherContextSnapshotSuccessCallback + } + interface LivePusherContextSnapshotSuccessCallbackResult { + /** 图片的高度 */ + height: string + /** 图片文件的临时路径 */ + tempImagePath: string + /** 图片的宽度 */ + width: string + errMsg: string + } + interface LivePusherContextStartOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: StartCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: StartFailCallback + /** 接口调用成功的回调函数 */ + success?: StartSuccessCallback + } + interface LoadFontFaceCompleteCallbackResult { + /** 加载字体结果 */ + status: string + } + interface LoadFontFaceOption { + /** 定义的字体名称 */ + family: string + /** 字体资源的地址。建议格式为 TTF 和 WOFF,WOFF2 在低版本的iOS上会不兼容。 */ + source: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: LoadFontFaceCompleteCallback + /** 可选的字体描述符 */ + desc?: DescOption + /** 接口调用失败的回调函数 */ + fail?: LoadFontFaceFailCallback + /** 需要基础库: `2.10.0` + * + * 是否全局生效 */ + global?: boolean + /** 字体作用范围,可选值为 webview / native,默认 webview,设置 native 可在 Canvas 2D 下使用 */ + scopes?: any[] + /** 接口调用成功的回调函数 */ + success?: LoadFontFaceSuccessCallback + } + interface LocalInfo { + /** 接收消息的 socket 的地址 */ + address: string + /** 使用的协议族,为 IPv4 或者 IPv6 */ + family: string + /** 端口号 */ + port: number + } + interface LoginOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: LoginCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: LoginFailCallback + /** 接口调用成功的回调函数 */ + success?: LoginSuccessCallback + /** 需要基础库: `1.9.90` + * + * 超时时间,单位ms */ + timeout?: number + } + interface LoginSuccessCallbackResult { + /** 用户登录凭证(有效期五分钟)。开发者需要在开发者服务器后台调用 [auth.code2Session](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/login/auth.code2Session.html),使用 code 换取 openid、unionid、session_key 等信息 */ + code: string + errMsg: string + } + interface MakeBluetoothPairOption { + /** 蓝牙设备 id */ + deviceId: string + /** pin 码,Base64 格式。 */ + pin: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: MakeBluetoothPairCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: MakeBluetoothPairFailCallback + /** 接口调用成功的回调函数 */ + success?: MakeBluetoothPairSuccessCallback + /** 超时时间,单位 ms */ + timeout?: number + } + interface MakePhoneCallOption { + /** 需要拨打的电话号码 */ + phoneNumber: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: MakePhoneCallCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: MakePhoneCallFailCallback + /** 接口调用成功的回调函数 */ + success?: MakePhoneCallSuccessCallback + } + /** 广播的制造商信息。仅安卓支持,iOS 因系统限制无法定制。 */ + interface ManufacturerData { + /** 制造商ID,0x 开头的十六进制 */ + manufacturerId: string + /** 制造商信息 */ + manufacturerSpecificData?: ArrayBuffer + } + /** 图片覆盖的经纬度范围 */ + interface MapBounds { + /** 东北角经纬度 */ + northeast: MapPostion + /** 西南角经纬度 */ + southwest: MapPostion + } + interface MapPostion { + /** 纬度 */ + latitude: number + /** 经度 */ + longitude: number + } + /** 用来扩展(或收缩)参照节点布局区域的边界 */ + interface Margins { + /** 节点布局区域的下边界 */ + bottom?: number + /** 节点布局区域的左边界 */ + left?: number + /** 节点布局区域的右边界 */ + right?: number + /** 节点布局区域的上边界 */ + top?: number + } + /** 匹配到的缓存 */ + interface MatchCache { + /** 缓存 id */ + cacheId: string + /** 缓存创建时间 */ + createTime: number + /** 缓存内容,会带有 fromCache 标记,方便开发者区分内容是否来自缓存 */ + data: any + /** 缓存有效时间 */ + maxAge: number + /** 命中的规则 id */ + ruleId: string + } + /** MediaAudioPlayer 实例,可通过 [wx.createMediaAudioPlayer](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/wx.createMediaAudioPlayer.html) 接口获取实例。 */ + interface MediaAudioPlayer { + /** 音量。范围 0~1。默认为 1 */ + volume: number + } + /** 本地临时文件列表 */ + interface MediaFile { + /** 视频的时间长度 */ + duration: number + /** 文件类型 + * + * 可选值: + * - 'image': 图片; + * - 'video': 视频; */ + fileType: 'image' | 'video' + /** 视频的高度 */ + height: number + /** 本地临时文件大小,单位 B */ + size: number + /** 本地临时文件路径 (本地路径) */ + tempFilePath: string + /** 视频缩略图临时文件路径 */ + thumbTempFilePath: string + /** 视频的宽度 */ + width: number + } + interface MediaQueryObserverObserveCallbackResult { + /** 页面的当前状态是否满足所指定的 media query */ + matches: boolean + } + /** 需要预览的资源列表 */ + interface MediaSource { + /** 图片或视频的地址 */ + url: string + /** 视频的封面图片 */ + poster?: string + /** 资源的类型,默认为图片 + * + * 可选值: + * - 'image': 图片; + * - 'video': 视频; */ + type?: 'image' | 'video' + } + /** 需要基础库: `2.9.0` + * + * 可通过 [MediaContainer.extractDataSource](https://developers.weixin.qq.com/miniprogram/dev/api/media/video-processing/MediaContainer.extractDataSource.html) 返回。 + * + * [MediaTrack](https://developers.weixin.qq.com/miniprogram/dev/api/media/video-processing/MediaTrack.html) 音频或视频轨道,可以对轨道进行一些操作 */ + interface MediaTrack { + /** 轨道长度,只读 */ + duration: number + /** 轨道类型,只读 + * + * 可选值: + * - 'audio': 音频轨道; + * - 'video': 视频轨道; */ + kind: 'audio' | 'video' + /** 音量,音频轨道下有效,可写 */ + volume: number + } + /** 小程序帐号信息 */ + interface MiniProgram { + /** 小程序 appId */ + appId: string + /** 需要基础库: `2.10.0` + * + * 小程序版本 + * + * 可选值: + * - 'develop': 开发版; + * - 'trial': 体验版; + * - 'release': 正式版; */ + envVersion: 'develop' | 'trial' | 'release' + /** 需要基础库: `2.10.2` + * + * 线上小程序版本号 */ + version: string + } + interface MkdirFailCallbackResult { + /** 错误信息 + * + * 可选值: + * - 'fail no such file or directory ${dirPath}': 上级目录不存在(该错误仅在 recursive = false 时生效); + * - 'fail permission denied, open ${dirPath}': 指定的 filePath 路径没有写权限; + * - 'fail file already exists ${dirPath}': 有同名文件或目录(该错误仅在 recursive = false 时生效); + * - 'fail sdcard not mounted': Android sdcard 挂载失败; */ + errMsg: string + } + interface MkdirOption { + /** 创建的目录路径 (本地路径) */ + dirPath: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: MkdirCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: MkdirFailCallback + /** 需要基础库: `2.3.0` + * + * 是否在递归创建该目录的上级目录后再创建该目录。如果对应的上级目录已经存在,则不创建该上级目录。如 dirPath 为 a/b/c/d 且 recursive 为 true,将创建 a 目录,再在 a 目录下创建 b 目录,以此类推直至创建 a/b/c 目录下的 d 目录。 */ + recursive?: boolean + /** 接口调用成功的回调函数 */ + success?: MkdirSuccessCallback + } + interface MoveAlongOption { + /** 平滑移动的时间 */ + duration: number + /** 指定 marker */ + markerId: number + /** 移动路径的坐标串,坐标点格式 `{longitude, latitude}` */ + path: any[] + /** 根据路径方向自动改变 marker 的旋转角度 */ + autoRotate?: boolean + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: MoveAlongCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: MoveAlongFailCallback + /** 接口调用成功的回调函数 */ + success?: MoveAlongSuccessCallback + } + interface MoveToLocationOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: MoveToLocationCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: MoveToLocationFailCallback + /** 需要基础库: `2.8.0` + * + * 纬度 */ + latitude?: number + /** 需要基础库: `2.8.0` + * + * 经度 */ + longitude?: number + /** 接口调用成功的回调函数 */ + success?: MoveToLocationSuccessCallback + } + /** 静音设置 */ + interface MuteConfig { + /** 是否静音耳机 */ + muteEarphone?: boolean + /** 是否静音麦克风 */ + muteMicrophone?: boolean + } + interface MuteOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: MuteCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: MuteFailCallback + /** 接口调用成功的回调函数 */ + success?: MuteSuccessCallback + } + /** 需要基础库: `2.11.2` */ + interface NFCAdapter { + /** 标签类型枚举 */ + tech: TechType + } + interface NavigateBackMiniProgramOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: NavigateBackMiniProgramCompleteCallback + /** 需要返回给上一个小程序的数据,上一个小程序可在 `App.onShow` 中获取到这份数据。 [详情](https://developers.weixin.qq.com/miniprogram/dev/reference/api/App.html)。 */ + extraData?: IAnyObject + /** 接口调用失败的回调函数 */ + fail?: NavigateBackMiniProgramFailCallback + /** 接口调用成功的回调函数 */ + success?: NavigateBackMiniProgramSuccessCallback + } + interface NavigateBackOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: NavigateBackCompleteCallback + /** 返回的页面数,如果 delta 大于现有页面数,则返回到首页。 */ + delta?: number + /** 接口调用失败的回调函数 */ + fail?: NavigateBackFailCallback + /** 接口调用成功的回调函数 */ + success?: NavigateBackSuccessCallback + } + interface NavigateToMiniProgramOption { + /** 要打开的小程序 appId */ + appId?: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: NavigateToMiniProgramCompleteCallback + /** 要打开的小程序版本。仅在当前小程序为开发版或体验版时此参数有效。如果当前小程序是正式版,则打开的小程序必定是正式版。 + * + * 可选值: + * - 'develop': 开发版; + * - 'trial': 体验版; + * - 'release': 正式版; */ + envVersion?: 'develop' | 'trial' | 'release' + /** 需要传递给目标小程序的数据,目标小程序可在 `App.onLaunch`,`App.onShow` 中获取到这份数据。如果跳转的是小游戏,可以在 [wx.onShow](#)、[wx.getLaunchOptionsSync](https://developers.weixin.qq.com/miniprogram/dev/api/base/app/life-cycle/wx.getLaunchOptionsSync.html) 中可以获取到这份数据数据。 */ + extraData?: IAnyObject + /** 接口调用失败的回调函数 */ + fail?: NavigateToMiniProgramFailCallback + /** 打开的页面路径,如果为空则打开首页。path 中 ? 后面的部分会成为 query,在小程序的 `App.onLaunch`、`App.onShow` 和 `Page.onLoad` 的回调函数或小游戏的 [wx.onShow](#) 回调函数、[wx.getLaunchOptionsSync](https://developers.weixin.qq.com/miniprogram/dev/api/base/app/life-cycle/wx.getLaunchOptionsSync.html) 中可以获取到 query 数据。对于小游戏,可以只传入 query 部分,来实现传参效果,如:传入 "?foo=bar"。 */ + path?: string + /** 需要基础库: `2.18.1` + * + * 小程序链接,当传递该参数后,可以不传 appId 和 path。链接可以通过【小程序菜单】->【复制链接】获取。 */ + shortLink?: string + /** 接口调用成功的回调函数 */ + success?: NavigateToMiniProgramSuccessCallback + } + interface NavigateToOption { + /** 需要跳转的应用内非 tabBar 的页面的路径 (代码包路径), 路径后可以带参数。参数与路径之间使用 `?` 分隔,参数键与参数值用 `=` 相连,不同参数用 `&` 分隔;如 'path?key=value&key2=value2' */ + url: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: NavigateToCompleteCallback + /** 页面间通信接口,用于监听被打开页面发送到当前页面的数据。基础库 2.7.3 开始支持。 */ + events?: IAnyObject + /** 接口调用失败的回调函数 */ + fail?: NavigateToFailCallback + /** 接口调用成功的回调函数 */ + success?: NavigateToSuccessCallback + } + interface NavigateToSuccessCallbackResult { + /** [EventChannel](https://developers.weixin.qq.com/miniprogram/dev/api/route/EventChannel.html) + * + * 和被打开页面进行通信 */ + eventChannel: EventChannel + errMsg: string + } + interface NdefCloseOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: NdefCloseCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: NdefCloseFailCallback + /** 接口调用成功的回调函数 */ + success?: NdefCloseSuccessCallback + } + interface NdefConnectOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: ConnectCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: ConnectFailCallback + /** 接口调用成功的回调函数 */ + success?: ConnectSuccessCallback + } + interface NodeCallbackResult { + /** 节点对应的 Node 实例 */ + node: IAnyObject + } + interface NotifyBLECharacteristicValueChangeOption { + /** 蓝牙特征的 UUID */ + characteristicId: string + /** 蓝牙设备 id */ + deviceId: string + /** 蓝牙特征对应服务的 UUID */ + serviceId: string + /** 是否启用 notify */ + state: boolean + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: NotifyBLECharacteristicValueChangeCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: NotifyBLECharacteristicValueChangeFailCallback + /** 接口调用成功的回调函数 */ + success?: NotifyBLECharacteristicValueChangeSuccessCallback + /** 需要基础库: `2.4.0` + * + * 设置特征订阅类型,有效值有 `notification` 和 `indication` */ + type?: string + } + /** media query 描述符 */ + interface ObserveDescriptor { + /** 页面高度( px 为单位) */ + height: number + /** 页面最大高度( px 为单位) */ + maxHeight: number + /** 页面最大宽度( px 为单位) */ + maxWidth: number + /** 页面最小高度( px 为单位) */ + minHeight: number + /** 页面最小宽度( px 为单位) */ + minWidth: number + /** 屏幕方向( `landscape` 或 `portrait` ) */ + orientation: string + /** 页面宽度( px 为单位) */ + width: number + } + /** 设置 type 监听单个类型的指标,设置 entryTypes 监听多个类型指标。 */ + interface ObserveOption { + /** 指标类型列表。不能和 type 同时使用。 */ + entryTypes?: string[] + /** 指标类型。不能和 entryTypes 同时使用 + * + * 可选值: + * - 'navigation': 路由; + * - 'render': 渲染; + * - 'script': 脚本; */ + type?: 'navigation' | 'render' | 'script' + } + /** 需要基础库: `2.7.0` + * + * 离屏 canvas 实例,可通过 [wx.createOffscreenCanvas](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/wx.createOffscreenCanvas.html) 创建。 */ + interface OffscreenCanvas { + /** 画布高度 */ + height: number + /** 画布宽度 */ + width: number + } + interface OnAccelerometerChangeListenerResult { + /** X 轴 */ + x: number + /** Y 轴 */ + y: number + /** Z 轴 */ + z: number + } + interface OnBLECharacteristicValueChangeListenerResult { + /** 蓝牙特征的 UUID */ + characteristicId: string + /** 蓝牙设备 id */ + deviceId: string + /** 蓝牙特征对应服务的 UUID */ + serviceId: string + /** 特征最新的值 */ + value: ArrayBuffer + } + interface OnBLEConnectionStateChangeListenerResult { + /** 是否处于已连接状态 */ + connected: boolean + /** 蓝牙设备 id */ + deviceId: string + } + interface OnBLEMTUChangeListenerResult { + /** 蓝牙设备 id */ + deviceId: string + /** 最大传输单元 */ + mtu: number + } + interface OnBLEPeripheralConnectionStateChangedListenerResult { + /** 连接目前状态 */ + connected: boolean + /** 连接状态变化的设备 id */ + deviceId: string + /** server 的 UUID */ + serverId: string + } + interface OnBackgroundFetchDataListenerResult { + /** 缓存数据类别,取值为 periodic 或 pre */ + fetchType: string + /** 缓存数据 */ + fetchedData: string + /** 小程序页面路径 */ + path: string + /** 传给页面的 query 参数 */ + query: string + /** 进入小程序的场景值 */ + scene: number + /** 客户端拿到缓存数据的时间戳 */ + timeStamp: number + } + interface OnBeaconServiceChangeListenerResult { + /** 服务目前是否可用 */ + available: boolean + /** 目前是否处于搜索状态 */ + discovering: boolean + } + interface OnBeaconUpdateListenerResult { + /** 当前搜寻到的所有 Beacon 设备列表 */ + beacons: BeaconInfo[] + } + interface OnBluetoothAdapterStateChangeListenerResult { + /** 蓝牙适配器是否可用 */ + available: boolean + /** 蓝牙适配器是否处于搜索状态 */ + discovering: boolean + } + interface OnBluetoothDeviceFoundListenerResult { + /** 新搜索到的设备列表 */ + devices: BlueToothDevice[] + } + interface OnCameraFrameCallbackResult { + /** 图像像素点数据,一维数组,每四项表示一个像素点的 rgba */ + data: ArrayBuffer + /** 图像数据矩形的高度 */ + height: number + /** 图像数据矩形的宽度 */ + width: number + } + interface OnCharacteristicReadRequestListenerResult { + /** 唯一标识码,调用 [writeCharacteristicValue](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-peripheral/BLEPeripheralServer.writeCharacteristicValue.html) 时使用 */ + callbackId: number + /** 蓝牙特征的 UUID */ + characteristicId: string + /** 蓝牙特征对应服务的 UUID */ + serviceId: string + } + interface OnCharacteristicSubscribedListenerResult { + /** 蓝牙特征的 UUID */ + characteristicId: string + /** 蓝牙特征对应服务的 UUID */ + serviceId: string + } + interface OnCharacteristicWriteRequestListenerResult { + /** 唯一标识码,调用 [writeCharacteristicValue](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-peripheral/BLEPeripheralServer.writeCharacteristicValue.html) 时使用 */ + callbackId: number + /** 蓝牙特征的 UUID */ + characteristicId: string + /** 蓝牙特征对应服务的 UUID */ + serviceId: string + /** 请求写入特征的二进制数据值 */ + value: ArrayBuffer + } + interface OnCheckForUpdateListenerResult { + /** 是否有新版本 */ + hasUpdate: boolean + } + interface OnChunkReceivedListenerResult { + /** 开发者服务器每次返回新chunk时的Response */ + res: Result + } + interface OnCompassChangeListenerResult { + /** 需要基础库: `2.4.0` + * + * 精度 */ + accuracy: number | string + /** 面对的方向度数 */ + direction: number + } + interface OnCopyUrlListenerResult { + /** 用短链打开小程序时当前页面携带的查询字符串。小程序中使用时,应在进入页面时调用 `wx.onCopyUrl` 自定义 `query`,退出页面时调用 `wx.offCopyUrl`,防止影响其它页面。 */ + query: string + } + interface OnDeviceMotionChangeListenerResult { + /** 当 手机坐标 X/Y 和 地球 X/Y 重合时,绕着 Z 轴转动的夹角为 alpha,范围值为 [0, 2*PI)。逆时针转动为正。 */ + alpha: number + /** 当手机坐标 Y/Z 和地球 Y/Z 重合时,绕着 X 轴转动的夹角为 beta。范围值为 [-1*PI, PI) 。顶部朝着地球表面转动为正。也有可能朝着用户为正。 */ + beta: number + /** 当手机 X/Z 和地球 X/Z 重合时,绕着 Y 轴转动的夹角为 gamma。范围值为 [-1*PI/2, PI/2)。右边朝着地球表面转动为正。 */ + gamma: number + } + interface OnDiscoveredListenerResult { + /** NdefMessage 数组,消息格式为 {id: ArrayBuffer, type: ArrayBuffer, payload: ArrayBuffer} */ + messages: any[] + /** tech 数组,用于匹配NFC卡片具体可以使用什么标准(NfcA等实例)处理 */ + techs: any[] + } + interface OnFrameRecordedListenerResult { + /** 录音分片数据 */ + frameBuffer: ArrayBuffer + /** 当前帧是否正常录音结束前的最后一帧 */ + isLastFrame: boolean + } + interface OnGetWifiListListenerResult { + /** Wi-Fi 列表数据 */ + wifiList: WifiInfo[] + } + interface OnGyroscopeChangeListenerResult { + /** x 轴的角速度 */ + x: number + /** y 轴的角速度 */ + y: number + /** z 轴的角速度 */ + z: number + } + interface OnHCEMessageListenerResult { + /** `messageType=1` 时 ,客户端接收到 NFC 设备的指令 */ + data: ArrayBuffer + /** 消息类型 + * + * 可选值: + * - 1: HCE APDU Command类型,小程序需对此指令进行处理,并调用 sendHCEMessage 接口返回处理指令; + * - 2: 设备离场事件类型; */ + messageType: 1 | 2 + /** `messageType=2` 时,原因 */ + reason: number + } + interface OnHeadersReceivedListenerResult { + /** 开发者服务器返回的 HTTP Response Header */ + header: IAnyObject + } + interface OnKeyboardHeightChangeListenerResult { + /** 键盘高度 */ + height: number + } + interface OnLazyLoadErrorListenerResult { + /** 详细信息 */ + errMsg: string + /** 异步组件所属的分包 */ + subpackage: any[] + /** 'subpackage' 失败类型 */ + type: string + } + interface OnLocalServiceFoundListenerResult { + /** 服务的 ip 地址 */ + ip: string + /** 服务的端口 */ + port: number + /** 服务的名称 */ + serviceName: string + /** 服务的类型 */ + serviceType: string + } + interface OnLocalServiceLostListenerResult { + /** 服务的名称 */ + serviceName: string + /** 服务的类型 */ + serviceType: string + } + interface OnLocationChangeErrorListenerResult { + /** 错误码 */ + errCode: number + } + interface OnLocationChangeListenerResult { + /** 位置的精确度 */ + accuracy: number + /** 需要基础库: `1.2.0` + * + * 高度,单位 m */ + altitude: number + /** 需要基础库: `1.2.0` + * + * 水平精度,单位 m */ + horizontalAccuracy: number + /** 纬度,范围为 -90~90,负数表示南纬。使用 gcj02 国测局坐标系 */ + latitude: number + /** 经度,范围为 -180~180,负数表示西经。使用 gcj02 国测局坐标系 */ + longitude: number + /** 速度,单位 m/s */ + speed: number + /** 需要基础库: `1.2.0` + * + * 垂直精度,单位 m(Android 无法获取,返回 0) */ + verticalAccuracy: number + } + interface OnMemoryWarningListenerResult { + /** 内存告警等级,只有 Android 才有,对应系统宏定义 + * + * 可选值: + * - 5: TRIM_MEMORY_RUNNING_MODERATE; + * - 10: TRIM_MEMORY_RUNNING_LOW; + * - 15: TRIM_MEMORY_RUNNING_CRITICAL; */ + level: 5 | 10 | 15 + } + interface OnNetworkStatusChangeListenerResult { + /** 当前是否有网络连接 */ + isConnected: boolean + /** 网络类型 + * + * 可选值: + * - 'wifi': wifi 网络; + * - '2g': 2g 网络; + * - '3g': 3g 网络; + * - '4g': 4g 网络; + * - '5g': 5g 网络; + * - 'unknown': Android 下不常见的网络类型; + * - 'none': 无网络; */ + networkType: 'wifi' | '2g' | '3g' | '4g' | '5g' | 'unknown' | 'none' + } + interface OnNetworkWeakChangeListenerResult { + /** 当前网络类型 */ + networkType: string + /** 当前是否处于弱网状态 */ + weakNet: boolean + } + interface OnOpenListenerResult { + /** 需要基础库: `2.0.0` + * + * 连接成功的 HTTP 响应 Header */ + header: IAnyObject + /** 需要基础库: `2.10.4` + * + * 网络请求过程中一些调试信息 */ + profile: SocketProfile + } + interface OnPageNotFoundListenerResult { + /** 是否本次启动的首个页面(例如从分享等入口进来,首个页面是开发者配置的分享页面) */ + isEntryPage: boolean + /** 不存在页面的路径 (代码包路径) */ + path: string + /** 打开不存在页面的 query 参数 */ + query: IAnyObject + } + interface OnScreenRecordingStateChangedListenerResult { + /** 录屏状态 + * + * 可选值: + * - 'start': 开始录屏; + * - 'stop': 结束录屏; */ + state: 'start' | 'stop' + } + interface OnSocketOpenListenerResult { + /** 需要基础库: `2.0.0` + * + * 连接成功的 HTTP 响应 Header */ + header: IAnyObject + } + interface OnStopListenerResult { + /** 录音总时长,单位:ms */ + duration: number + /** 录音文件大小,单位:Byte */ + fileSize: number + /** 录音文件的临时路径 (本地路径) */ + tempFilePath: string + } + interface OnThemeChangeListenerResult { + /** 系统当前的主题,取值为`light`或`dark` + * + * 可选值: + * - 'dark': 深色主题; + * - 'light': 浅色主题; */ + theme: 'dark' | 'light' + } + interface OnUnhandledRejectionListenerResult { + /** 被拒绝的 Promise 对象 */ + promise: Promise + /** 拒绝原因,一般是一个 Error 对象 */ + reason: string + } + interface OnVoIPChatInterruptedListenerResult { + /** 错误码 */ + errCode: number + /** 调用结果(错误原因) */ + errMsg: string + } + interface OnVoIPChatMembersChangedListenerResult { + /** 错误码 */ + errCode: number + /** 调用结果 */ + errMsg: string + /** 还在实时语音通话中的成员 openId 名单 */ + openIdList: string[] + } + interface OnVoIPChatSpeakersChangedListenerResult { + /** 错误码 */ + errCode: number + /** 调用结果(错误原因) */ + errMsg: string + /** 还在实时语音通话中的成员 openId 名单 */ + openIdList: string[] + } + interface OnVoIPChatStateChangedListenerResult { + /** 事件码 */ + code: number + /** 附加信息 */ + data: IAnyObject + /** 错误码 */ + errCode: number + /** 调用结果 */ + errMsg: string + } + interface OnVoIPVideoMembersChangedListenerResult { + /** 错误码 */ + errCode: number + /** 调用结果 */ + errMsg: string + /** 开启视频的成员名单 */ + openIdList: string[] + } + interface OnWifiConnectedListenerResult { + /** [WifiInfo](https://developers.weixin.qq.com/miniprogram/dev/api/device/wifi/WifiInfo.html) + * + * Wi-Fi 信息 */ + wifi: WifiInfo + } + interface OnWifiConnectedWithPartialInfoListenerResult { + /** [WifiInfo](https://developers.weixin.qq.com/miniprogram/dev/api/device/wifi/WifiInfo.html) + * + * 只包含 SSID 属性的 WifiInfo 对象 */ + wifi: WifiInfo + } + interface OnWindowResizeListenerResult { + size: Size + } + interface OpenAppAuthorizeSettingOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: OpenAppAuthorizeSettingCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: OpenAppAuthorizeSettingFailCallback + /** 接口调用成功的回调函数 */ + success?: OpenAppAuthorizeSettingSuccessCallback + } + interface OpenBluetoothAdapterOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: OpenBluetoothAdapterCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: OpenBluetoothAdapterFailCallback + /** 需要基础库: `2.10.0` + * + * 蓝牙模式,可作为主/从设备,仅 iOS 需要。 + * + * 可选值: + * - 'central': 主机模式; + * - 'peripheral': 从机(外围设备)模式; */ + mode?: 'central' | 'peripheral' + /** 接口调用成功的回调函数 */ + success?: OpenBluetoothAdapterSuccessCallback + } + interface OpenCardOption { + /** 需要打开的卡券列表 */ + cardList: OpenCardRequestInfo[] + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: OpenCardCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: OpenCardFailCallback + /** 接口调用成功的回调函数 */ + success?: OpenCardSuccessCallback + } + /** 需要打开的卡券列表 */ + interface OpenCardRequestInfo { + /** 卡券 ID */ + cardId: string + /** 由 [wx.addCard](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/card/wx.addCard.html) 的返回对象中的加密 code 通过解密后得到,解密请参照:[code 解码接口](https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1499332673_Unm7V) */ + code: string + } + interface OpenChannelsActivityOption { + /** 视频 feedId */ + feedId: string + /** 视频号 id,以“sph”开头的id,可在视频号助手获取 */ + finderUserName: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: OpenChannelsActivityCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: OpenChannelsActivityFailCallback + /** 接口调用成功的回调函数 */ + success?: OpenChannelsActivitySuccessCallback + } + interface OpenChannelsEventOption { + /** 活动 id */ + eventId: string + /** 视频号 id,以“sph”开头的id,可在视频号助手获取 */ + finderUserName: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: OpenChannelsEventCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: OpenChannelsEventFailCallback + /** 接口调用成功的回调函数 */ + success?: OpenChannelsEventSuccessCallback + } + interface OpenChannelsLiveOption { + /** 视频号 id,以“sph”开头的id,可在视频号助手获取 */ + finderUserName: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: OpenChannelsLiveCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: OpenChannelsLiveFailCallback + /** 直播 feedId,通过 getChannelsLiveInfo 接口获取(基础库 v2.19.2 之前的版本需要填写) */ + feedId?: string + /** 直播 nonceId,通过 getChannelsLiveInfo 接口获取(基础库 v2.19.2 之前的版本需要填写) */ + nonceId?: string + /** 接口调用成功的回调函数 */ + success?: OpenChannelsLiveSuccessCallback + } + interface OpenChannelsUserProfileOption { + /** 视频号 id */ + finderUserName: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: OpenChannelsUserProfileCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: OpenChannelsUserProfileFailCallback + /** 接口调用成功的回调函数 */ + success?: OpenChannelsUserProfileSuccessCallback + } + interface OpenCustomerServiceChatOption { + /** 企业ID */ + corpId: string + /** 客服信息 */ + extInfo: ExtInfoOption + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: OpenCustomerServiceChatCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: OpenCustomerServiceChatFailCallback + /** 气泡消息图片 */ + sendMessageImg?: string + /** 气泡消息小程序路径 */ + sendMessagePath?: string + /** 气泡消息标题 */ + sendMessageTitle?: string + /** 是否发送小程序气泡消息 */ + showMessageCard?: boolean + /** 接口调用成功的回调函数 */ + success?: OpenCustomerServiceChatSuccessCallback + } + interface OpenDocumentOption { + /** 文件路径 (本地路径) ,可通过 downloadFile 获得 */ + filePath: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: OpenDocumentCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: OpenDocumentFailCallback + /** 需要基础库: `1.4.0` + * + * 文件类型,指定文件类型打开文件 + * + * 可选值: + * - 'doc': doc 格式; + * - 'docx': docx 格式; + * - 'xls': xls 格式; + * - 'xlsx': xlsx 格式; + * - 'ppt': ppt 格式; + * - 'pptx': pptx 格式; + * - 'pdf': pdf 格式; */ + fileType?: 'doc' | 'docx' | 'xls' | 'xlsx' | 'ppt' | 'pptx' | 'pdf' + /** 需要基础库: `2.11.0` + * + * 是否显示右上角菜单 */ + showMenu?: boolean + /** 接口调用成功的回调函数 */ + success?: OpenDocumentSuccessCallback + } + interface OpenEmbeddedMiniProgramOption { + /** 要打开的小程序 appId */ + appId: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: OpenEmbeddedMiniProgramCompleteCallback + /** 要打开的小程序版本。仅在当前小程序为开发版或体验版时此参数有效。如果当前小程序是正式版,则打开的小程序必定是正式版。 + * + * 可选值: + * - 'develop': 开发版; + * - 'trial': 体验版; + * - 'release': 正式版; */ + envVersion?: 'develop' | 'trial' | 'release' + /** 需要传递给目标小程序的数据,目标小程序可在 `App.onLaunch`,`App.onShow` 中获取到这份数据。如果跳转的是小游戏,可以在 [wx.onShow](#)、[wx.getLaunchOptionsSync](https://developers.weixin.qq.com/miniprogram/dev/api/base/app/life-cycle/wx.getLaunchOptionsSync.html) 中可以获取到这份数据数据。 */ + extraData?: IAnyObject + /** 接口调用失败的回调函数 */ + fail?: OpenEmbeddedMiniProgramFailCallback + /** 打开的页面路径,如果为空则打开首页。path 中 ? 后面的部分会成为 query,在小程序的 `App.onLaunch`、`App.onShow` 和 `Page.onLoad` 的回调函数或小游戏的 [wx.onShow](#) 回调函数、[wx.getLaunchOptionsSync](https://developers.weixin.qq.com/miniprogram/dev/api/base/app/life-cycle/wx.getLaunchOptionsSync.html) 中可以获取到 query 数据。对于小游戏,可以只传入 query 部分,来实现传参效果,如:传入 "?foo=bar"。 */ + path?: string + /** 小程序链接,当传递该参数后,可以不传 appId 和 path。链接可以通过【小程序菜单】->【复制链接】获取。仅 verify=binding 支持。 */ + shortLink?: string + /** 接口调用成功的回调函数 */ + success?: OpenEmbeddedMiniProgramSuccessCallback + /** 需要基础库: `2.24.3` + * + * 校验方式。 + * + * 可选值: + * - 'binding': 校验小程序管理后台的绑定关系。; + * - 'unionProduct': 校验目标打开链接是否为[小程序联盟](https://developers.weixin.qq.com/doc/ministore/union/brief-introduction.html)商品。; */ + verify?: 'binding' | 'unionProduct' + } + interface OpenFailCallbackResult { + /** 错误信息 + * + * 可选值: + * - 'fail no such file or directory "${filePath}"': 上级目录不存在; */ + errMsg: string + } + interface OpenLocationOption { + /** 纬度,范围为-90~90,负数表示南纬。使用 gcj02 国测局坐标系 */ + latitude: number + /** 经度,范围为-180~180,负数表示西经。使用 gcj02 国测局坐标系 */ + longitude: number + /** 地址的详细说明 */ + address?: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: OpenLocationCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: OpenLocationFailCallback + /** 位置名 */ + name?: string + /** 缩放比例,范围5~18 */ + scale?: number + /** 接口调用成功的回调函数 */ + success?: OpenLocationSuccessCallback + } + interface OpenMapAppOption { + /** 目的地名称 */ + destination: string + /** 目的地纬度 */ + latitude: number + /** 目的地经度 */ + longitude: number + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: OpenMapAppCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: OpenMapAppFailCallback + /** 接口调用成功的回调函数 */ + success?: OpenMapAppSuccessCallback + } + interface OpenOption { + /** 文件路径 (本地路径) */ + filePath: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: OpenCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: OpenFailCallback + /** 文件系统标志,默认值: 'r' + * + * 可选值: + * - 'a': 打开文件用于追加。 如果文件不存在,则创建该文件; + * - 'ax': 类似于 'a',但如果路径存在,则失败; + * - 'a+': 打开文件用于读取和追加。 如果文件不存在,则创建该文件; + * - 'ax+': 类似于 'a+',但如果路径存在,则失败; + * - 'as': 打开文件用于追加(在同步模式中)。 如果文件不存在,则创建该文件; + * - 'as+': 打开文件用于读取和追加(在同步模式中)。 如果文件不存在,则创建该文件; + * - 'r': 打开文件用于读取。 如果文件不存在,则会发生异常; + * - 'r+': 打开文件用于读取和写入。 如果文件不存在,则会发生异常; + * - 'w': 打开文件用于写入。 如果文件不存在则创建文件,如果文件存在则截断文件; + * - 'wx': 类似于 'w',但如果路径存在,则失败; + * - 'w+': 打开文件用于读取和写入。 如果文件不存在则创建文件,如果文件存在则截断文件; + * - 'wx+': 类似于 'w+',但如果路径存在,则失败; */ + flag?: + | 'a' + | 'ax' + | 'a+' + | 'ax+' + | 'as' + | 'as+' + | 'r' + | 'r+' + | 'w' + | 'wx' + | 'w+' + | 'wx+' + /** 接口调用成功的回调函数 */ + success?: OpenSuccessCallback + } + interface OpenSettingOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: OpenSettingCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: OpenSettingFailCallback + /** 接口调用成功的回调函数 */ + success?: OpenSettingSuccessCallback + /** 需要基础库: `2.10.3` + * + * 是否同时获取用户订阅消息的订阅状态,默认不获取。注意:withSubscriptions 只返回用户勾选过订阅面板中的“总是保持以上选择,不再询问”的订阅消息。 */ + withSubscriptions?: boolean + } + interface OpenSettingSuccessCallbackResult { + /** [AuthSetting](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/setting/AuthSetting.html) + * + * 用户授权结果 */ + authSetting: AuthSetting + /** [SubscriptionsSetting](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/setting/SubscriptionsSetting.html) + * + * 需要基础库: `2.10.3` + * + * 用户订阅消息设置,接口参数`withSubscriptions`值为`true`时才会返回。 */ + subscriptionsSetting: SubscriptionsSetting + errMsg: string + } + interface OpenSuccessCallbackResult { + /** 文件描述符 */ + fd: string + errMsg: string + } + interface OpenSyncOption { + /** 文件路径 (本地路径) */ + filePath: string + /** 文件系统标志,默认值: 'r' + * + * 可选值: + * - 'a': 打开文件用于追加。 如果文件不存在,则创建该文件; + * - 'ax': 类似于 'a',但如果路径存在,则失败; + * - 'a+': 打开文件用于读取和追加。 如果文件不存在,则创建该文件; + * - 'ax+': 类似于 'a+',但如果路径存在,则失败; + * - 'as': 打开文件用于追加(在同步模式中)。 如果文件不存在,则创建该文件; + * - 'as+': 打开文件用于读取和追加(在同步模式中)。 如果文件不存在,则创建该文件; + * - 'r': 打开文件用于读取。 如果文件不存在,则会发生异常; + * - 'r+': 打开文件用于读取和写入。 如果文件不存在,则会发生异常; + * - 'w': 打开文件用于写入。 如果文件不存在则创建文件,如果文件存在则截断文件; + * - 'wx': 类似于 'w',但如果路径存在,则失败; + * - 'w+': 打开文件用于读取和写入。 如果文件不存在则创建文件,如果文件存在则截断文件; + * - 'wx+': 类似于 'w+',但如果路径存在,则失败; */ + flag?: + | 'a' + | 'ax' + | 'a+' + | 'ax+' + | 'as' + | 'as+' + | 'r' + | 'r+' + | 'w' + | 'wx' + | 'w+' + | 'wx+' + } + interface OpenSystemBluetoothSettingOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: OpenSystemBluetoothSettingCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: OpenSystemBluetoothSettingFailCallback + /** 接口调用成功的回调函数 */ + success?: OpenSystemBluetoothSettingSuccessCallback + } + interface OpenVideoEditorOption { + /** 视频源的路径,只支持本地路径 */ + filePath: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: OpenVideoEditorCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: OpenVideoEditorFailCallback + /** 接口调用成功的回调函数 */ + success?: OpenVideoEditorSuccessCallback + } + interface OpenVideoEditorSuccessCallbackResult { + /** 剪辑后生成的视频文件的时长,单位毫秒(ms) */ + duration: number + /** 剪辑后生成的视频文件大小,单位字节数(byte) */ + size: number + /** 编辑后生成的视频文件的临时路径 */ + tempFilePath: string + /** 编辑后生成的缩略图文件的临时路径 */ + tempThumbPath: string + errMsg: string + } + interface PageScrollToOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: PageScrollToCompleteCallback + /** 滚动动画的时长,单位 ms */ + duration?: number + /** 接口调用失败的回调函数 */ + fail?: PageScrollToFailCallback + /** 需要基础库: `2.23.1` + * + * 偏移距离,需要和 selector 参数搭配使用,可以滚动到 selector 加偏移距离的位置,单位 px */ + offsetTop?: number + /** 滚动到页面的目标位置,单位 px */ + scrollTop?: number + /** 需要基础库: `2.7.3` + * + * 选择器 */ + selector?: string + /** 接口调用成功的回调函数 */ + success?: PageScrollToSuccessCallback + } + /** 需要基础库: `2.11.0` + * + * Canvas 2D API 的接口 Path2D 用来声明路径,此路径稍后会被CanvasRenderingContext2D 对象使用。CanvasRenderingContext2D 接口的 路径方法 也存在于 Path2D 这个接口中,允许你在 canvas 中根据需要创建可以保留并重用的路径。 */ + interface Path2D {} + interface PauseBGMOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: PauseBGMCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: PauseBGMFailCallback + /** 接口调用成功的回调函数 */ + success?: PauseBGMSuccessCallback + } + interface PauseBackgroundAudioOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: PauseBackgroundAudioCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: PauseBackgroundAudioFailCallback + /** 接口调用成功的回调函数 */ + success?: PauseBackgroundAudioSuccessCallback + } + interface PauseOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: PauseCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: PauseFailCallback + /** 接口调用成功的回调函数 */ + success?: PauseSuccessCallback + } + interface PauseVoiceOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: PauseVoiceCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: PauseVoiceFailCallback + /** 接口调用成功的回调函数 */ + success?: PauseVoiceSuccessCallback + } + /** 单条性能数据。具体数据口径请参考[性能数据文档]((performance/perf_data##_1-4-%E9%80%9A%E8%BF%87-wx-getPerformance-%E5%9C%A8%E5%B0%8F%E7%A8%8B%E5%BA%8F%E5%86%85%E8%8E%B7%E5%8F%96)) */ + interface PerformanceEntry { + /** 需要基础库: `2.24.0` + * + * 解析域名结束时间。仅 resourceTiming 指标有效。 */ + domainLookupEnd: number + /** 需要基础库: `2.24.0` + * + * 解析域名开始时间。仅 resourceTiming 指标有效。 */ + domainLookupStart: number + /** 耗时 ms。仅对于表示阶段的指标有效。 */ + duration: number + /** 指标类型 + * + * 可选值: + * - 'navigation': 路由; + * - 'render': 渲染; + * - 'script': 脚本; */ + entryType: 'navigation' | 'render' | 'script' + /** 需要基础库: `2.21.2` + * + * 注入文件列表。仅 evaluateScript 指标有效。 */ + fileList: string[] + /** 需要基础库: `2.21.2` + * + * 首次渲染参数在渲染层收到的时间。仅 firstRender 指标有效。 */ + initDataRecvTime: number + /** 需要基础库: `2.21.2` + * + * 首次渲染参数从逻辑层发出的时间。仅 firstRender 指标有效。 */ + initDataSendTime: number + /** 需要基础库: `2.24.0` + * + * 初始化性能条目的资源类型。仅 resourceTiming 指标有效。 + * + * 可选值: + * - 'audio': 音频; + * - 'cover-image': cover-image 组件的图片; + * - 'image': 组件的图片; + * - 'open-data': 组件的图片; */ + initiatorType: 'audio' | 'cover-image' | 'image' | 'open-data' + /** 分包名,主包表示为 __APP__ (2.21.2 开始)。仅 evaluateScript 指标有效。 */ + moduleName: string + /** 指标名称 + * + * 可选值: + * - 'appLaunch': 小程序启动耗时。(entryType: navigation); + * - 'route': 路由处理耗时。(entryType: navigation); + * - 'firstRender': 页面首次渲染耗时。(entryType: render); + * - 'firstPaint': 页面首次绘制(FP)时间点,无 duration。(iOS 不支持)(entryType: render); + * - 'firstContentfulPaint': 页面首次内容绘制(FCP)时间点,无 duration。(iOS 14.5 以下版本不支持)(entryType: render); + * - 'largestContentfulPaint': 页面最大内容绘制(LCP)时间点,无 duration。(iOS 不支持)(entryType: render); + * - 'evaluateScript': 逻辑层 JS 代码注入耗时。(entryType: script); + * - 'downloadPackage': 代码包下载耗时。(entryType: loadPackage); + * - 'resourceTiming': 视图层资源加载耗时。(entryType: resource); */ + name: + | 'appLaunch' + | 'route' + | 'firstRender' + | 'firstPaint' + | 'firstContentfulPaint' + | 'largestContentfulPaint' + | 'evaluateScript' + | 'downloadPackage' + | 'resourceTiming' + /** 路由真正响应开始时间。仅 navigation 类型指标有效。 */ + navigationStart: number + /** 路由详细类型,与小程序路由方法对应。仅 navigation 类型指标有效。 */ + navigationType: string + /** 需要基础库: `2.24.0` + * + * 代码包名称。仅 downloadPackage 指标有效。 */ + packageName: string + /** 需要基础库: `2.24.0` + * + * 代码包大小。仅 downloadPackage 指标有效。 */ + packageSize: number + /** 需要基础库: `2.23.1` + * + * path 对应页面实例 Id(随机生成,不保证递增)。仅 render/navigation 指标有效。 */ + pageId: number + /** 页面路径。仅 render 和 navigation 类型指标有效。 */ + path: string + /** 需要基础库: `2.23.1` + * + * referrerPath对应页面实例 Id(随机生成,不保证递增)。仅 route 指标有效。 */ + referrerPageId: number + /** 需要基础库: `2.23.1` + * + * 页面跳转来源页面路径。仅 route 指标有效。 */ + referrerPath: number + /** 开始时间,不同指标的具体含义会有差异。 */ + startTime: number + /** 需要基础库: `2.24.0` + * + * 表示获取资源的大小(以八位字节为单位)的数字。仅 resourceTiming 指标有效。(iOS 不支持) */ + transferSize: number + /** 需要基础库: `2.24.0` + * + * 资源路径。仅 resourceTiming 指标有效。 */ + uri: string + /** 需要基础库: `2.21.2` + * + * 渲染层代码注入完成时间。仅 firstRender 指标有效。 */ + viewLayerReadyTime: number + /** 需要基础库: `2.21.2` + * + * 渲染层执行渲染结束时间。仅 firstRender 指标有效。 */ + viewLayerRenderEndTime: number + /** 需要基础库: `2.21.2` + * + * 渲染层执行渲染开始时间。仅 firstRender 指标有效。 */ + viewLayerRenderStartTime: number + } + /** 需要基础库: `2.11.0` + * + * PerformanceObserver 对象,用于监听性能相关事件 */ + interface PerformanceObserver { + /** 获取当前支持的所有性能指标类型 */ + supportedEntryTypes: any[] + } + /** 平面跟踪配置 */ + interface PlaneTrack { + /** 平面跟踪配置模式 + * + * 可选值: + * - 1: 检测横向平面; + * - 2: 检测纵向平面,只有 v2 版本支持; + * - 3: 检测横向和纵向平面,只有 v2 版本支持; */ + mode: 1 | 2 | 3 + } + interface PlayBGMOption { + /** 加入背景混音的资源地址 */ + url: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: PlayBGMCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: PlayBGMFailCallback + /** 接口调用成功的回调函数 */ + success?: PlayBGMSuccessCallback + } + interface PlayBackgroundAudioOption { + /** 音乐链接,目前支持的格式有 m4a, aac, mp3, wav */ + dataUrl: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: PlayBackgroundAudioCompleteCallback + /** 封面URL */ + coverImgUrl?: string + /** 接口调用失败的回调函数 */ + fail?: PlayBackgroundAudioFailCallback + /** 接口调用成功的回调函数 */ + success?: PlayBackgroundAudioSuccessCallback + /** 音乐标题 */ + title?: string + } + interface PlayOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: PlayCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: PlayFailCallback + /** 接口调用成功的回调函数 */ + success?: PlaySuccessCallback + } + interface PlayVoiceOption { + /** 需要播放的语音文件的文件路径 (本地路径) */ + filePath: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: PlayVoiceCompleteCallback + /** 需要基础库: `1.6.0` + * + * 指定播放时长,到达指定的播放时长后会自动停止播放,单位:秒 */ + duration?: number + /** 接口调用失败的回调函数 */ + fail?: PlayVoiceFailCallback + /** 接口调用成功的回调函数 */ + success?: PlayVoiceSuccessCallback + } + /** 插件帐号信息(仅在插件中调用时包含这一项) */ + interface Plugin { + /** 插件 appId */ + appId: string + /** 插件版本号 */ + version: string + } + interface PluginLoginOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: PluginLoginCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: PluginLoginFailCallback + /** 接口调用成功的回调函数 */ + success?: PluginLoginSuccessCallback + } + interface PluginLoginSuccessCallbackResult { + /** 用于换取 openpid 的凭证(有效期五分钟)。插件开发者可以用此 code 在开发者服务器后台调用 [auth.getPluginOpenPId](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/user-info/auth.getPluginOpenPId.html) 换取 openpid。 */ + code: string + errMsg: string + } + interface PreloadAssetsOption { + data: Asset[] + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: PreloadAssetsCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: PreloadAssetsFailCallback + /** 接口调用成功的回调函数 */ + success?: PreloadAssetsSuccessCallback + } + interface PreloadSkylineViewOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: PreloadSkylineViewCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: PreloadSkylineViewFailCallback + /** 接口调用成功的回调函数 */ + success?: PreloadSkylineViewSuccessCallback + } + interface PreloadWebviewOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: PreloadWebviewCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: PreloadWebviewFailCallback + /** 接口调用成功的回调函数 */ + success?: PreloadWebviewSuccessCallback + } + interface PreviewImageOption { + /** 需要预览的图片链接列表。[2.2.3](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起支持云文件ID。 */ + urls: string[] + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: PreviewImageCompleteCallback + /** 当前显示图片的链接 */ + current?: string + /** 接口调用失败的回调函数 */ + fail?: PreviewImageFailCallback + /** 需要基础库: `2.13.0` + * + * `origin`: 发送完整的referrer; `no-referrer`: 不发送。格式固定为 `https://servicewechat.com/{appid}/{version}/page-frame.html`,其中 {appid} 为小程序的 appid,{version} 为小程序的版本号,版本号为 0 表示为开发版、体验版以及审核版本,版本号为 devtools 表示为开发者工具,其余为正式版本; */ + referrerPolicy?: string + /** 需要基础库: `2.13.0` + * + * 是否显示长按菜单。 */ + showmenu?: boolean + /** 接口调用成功的回调函数 */ + success?: PreviewImageSuccessCallback + } + interface PreviewMediaOption { + /** 需要预览的资源列表 */ + sources: MediaSource[] + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: PreviewMediaCompleteCallback + /** 当前显示的资源序号 */ + current?: number + /** 接口调用失败的回调函数 */ + fail?: PreviewMediaFailCallback + /** 需要基础库: `2.13.0` + * + * `origin`: 发送完整的referrer; `no-referrer`: 不发送。格式固定为 `https://servicewechat.com/{appid}/{version}/page-frame.html`,其中 {appid} 为小程序的 appid,{version} 为小程序的版本号,版本号为 0 表示为开发版、体验版以及审核版本,版本号为 devtools 表示为开发者工具,其余为正式版本; */ + referrerPolicy?: string + /** 需要基础库: `2.13.0` + * + * 是否显示长按菜单。 */ + showmenu?: boolean + /** 接口调用成功的回调函数 */ + success?: PreviewMediaSuccessCallback + } + /** 推广员 */ + interface PromoterResult { + /** 推广员昵称 */ + finderNickname: string + /** 推广员 id */ + promoterId: string + /** 推广员 openid */ + promoterOpenId: string + } + interface ReLaunchOption { + /** 需要跳转的应用内页面路径 (代码包路径),路径后可以带参数。参数与路径之间使用?分隔,参数键与参数值用=相连,不同参数用&分隔;如 'path?key=value&key2=value2' */ + url: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: ReLaunchCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: ReLaunchFailCallback + /** 接口调用成功的回调函数 */ + success?: ReLaunchSuccessCallback + } + interface ReadBLECharacteristicValueOption { + /** 蓝牙特征的 UUID */ + characteristicId: string + /** 蓝牙设备 id */ + deviceId: string + /** 蓝牙特征对应服务的 UUID */ + serviceId: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: ReadBLECharacteristicValueCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: ReadBLECharacteristicValueFailCallback + /** 接口调用成功的回调函数 */ + success?: ReadBLECharacteristicValueSuccessCallback + } + interface ReadCompressedFileFailCallbackResult { + /** 错误信息 + * + * 可选值: + * - 'fail decompress fail': 指定的 compressionAlgorithm 与文件实际压缩格式不符; + * - 'fail no such file or directory, open ${filePath}': 指定的 filePath 所在目录不存在; + * - 'fail permission denied, open ${dirPath}': 指定的 filePath 路径没有读权限; */ + errMsg: string + } + interface ReadCompressedFileOption { + /** 文件压缩类型,目前仅支持 'br'。 + * + * 可选值: + * - 'br': brotli压缩文件; */ + compressionAlgorithm: 'br' + /** 要读取的文件的路径 (本地用户文件或代码包文件) */ + filePath: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: ReadCompressedFileCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: ReadCompressedFileFailCallback + /** 接口调用成功的回调函数 */ + success?: ReadCompressedFileSuccessCallback + } + interface ReadCompressedFileSuccessCallbackResult { + /** 文件内容 */ + data: ArrayBuffer + errMsg: string + } + interface ReadCompressedFileSyncOption { + /** 文件压缩类型,目前仅支持 'br'。 + * + * 可选值: + * - 'br': brotli压缩文件; */ + compressionAlgorithm: 'br' + /** 要读取的文件的路径 (本地用户文件或代码包文件) */ + filePath: string + } + interface ReadFailCallbackResult { + /** 错误信息 + * + * 可选值: + * - 'bad file descriptor': 无效的文件描述符; + * - 'fail permission denied': 指定的 fd 路径没有读权限; + * - 'fail the value of "offset" is out of range': 传入的 offset 不合法; + * - 'fail the value of "length" is out of range': 传入的 length 不合法; + * - 'fail sdcard not mounted': android sdcard 挂载失败; + * - 'bad file descriptor': 无效的文件描述符; */ + errMsg: string + } + interface ReadFileFailCallbackResult { + /** 错误信息 + * + * 可选值: + * - 'fail no such file or directory, open ${filePath}': 指定的 filePath 所在目录不存在; + * - 'fail permission denied, open ${dirPath}': 指定的 filePath 路径没有读权限; + * - 'fail sdcard not mounted': Android sdcard 挂载失败; + * - 'native buffer exceed size limit': 文件大小超出上限(100M); */ + errMsg: string + } + interface ReadFileOption { + /** 要读取的文件的路径 (本地路径) */ + filePath: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: ReadFileCompleteCallback + /** 指定读取文件的字符编码,如果不传 encoding,则以 ArrayBuffer 格式读取文件的二进制内容 + * + * 可选值: + * - 'ascii': ; + * - 'base64': ; + * - 'binary': ; + * - 'hex': ; + * - 'ucs2': 以小端序读取; + * - 'ucs-2': 以小端序读取; + * - 'utf16le': 以小端序读取; + * - 'utf-16le': 以小端序读取; + * - 'utf-8': ; + * - 'utf8': ; + * - 'latin1': ; */ + encoding?: + | 'ascii' + | 'base64' + | 'binary' + | 'hex' + | 'ucs2' + | 'ucs-2' + | 'utf16le' + | 'utf-16le' + | 'utf-8' + | 'utf8' + | 'latin1' + /** 接口调用失败的回调函数 */ + fail?: ReadFileFailCallback + /** 需要基础库: `2.10.0` + * + * 指定文件的长度,如果不指定,则读到文件末尾。有效范围:[1, fileLength]。单位:byte */ + length?: number + /** 需要基础库: `2.10.0` + * + * 从文件指定位置开始读,如果不指定,则从文件头开始读。读取的范围应该是左闭右开区间 [position, position+length)。有效范围:[0, fileLength - 1]。单位:byte */ + position?: number + /** 接口调用成功的回调函数 */ + success?: ReadFileSuccessCallback + } + interface ReadFileSuccessCallbackResult { + /** 文件内容 */ + data: string | ArrayBuffer + errMsg: string + } + interface ReadOption { + /** 数据写入的缓冲区,必须是 ArrayBuffer 实例 */ + arrayBuffer: ArrayBuffer + /** 文件描述符。fd 通过 [FileSystemManager.open](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.open.html) 或 [FileSystemManager.openSync](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.openSync.html) 接口获得 */ + fd: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: ReadCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: ReadFailCallback + /** 要从文件中读取的字节数,默认0 */ + length?: number + /** 缓冲区中的写入偏移量,默认0 */ + offset?: number + /** 文件读取的起始位置,如不传或传 null,则会从当前文件指针的位置读取。如果 position 是正整数,则文件指针位置会保持不变并从 position 读取文件。 */ + position?: number + /** 接口调用成功的回调函数 */ + success?: ReadSuccessCallback + } + /** 文件读取结果。 通过 [FileSystemManager.readSync](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.readSync.html) 接口返回 */ + interface ReadResult { + /** 被写入的缓存区的对象,即接口入参的 arrayBuffer */ + arrayBuffer: ArrayBuffer + /** 实际读取的字节数 */ + bytesRead: number + } + interface ReadSuccessCallbackResult { + /** 被写入的缓存区的对象,即接口入参的 arrayBuffer */ + arrayBuffer: ArrayBuffer + /** 实际读取的字节数 */ + bytesRead: number + errMsg: string + } + interface ReadSyncOption { + /** 数据写入的缓冲区,必须是 ArrayBuffer 实例 */ + arrayBuffer: ArrayBuffer + /** 文件描述符。fd 通过 [FileSystemManager.open](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.open.html) 或 [FileSystemManager.openSync](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.openSync.html) 接口获得 */ + fd: string + /** 要从文件中读取的字节数,默认0 */ + length?: number + /** 缓冲区中的写入偏移量,默认0 */ + offset?: number + /** 文件读取的起始位置,如不传或传 null,则会从当前文件指针的位置读取。如果 position 是正整数,则文件指针位置会保持不变并从 position 读取文件。 */ + position?: number + } + interface ReadZipEntryFailCallbackResult { + /** 错误信息 + * + * 可选值: + * - 'fail no such file or directory, open ${filePath}': 指定的 filePath 所在目录不存在; + * - 'fail permission denied, open ${dirPath}': 指定的 filePath 路径没有读权限; + * - 'fail sdcard not mounted': Android sdcard 挂载失败; */ + errMsg: string + } + interface ReadZipEntryOption { + /** 要读取的压缩包内的文件列表(当传入"all" 时表示读取压缩包内所有文件) */ + entries: EntryItem[] | 'all' + /** 要读取的压缩包的路径 (本地路径) */ + filePath: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: ReadZipEntryCompleteCallback + /** 统一指定读取文件的字符编码,只在 entries 值为"all"时有效。如果 entries 值为"all"且不传 encoding,则以 ArrayBuffer 格式读取文件的二进制内容 + * + * 可选值: + * - 'ascii': ; + * - 'base64': ; + * - 'binary': ; + * - 'hex': ; + * - 'ucs2': 以小端序读取; + * - 'ucs-2': 以小端序读取; + * - 'utf16le': 以小端序读取; + * - 'utf-16le': 以小端序读取; + * - 'utf-8': ; + * - 'utf8': ; + * - 'latin1': ; */ + encoding?: + | 'ascii' + | 'base64' + | 'binary' + | 'hex' + | 'ucs2' + | 'ucs-2' + | 'utf16le' + | 'utf-16le' + | 'utf-8' + | 'utf8' + | 'latin1' + /** 接口调用失败的回调函数 */ + fail?: ReadZipEntryFailCallback + /** 接口调用成功的回调函数 */ + success?: ReadZipEntrySuccessCallback + } + interface ReadZipEntrySuccessCallbackResult { + /** 文件读取结果。res.entries 是一个对象,key是文件路径,value是一个对象 FileItem ,表示该文件的读取结果。每个 FileItem 包含 data (文件内容) 和 errMsg (错误信息) 属性。 */ + entries: EntriesResult + errMsg: string + } + interface ReaddirFailCallbackResult { + /** 错误信息 + * + * 可选值: + * - 'fail no such file or directory ${dirPath}': 目录不存在; + * - 'fail not a directory ${dirPath}': dirPath 不是目录; + * - 'fail permission denied, open ${dirPath}': 指定的 filePath 路径没有读权限; + * - 'fail sdcard not mounted': Android sdcard 挂载失败; */ + errMsg: string + } + interface ReaddirOption { + /** 要读取的目录路径 (本地路径) */ + dirPath: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: ReaddirCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: ReaddirFailCallback + /** 接口调用成功的回调函数 */ + success?: ReaddirSuccessCallback + } + interface ReaddirSuccessCallbackResult { + /** 指定目录下的文件名数组。 */ + files: string[] + errMsg: string + } + interface RecorderManagerStartOption { + /** 需要基础库: `2.1.0` + * + * 指定录音的音频输入源,可通过 [wx.getAvailableAudioSources()](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/wx.getAvailableAudioSources.html) 获取当前可用的音频源 + * + * 可选值: + * - 'auto': 自动设置,默认使用手机麦克风,插上耳麦后自动切换使用耳机麦克风,所有平台适用; + * - 'buildInMic': 手机麦克风,仅限 iOS; + * - 'headsetMic': 有线耳机麦克风,仅限 iOS; + * - 'mic': 麦克风(没插耳麦时是手机麦克风,插耳麦时是耳机麦克风),仅限 Android; + * - 'camcorder': 同 mic,适用于录制音视频内容,仅限 Android; + * - 'voice_communication': 同 mic,适用于实时沟通,仅限 Android; + * - 'voice_recognition': 同 mic,适用于语音识别,仅限 Android; */ + audioSource?: + | 'auto' + | 'buildInMic' + | 'headsetMic' + | 'mic' + | 'camcorder' + | 'voice_communication' + | 'voice_recognition' + /** 录音的时长,单位 ms,最大值 600000(10 分钟) */ + duration?: number + /** 编码码率,有效值见下表格 */ + encodeBitRate?: number + /** 音频格式 + * + * 可选值: + * - 'mp3': mp3 格式; + * - 'aac': aac 格式; + * - 'wav': wav 格式; + * - 'PCM': pcm 格式; */ + format?: 'mp3' | 'aac' | 'wav' | 'PCM' + /** 指定帧大小,单位 KB。传入 frameSize 后,每录制指定帧大小的内容后,会回调录制的文件内容,不指定则不会回调。暂仅支持 mp3、pcm 格式。 */ + frameSize?: number + /** 录音通道数 + * + * 可选值: + * - 1: 1 个通道; + * - 2: 2 个通道; */ + numberOfChannels?: 1 | 2 + /** 采样率(pc不支持) + * + * 可选值: + * - 8000: 8000 采样率; + * - 11025: 11025 采样率; + * - 12000: 12000 采样率; + * - 16000: 16000 采样率; + * - 22050: 22050 采样率; + * - 24000: 24000 采样率; + * - 32000: 32000 采样率; + * - 44100: 44100 采样率; + * - 48000: 48000 采样率; */ + sampleRate?: + | 8000 + | 11025 + | 12000 + | 16000 + | 22050 + | 24000 + | 32000 + | 44100 + | 48000 + } + interface RedirectToOption { + /** 需要跳转的应用内非 tabBar 的页面的路径 (代码包路径), 路径后可以带参数。参数与路径之间使用 `?` 分隔,参数键与参数值用 `=` 相连,不同参数用 `&` 分隔;如 'path?key=value&key2=value2' */ + url: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: RedirectToCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: RedirectToFailCallback + /** 接口调用成功的回调函数 */ + success?: RedirectToSuccessCallback + } + interface RedoOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: RedoCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: RedoFailCallback + /** 接口调用成功的回调函数 */ + success?: RedoSuccessCallback + } + /** 来源信息。从另一个小程序、公众号或 App 进入小程序时返回。否则返回 `{}`。(参见后文注意) */ + interface ReferrerInfo { + /** 来源小程序、公众号或 App 的 appId */ + appId: string + /** 来源小程序传过来的数据,scene=1037或1038时支持 */ + extraData: IAnyObject + } + /** 参照区域的边界 */ + interface RelativeRectResult { + /** 下边界 */ + bottom: number + /** 左边界 */ + left: number + /** 右边界 */ + right: number + /** 上边界 */ + top: number + } + /** 发送端地址信息 */ + interface RemoteInfo { + /** 发送消息的 socket 的地址 */ + address: string + /** 使用的协议族,为 IPv4 或者 IPv6 */ + family: string + /** 端口号 */ + port: number + /** message 的大小,单位:字节 */ + size: number + } + interface RemoveArcOption { + /** 圆弧 id */ + id: number + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: RemoveArcCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: RemoveArcFailCallback + /** 接口调用成功的回调函数 */ + success?: RemoveArcSuccessCallback + } + interface RemoveCustomLayerOption { + /** 个性化图层id */ + layerId: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: RemoveCustomLayerCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: RemoveCustomLayerFailCallback + /** 接口调用成功的回调函数 */ + success?: RemoveCustomLayerSuccessCallback + } + interface RemoveFormatOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: RemoveFormatCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: RemoveFormatFailCallback + /** 接口调用成功的回调函数 */ + success?: RemoveFormatSuccessCallback + } + interface RemoveGroundOverlayOption { + /** 图片图层 id */ + id: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: RemoveGroundOverlayCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: RemoveGroundOverlayFailCallback + /** 接口调用成功的回调函数 */ + success?: RemoveGroundOverlaySuccessCallback + } + interface RemoveMarkersOption { + /** marker 的 id 集合。 */ + markerIds: any[] + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: RemoveMarkersCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: RemoveMarkersFailCallback + /** 接口调用成功的回调函数 */ + success?: RemoveMarkersSuccessCallback + } + interface RemoveSavedFileFailCallbackResult { + /** 错误信息 + * + * 可选值: + * - 'fail file not exist': 指定的 tempFilePath 找不到文件; */ + errMsg: string + } + interface RemoveServiceOption { + /** service 的 UUID */ + serviceId: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: RemoveServiceCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: RemoveServiceFailCallback + /** 接口调用成功的回调函数 */ + success?: RemoveServiceSuccessCallback + } + interface RemoveStorageOption { + /** 本地缓存中指定的 key */ + key: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: RemoveStorageCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: RemoveStorageFailCallback + /** 接口调用成功的回调函数 */ + success?: RemoveStorageSuccessCallback + } + interface RemoveTabBarBadgeOption { + /** tabBar 的哪一项,从左边算起 */ + index: number + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: RemoveTabBarBadgeCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: RemoveTabBarBadgeFailCallback + /** 接口调用成功的回调函数 */ + success?: RemoveTabBarBadgeSuccessCallback + } + interface RemoveVisualLayerOption { + /** 可视化图层id */ + layerId: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: RemoveVisualLayerCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: RemoveVisualLayerFailCallback + /** 接口调用成功的回调函数 */ + success?: RemoveVisualLayerSuccessCallback + } + interface RenameFailCallbackResult { + /** 错误信息 + * + * 可选值: + * - 'fail permission denied, rename ${oldPath} -> ${newPath}': 指定源文件或目标文件没有写权限; + * - 'fail no such file or directory, rename ${oldPath} -> ${newPath}': 源文件不存在,或目标文件路径的上层目录不存在; */ + errMsg: string + } + interface RenameOption { + /** 新文件路径,支持本地路径 */ + newPath: string + /** 源文件路径,支持本地路径 */ + oldPath: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: RenameCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: RenameFailCallback + /** 接口调用成功的回调函数 */ + success?: RenameSuccessCallback + } + /** Canvas 绘图上下文。 + * + * **** + * + * - 通过 Canvas.getContext('2d') 接口可以获取 CanvasRenderingContext2D 对象,实现了 [HTML Canvas 2D Context](https://www.w3.org/TR/2dcontext/) 定义的属性、方法。 + * - 通过 Canvas.getContext('webgl') 或 OffscreenCanvas.getContext('webgl') 接口可以获取 WebGLRenderingContext 对象,实现了 [WebGL 1.0](https://www.khronos.org/registry/webgl/specs/latest/1.0/) 定义的所有属性、方法、常量。 + * - CanvasRenderingContext2D 的 drawImage 方法 2.10.0 起支持传入通过 [SelectorQuery](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/SelectorQuery.html) 获取的 video 对象 + * + * **示例代码** + * + * video 画到 2D Canvas 示例 + * [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/tJTak7mU7sfX) */ + interface RenderingContext {} + interface RequestOption< + T extends string | IAnyObject | ArrayBuffer = + | string + | IAnyObject + | ArrayBuffer + > { + /** 开发者服务器接口地址 */ + url: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: RequestCompleteCallback + /** 请求的参数 */ + data?: string | IAnyObject | ArrayBuffer + /** 返回的数据格式 + * + * 可选值: + * - 'json': 返回的数据为 JSON,返回后会对返回的数据进行一次 JSON.parse; + * - '其他': 不对返回的内容进行 JSON.parse; */ + dataType?: 'json' | '其他' + /** 需要基础库: `2.10.4` + * + * 开启 cache */ + enableCache?: boolean + /** 需要基础库: `2.20.2` + * + * 开启 transfer-encoding chunked。 */ + enableChunked?: boolean + /** 需要基础库: `2.10.4` + * + * 开启 http2 */ + enableHttp2?: boolean + /** 需要基础库: `2.19.1` + * + * 是否开启 HttpDNS 服务。如开启,需要同时填入 httpDNSServiceId 。 HttpDNS 用法详见 [移动解析HttpDNS](https://developers.weixin.qq.com/miniprogram/dev/framework/ability/HTTPDNS.html) */ + enableHttpDNS?: boolean + /** 需要基础库: `2.10.4` + * + * 开启 quic */ + enableQuic?: boolean + /** 接口调用失败的回调函数 */ + fail?: RequestFailCallback + /** 需要基础库: `2.21.0` + * + * wifi下使用移动网络发送请求 */ + forceCellularNetwork?: boolean + /** 设置请求的 header,header 中不能设置 Referer。 + * + * `content-type` 默认为 `application/json` */ + header?: IAnyObject + /** 需要基础库: `2.19.1` + * + * HttpDNS 服务商 Id。 HttpDNS 用法详见 [移动解析HttpDNS](https://developers.weixin.qq.com/miniprogram/dev/framework/ability/HTTPDNS.html) */ + httpDNSServiceId?: string + /** HTTP 请求方法 + * + * 可选值: + * - 'OPTIONS': HTTP 请求 OPTIONS; + * - 'GET': HTTP 请求 GET; + * - 'HEAD': HTTP 请求 HEAD; + * - 'POST': HTTP 请求 POST; + * - 'PUT': HTTP 请求 PUT; + * - 'DELETE': HTTP 请求 DELETE; + * - 'TRACE': HTTP 请求 TRACE; + * - 'CONNECT': HTTP 请求 CONNECT; */ + method?: + | 'OPTIONS' + | 'GET' + | 'HEAD' + | 'POST' + | 'PUT' + | 'DELETE' + | 'TRACE' + | 'CONNECT' + /** 需要基础库: `1.7.0` + * + * 响应的数据类型 + * + * 可选值: + * - 'text': 响应的数据为文本; + * - 'arraybuffer': 响应的数据为 ArrayBuffer; */ + responseType?: 'text' | 'arraybuffer' + /** 接口调用成功的回调函数 */ + success?: RequestSuccessCallback + /** 需要基础库: `2.10.0` + * + * 超时时间,单位为毫秒。默认值为 60000 */ + timeout?: number + } + interface RequestOrderPaymentOption { + /** 随机字符串,长度为32个字符以下 */ + nonceStr: string + /** 统一下单接口返回的 prepay_id 参数值,提交格式如:prepay_id=*** */ + package: string + /** 签名,具体见微信支付文档 */ + paySign: string + /** 时间戳,从 1970 年 1 月 1 日 00:00:00 至今的秒数,即当前的时间 */ + timeStamp: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: RequestOrderPaymentCompleteCallback + /** 外部APP用户ID */ + extUserUin?: string + /** 接口调用失败的回调函数 */ + fail?: RequestOrderPaymentFailCallback + /** 订单信息,仅在需要校验的场景下需要传递,具体见[接口说明](https://developers.weixin.qq.com/miniprogram/dev/framework/ministore/minishopopencomponent2/API/order/requestOrderPayment) */ + orderInfo?: IAnyObject + /** 签名算法,应与后台下单时的值一致 + * + * 可选值: + * - 'MD5': 仅在 v2 版本接口适用; + * - 'HMAC-SHA256': 仅在 v2 版本接口适用; + * - 'RSA': 仅在 v3 版本接口适用; */ + signType?: 'MD5' | 'HMAC-SHA256' | 'RSA' + /** 接口调用成功的回调函数 */ + success?: RequestOrderPaymentSuccessCallback + } + interface RequestPaymentOption { + /** 随机字符串,长度为32个字符以下 */ + nonceStr: string + /** 统一下单接口返回的 prepay_id 参数值,提交格式如:prepay_id=*** */ + package: string + /** 签名,具体见微信支付文档 */ + paySign: string + /** 时间戳,从 1970 年 1 月 1 日 00:00:00 至今的秒数,即当前的时间 */ + timeStamp: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: RequestPaymentCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: RequestPaymentFailCallback + /** 签名算法,应与后台下单时的值一致 + * + * 可选值: + * - 'MD5': 仅在 v2 版本接口适用; + * - 'HMAC-SHA256': 仅在 v2 版本接口适用; + * - 'RSA': 仅在 v3 版本接口适用; */ + signType?: 'MD5' | 'HMAC-SHA256' | 'RSA' + /** 接口调用成功的回调函数 */ + success?: RequestPaymentSuccessCallback + } + interface RequestPictureInPictureOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: RequestPictureInPictureCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: RequestPictureInPictureFailCallback + /** 接口调用成功的回调函数 */ + success?: RequestPictureInPictureSuccessCallback + } + interface RequestPluginPaymentOption { + /** 需要显示在页面中的金额,单位为分 */ + fee: number + /** 任意数据,传递给功能页中的响应函数 */ + paymentArgs: IAnyObject + /** 插件版本 + * + * 可选值: + * - 'develop': 开发版; + * - 'trial': 体验版; + * - 'release': 正式版; */ + version: 'develop' | 'trial' | 'release' + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: RequestPluginPaymentCompleteCallback + /** 需要显示在页面中的货币符号的代码 */ + currencyType?: string + /** 接口调用失败的回调函数 */ + fail?: RequestPluginPaymentFailCallback + /** 接口调用成功的回调函数 */ + success?: RequestPluginPaymentSuccessCallback + } + /** 需要基础库: `2.10.4` + * + * 网络请求过程中一些调试信息,[查看详细说明](https://developers.weixin.qq.com/miniprogram/dev/framework/performance/network.html) */ + interface RequestProfile { + /** SSL建立完成的时间,如果不是安全连接,则值为 0 */ + SSLconnectionEnd: number + /** SSL建立连接的时间,如果不是安全连接,则值为 0 */ + SSLconnectionStart: number + /** HTTP(TCP) 完成建立连接的时间(完成握手),如果是持久连接,则与 fetchStart 值相等。注意如果在传输层发生了错误且重新建立连接,则这里显示的是新建立的连接完成的时间。注意这里握手结束,包括安全连接建立完成、SOCKS 授权通过 */ + connectEnd: number + /** HTTP(TCP) 开始建立连接的时间,如果是持久连接,则与 fetchStart 值相等。注意如果在传输层发生了错误且重新建立连接,则这里显示的是新建立的连接开始的时间 */ + connectStart: number + /** DNS 域名查询完成的时间,如果使用了本地缓存(即无 DNS 查询)或持久连接,则与 fetchStart 值相等 */ + domainLookupEnd: number + /** DNS 域名查询开始的时间,如果使用了本地缓存(即无 DNS 查询)或持久连接,则与 fetchStart 值相等 */ + domainLookupStart: number + /** 评估当前网络下载的kbps */ + downstreamThroughputKbpsEstimate: number + /** 评估的网络状态 unknown, offline, slow 2g, 2g, 3g, 4g, last/0, 1, 2, 3, 4, 5, 6 */ + estimate_nettype: number + /** 组件准备好使用 HTTP 请求抓取资源的时间,这发生在检查本地缓存之前 */ + fetchStart: number + /** 协议层根据多个请求评估当前网络的 rtt(仅供参考) */ + httpRttEstimate: number + /** 当前请求的IP */ + peerIP: string + /** 当前请求的端口 */ + port: number + /** 使用协议类型,有效值:http1.1, h2, quic, unknown */ + protocol: string + /** 收到字节数 */ + receivedBytedCount: number + /** 最后一个 HTTP 重定向完成时的时间。有跳转且是同域名内部的重定向才算,否则值为 0 */ + redirectEnd: number + /** 第一个 HTTP 重定向发生时的时间。有跳转且是同域名内的重定向才算,否则值为 0 */ + redirectStart: number + /** HTTP请求读取真实文档结束的时间 */ + requestEnd: number + /** HTTP请求读取真实文档开始的时间(完成建立连接),包括从本地读取缓存。连接错误重连时,这里显示的也是新建立连接的时间 */ + requestStart: number + /** HTTP 响应全部接收完成的时间(获取到最后一个字节),包括从本地读取缓存 */ + responseEnd: number + /** HTTP 开始接收响应的时间(获取到第一个字节),包括从本地读取缓存 */ + responseStart: number + /** 当次请求连接过程中实时 rtt */ + rtt: number + /** 发送的字节数 */ + sendBytesCount: number + /** 是否复用连接 */ + socketReused: boolean + /** 当前网络的实际下载kbps */ + throughputKbps: number + /** 传输层根据多个请求评估的当前网络的 rtt(仅供参考) */ + transportRttEstimate: number + } + interface RequestSubscribeDeviceMessageFailCallbackResult { + /** 接口调用失败错误码,有可能为空 */ + errCode: number + /** 接口调用失败错误信息 */ + errMsg: string + } + interface RequestSubscribeDeviceMessageOption { + /** 设备型号 id 。通过微信公众平台注册设备获得。 */ + modelId: string + /** 设备唯一序列号。由厂商分配,长度不能超过128字节。字符只接受数字,大小写字母,下划线(_)和连字符(-)。 */ + sn: string + /** 设备票据,5分钟内有效。 */ + snTicket: string + /** 需要订阅的消息模板的 id 的集合,一次调用最多可订阅3条消息 */ + tmplIds: any[] + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: RequestSubscribeDeviceMessageCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: RequestSubscribeDeviceMessageFailCallback + /** 接口调用成功的回调函数 */ + success?: RequestSubscribeDeviceMessageSuccessCallback + } + interface RequestSubscribeDeviceMessageSuccessCallbackResult { + /** [TEMPLATE_ID]是动态的键,即模板id,值包括'accept'、'reject'、'ban'、'filter'、'acceptWithAudio'。'accept'表示用户同意订阅该条id对应的模板消息,'reject'表示用户拒绝订阅该条id对应的模板消息,'ban'表示已被后台封禁,'acceptWithAudio' 表示用户接收订阅消息并开启了语音提醒,'filter'表示该模板因为模板标题同名被后台过滤。例如 { errMsg: "requestSubscribeDeviceMessage:ok", zun-LzcQyW-edafCVvzPkK4de2Rllr1fFpw2A_x0oXE: "accept"} 表示用户同意订阅zun-LzcQyW-edafCVvzPkK4de2Rllr1fFpw2A_x0oXE这条消息 */ + [TEMPLATE_ID: string]: string + /** 接口调用成功时errMsg值为'requestSubscribeDeviceMessage:ok' */ + errMsg: string + } + interface RequestSubscribeMessageFailCallbackResult { + /** 接口调用失败错误码 */ + errCode: number + /** 接口调用失败错误信息 */ + errMsg: string + } + interface RequestSubscribeMessageOption { + /** 需要订阅的消息模板的id的集合,一次调用最多可订阅3条消息(注意:iOS客户端7.0.6版本、Android客户端7.0.7版本之后的一次性订阅/长期订阅才支持多个模板消息,iOS客户端7.0.5版本、Android客户端7.0.6版本之前的一次订阅只支持一个模板消息)消息模板id在[微信公众平台(mp.weixin.qq.com)-功能-订阅消息]中配置。每个tmplId对应的模板标题需要不相同,否则会被过滤。 */ + tmplIds: any[] + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: RequestSubscribeMessageCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: RequestSubscribeMessageFailCallback + /** 接口调用成功的回调函数 */ + success?: RequestSubscribeMessageSuccessCallback + } + interface RequestSubscribeMessageSuccessCallbackResult { + /** [TEMPLATE_ID]是动态的键,即模板id,值包括'accept'、'reject'、'ban'、'filter'。'accept'表示用户同意订阅该条id对应的模板消息,'reject'表示用户拒绝订阅该条id对应的模板消息,'ban'表示已被后台封禁,'filter'表示该模板因为模板标题同名被后台过滤。例如 { errMsg: "requestSubscribeMessage:ok", zun-LzcQyW-edafCVvzPkK4de2Rllr1fFpw2A_x0oXE: "accept"} 表示用户同意订阅zun-LzcQyW-edafCVvzPkK4de2Rllr1fFpw2A_x0oXE这条消息 */ + [TEMPLATE_ID: string]: string + /** 接口调用成功时errMsg值为'requestSubscribeMessage:ok' */ + errMsg: string + } + interface RequestSuccessCallbackResult< + T extends string | IAnyObject | ArrayBuffer = + | string + | IAnyObject + | ArrayBuffer + > { + /** 需要基础库: `2.10.0` + * + * 开发者服务器返回的 cookies,格式为字符串数组 */ + cookies: string[] + /** 开发者服务器返回的数据 */ + data: T + /** 需要基础库: `1.2.0` + * + * 开发者服务器返回的 HTTP Response Header */ + header: IAnyObject + /** 需要基础库: `2.10.4` + * + * 网络请求过程中一些调试信息,[查看详细说明](https://developers.weixin.qq.com/miniprogram/dev/framework/performance/network.html) */ + profile: RequestProfile + /** 开发者服务器返回的 HTTP 状态码 */ + statusCode: number + errMsg: string + } + interface ReserveChannelsLiveOption { + /** 预告 id,通过 getChannelsLiveNoticeInfo 接口获取 */ + noticeId: string + } + /** 开发者服务器每次返回新chunk时的Response */ + interface Result { + /** 返回的chunk buffer */ + data: ArrayBuffer + } + interface ResumeBGMOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: ResumeBGMCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: ResumeBGMFailCallback + /** 接口调用成功的回调函数 */ + success?: ResumeBGMSuccessCallback + } + interface ResumeOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: ResumeCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: ResumeFailCallback + /** 接口调用成功的回调函数 */ + success?: ResumeSuccessCallback + } + interface RewardedVideoAdOnCloseListenerResult { + /** 需要基础库: `2.1.0` + * + * 视频是否是在用户完整观看的情况下被关闭的 */ + isEnded: boolean + } + interface RewardedVideoAdOnErrorListenerResult { + /** 需要基础库: `2.2.2` + * + * 错误码 + * + * 可选值: + * - 1000: 后端接口调用失败; + * - 1001: 参数错误; + * - 1002: 广告单元无效; + * - 1003: 内部错误; + * - 1004: 无合适的广告; + * - 1005: 广告组件审核中; + * - 1006: 广告组件被驳回; + * - 1007: 广告组件被封禁; + * - 1008: 广告单元已关闭; */ + errCode: 1000 | 1001 | 1002 | 1003 | 1004 | 1005 | 1006 | 1007 | 1008 + /** 错误信息 */ + errMsg: string + } + interface RmdirFailCallbackResult { + /** 错误信息 + * + * 可选值: + * - 'fail no such file or directory ${dirPath}': 目录不存在; + * - 'fail directory not empty': 目录不为空; + * - 'fail permission denied, open ${dirPath}': 指定的 dirPath 路径没有写权限; + * - 'fail sdcard not mounted': Android sdcard 挂载失败; */ + errMsg: string + } + interface RmdirOption { + /** 要删除的目录路径 (本地路径) */ + dirPath: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: RmdirCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: RmdirFailCallback + /** 需要基础库: `2.3.0` + * + * 是否递归删除目录。如果为 true,则删除该目录和该目录下的所有子目录以及文件。 */ + recursive?: boolean + /** 接口调用成功的回调函数 */ + success?: RmdirSuccessCallback + } + interface SafeArea { + /** 安全区域右下角纵坐标 */ + bottom: number + /** 安全区域的高度,单位逻辑像素 */ + height: number + /** 安全区域左上角横坐标 */ + left: number + /** 安全区域右下角横坐标 */ + right: number + /** 安全区域左上角纵坐标 */ + top: number + /** 安全区域的宽度,单位逻辑像素 */ + width: number + } + interface SaveFileFailCallbackResult { + /** 错误信息 + * + * 可选值: + * - 'fail tempFilePath file not exist': 指定的 tempFilePath 找不到文件; + * - 'fail permission denied, open "${filePath}"': 指定的 filePath 路径没有写权限; + * - 'fail no such file or directory "${dirPath}"': 上级目录不存在; + * - 'fail the maximum size of the file storage limit is exceeded': 存储空间不足; + * - 'fail sdcard not mounted': Android sdcard 挂载失败; */ + errMsg: string + } + interface SaveFileSuccessCallbackResult { + /** 存储后的文件路径 (本地路径) */ + savedFilePath: string + errMsg: string + } + interface SaveFileToDiskOption { + /** 待保存文件路径 */ + filePath: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: SaveFileToDiskCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: SaveFileToDiskFailCallback + /** 接口调用成功的回调函数 */ + success?: SaveFileToDiskSuccessCallback + } + interface SaveImageToPhotosAlbumOption { + /** 图片文件路径,可以是临时文件路径或永久文件路径 (本地路径) ,不支持网络路径 */ + filePath: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: SaveImageToPhotosAlbumCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: SaveImageToPhotosAlbumFailCallback + /** 接口调用成功的回调函数 */ + success?: SaveImageToPhotosAlbumSuccessCallback + } + interface SaveVideoToPhotosAlbumOption { + /** 视频文件路径,可以是临时文件路径也可以是永久文件路径 (本地路径) */ + filePath: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: SaveVideoToPhotosAlbumCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: SaveVideoToPhotosAlbumFailCallback + /** 接口调用成功的回调函数 */ + success?: SaveVideoToPhotosAlbumSuccessCallback + } + interface ScanCodeOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: ScanCodeCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: ScanCodeFailCallback + /** 需要基础库: `1.2.0` + * + * 是否只能从相机扫码,不允许从相册选择图片 */ + onlyFromCamera?: boolean + /** 需要基础库: `1.7.0` + * + * 扫码类型 + * + * 可选值: + * - 'barCode': 一维码; + * - 'qrCode': 二维码; + * - 'datamatrix': Data Matrix 码; + * - 'pdf417': PDF417 条码; */ + scanType?: Array<'barCode' | 'qrCode' | 'datamatrix' | 'pdf417'> + /** 接口调用成功的回调函数 */ + success?: ScanCodeSuccessCallback + } + interface ScanCodeSuccessCallbackResult { + /** 所扫码的字符集 */ + charSet: string + /** 当所扫的码为当前小程序二维码时,会返回此字段,内容为二维码携带的 path */ + path: string + /** 原始数据,base64编码 */ + rawData: string + /** 所扫码的内容 */ + result: string + /** 所扫码的类型 + * + * 可选值: + * - 'QR_CODE': 二维码; + * - 'AZTEC': 一维码; + * - 'CODABAR': 一维码; + * - 'CODE_39': 一维码; + * - 'CODE_93': 一维码; + * - 'CODE_128': 一维码; + * - 'DATA_MATRIX': 二维码; + * - 'EAN_8': 一维码; + * - 'EAN_13': 一维码; + * - 'ITF': 一维码; + * - 'MAXICODE': 一维码; + * - 'PDF_417': 二维码; + * - 'RSS_14': 一维码; + * - 'RSS_EXPANDED': 一维码; + * - 'UPC_A': 一维码; + * - 'UPC_E': 一维码; + * - 'UPC_EAN_EXTENSION': 一维码; + * - 'WX_CODE': 二维码; + * - 'CODE_25': 一维码; */ + scanType: + | 'QR_CODE' + | 'AZTEC' + | 'CODABAR' + | 'CODE_39' + | 'CODE_93' + | 'CODE_128' + | 'DATA_MATRIX' + | 'EAN_8' + | 'EAN_13' + | 'ITF' + | 'MAXICODE' + | 'PDF_417' + | 'RSS_14' + | 'RSS_EXPANDED' + | 'UPC_A' + | 'UPC_E' + | 'UPC_EAN_EXTENSION' + | 'WX_CODE' + | 'CODE_25' + errMsg: string + } + interface ScrollOffsetCallbackResult { + /** 节点的 dataset */ + dataset: IAnyObject + /** 节点的 ID */ + id: string + /** 节点的水平滚动位置 */ + scrollLeft: number + /** 节点的竖直滚动位置 */ + scrollTop: number + } + interface ScrollToOption { + /** 是否启用滚动动画 */ + animated?: boolean + /** 滚动动画时长 */ + duration?: number + /** 左边界距离 */ + left?: number + /** 顶部距离 */ + top?: number + /** 初始速度 */ + velocity?: number + } + /** 需要基础库: `2.14.4` +* +* 增强 ScrollView 实例,可通过 [wx.createSelectorQuery](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/wx.createSelectorQuery.html) 的 [NodesRef.node](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/NodesRef.node.html) 方法获取。 仅在 scroll-view 组件开启 enhanced 属性后生效。 +* +* **示例代码** +* +* ```js +wx.createSelectorQuery() + .select('#scrollview') + .node() + .exec((res) => { + const scrollView = res[0].node; + scrollView.scrollEnabled = false; + }) +``` */ + interface ScrollViewContext { + /** 设置滚动边界弹性 (仅在 iOS 下生效) */ + bounces: boolean + /** 取消滚动惯性 (仅在 iOS 下生效) */ + decelerationDisabled: boolean + /** 设置滚动减速速率 */ + fastDeceleration: boolean + /** 分页滑动开关 */ + pagingEnabled: boolean + /** 滚动开关 */ + scrollEnabled: boolean + /** 设置是否显示滚动条 */ + showScrollbar: boolean + } + interface SeekBackgroundAudioOption { + /** 音乐位置,单位:秒 */ + position: number + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: SeekBackgroundAudioCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: SeekBackgroundAudioFailCallback + /** 接口调用成功的回调函数 */ + success?: SeekBackgroundAudioSuccessCallback + } + interface SendHCEMessageOption { + /** 二进制数据 */ + data: ArrayBuffer + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: SendHCEMessageCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: SendHCEMessageFailCallback + /** 接口调用成功的回调函数 */ + success?: SendHCEMessageSuccessCallback + } + interface SendMessageOption { + /** SEI消息 */ + msg: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: SendMessageCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: SendMessageFailCallback + /** 接口调用成功的回调函数 */ + success?: SendMessageSuccessCallback + } + interface SendSmsOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: SendSmsCompleteCallback + /** 预填到发送短信面板的内容 */ + content?: string + /** 接口调用失败的回调函数 */ + fail?: SendSmsFailCallback + /** 预填到发送短信面板的手机号 */ + phoneNumber?: string + /** 接口调用成功的回调函数 */ + success?: SendSmsSuccessCallback + } + interface SendSocketMessageOption { + /** 需要发送的内容 */ + data: string | ArrayBuffer + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: SendSocketMessageCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: SendSocketMessageFailCallback + /** 接口调用成功的回调函数 */ + success?: SendSocketMessageSuccessCallback + } + interface SetBGMVolumeOption { + /** 音量大小,范围是 0-1 */ + volume: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: SetBGMVolumeCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: SetBGMVolumeFailCallback + /** 接口调用成功的回调函数 */ + success?: SetBGMVolumeSuccessCallback + } + interface SetBLEMTUFailCallbackResult { + /** 最终协商的 MTU 值。如果协商失败则无此参数。安卓客户端 8.0.9 开始支持。 */ + mtu: number + } + interface SetBLEMTUOption { + /** 蓝牙设备 id */ + deviceId: string + /** 最大传输单元。设置范围为 (22,512) 区间内,单位 bytes */ + mtu: number + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: SetBLEMTUCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: SetBLEMTUFailCallback + /** 接口调用成功的回调函数 */ + success?: SetBLEMTUSuccessCallback + } + interface SetBLEMTUSuccessCallbackResult { + /** 最终协商的 MTU 值,与传入参数一致。安卓客户端 8.0.9 开始支持。 */ + mtu: number + errMsg: string + } + interface SetBackgroundColorOption { + /** 窗口的背景色,必须为十六进制颜色值 */ + backgroundColor?: string + /** 底部窗口的背景色,必须为十六进制颜色值,仅 iOS 支持 */ + backgroundColorBottom?: string + /** 顶部窗口的背景色,必须为十六进制颜色值,仅 iOS 支持 */ + backgroundColorTop?: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: SetBackgroundColorCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: SetBackgroundColorFailCallback + /** 接口调用成功的回调函数 */ + success?: SetBackgroundColorSuccessCallback + } + interface SetBackgroundFetchTokenOption { + /** 自定义的登录态 */ + token: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: SetBackgroundFetchTokenCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: SetBackgroundFetchTokenFailCallback + /** 接口调用成功的回调函数 */ + success?: SetBackgroundFetchTokenSuccessCallback + } + interface SetBackgroundTextStyleOption { + /** 下拉背景字体、loading 图的样式。 + * + * 可选值: + * - 'dark': dark 样式; + * - 'light': light 样式; */ + textStyle: 'dark' | 'light' + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: SetBackgroundTextStyleCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: SetBackgroundTextStyleFailCallback + /** 接口调用成功的回调函数 */ + success?: SetBackgroundTextStyleSuccessCallback + } + interface SetBoundaryOption { + /** 东北角经纬度 */ + northeast: MapPostion + /** 西南角经纬度 */ + southwest: MapPostion + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: SetBoundaryCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: SetBoundaryFailCallback + /** 接口调用成功的回调函数 */ + success?: SetBoundarySuccessCallback + } + interface SetCenterOffsetOption { + /** 偏移量,两位数组 */ + offset: number[] + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: SetCenterOffsetCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: SetCenterOffsetFailCallback + /** 接口调用成功的回调函数 */ + success?: SetCenterOffsetSuccessCallback + } + interface SetClipboardDataOption { + /** 剪贴板的内容 */ + data: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: SetClipboardDataCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: SetClipboardDataFailCallback + /** 接口调用成功的回调函数 */ + success?: SetClipboardDataSuccessCallback + } + interface SetContentsOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: SetContentsCompleteCallback + /** 表示内容的delta对象 */ + delta?: IAnyObject + /** 接口调用失败的回调函数 */ + fail?: SetContentsFailCallback + /** 带标签的HTML内容 */ + html?: string + /** 接口调用成功的回调函数 */ + success?: SetContentsSuccessCallback + } + interface SetEnable1v1ChatOption { + /** 是否开启 */ + enable: boolean + /** 窗口背景色(音频通话背景以及小窗模式背景) + * + * 可选值: + * - 0: #262930; + * - 1: #FA5151; + * - 2: #FA9D3B; + * - 3: #3D7257; + * - 4: #1485EE; + * - 5: #6467F0; */ + backgroundType?: 0 | 1 | 2 | 3 | 4 | 5 + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: SetEnable1v1ChatCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: SetEnable1v1ChatFailCallback + /** 小窗样式 */ + minWindowType?: number + /** 接口调用成功的回调函数 */ + success?: SetEnable1v1ChatSuccessCallback + } + interface SetEnableDebugOption { + /** 是否打开调试 */ + enableDebug: boolean + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: SetEnableDebugCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: SetEnableDebugFailCallback + /** 接口调用成功的回调函数 */ + success?: SetEnableDebugSuccessCallback + } + interface SetInnerAudioOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: SetInnerAudioOptionCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: SetInnerAudioOptionFailCallback + /** 是否与其他音频混播,设置为 true 之后,不会终止其他应用或微信内的音乐 */ + mixWithOther?: boolean + /** (仅在 iOS 生效)是否遵循静音开关,设置为 false 之后,即使是在静音模式下,也能播放声音 */ + obeyMuteSwitch?: boolean + /** true 代表用扬声器播放,false 代表听筒播放,默认值为 true。 */ + speakerOn?: boolean + /** 接口调用成功的回调函数 */ + success?: SetInnerAudioOptionSuccessCallback + } + interface SetKeepScreenOnOption { + /** 是否保持屏幕常亮 */ + keepScreenOn: boolean + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: SetKeepScreenOnCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: SetKeepScreenOnFailCallback + /** 接口调用成功的回调函数 */ + success?: SetKeepScreenOnSuccessCallback + } + interface SetLocMarkerIconOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: SetLocMarkerIconCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: SetLocMarkerIconFailCallback + /** 图标路径,支持网络路径、本地路径、代码包路径 */ + iconPath?: string + /** 接口调用成功的回调函数 */ + success?: SetLocMarkerIconSuccessCallback + } + interface SetMICVolumeOption { + /** 音量大小,范围是 0.0-1.0 */ + volume: number + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: SetMICVolumeCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: SetMICVolumeFailCallback + /** 接口调用成功的回调函数 */ + success?: SetMICVolumeSuccessCallback + } + interface SetNavigationBarColorOption { + /** 背景颜色值,有效值为十六进制颜色 */ + backgroundColor: string + /** 前景颜色值,包括按钮、标题、状态栏的颜色,仅支持 #ffffff 和 #000000 */ + frontColor: string + /** 动画效果 */ + animation?: AnimationOption + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: SetNavigationBarColorCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: SetNavigationBarColorFailCallback + /** 接口调用成功的回调函数 */ + success?: SetNavigationBarColorSuccessCallback + } + interface SetNavigationBarTitleOption { + /** 页面标题 */ + title: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: SetNavigationBarTitleCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: SetNavigationBarTitleFailCallback + /** 接口调用成功的回调函数 */ + success?: SetNavigationBarTitleSuccessCallback + } + interface SetScreenBrightnessOption { + /** 屏幕亮度值,范围 0 ~ 1,0 最暗,1 最亮。在安卓端支持传入特殊值 -1,表示屏幕亮度跟随系统变化 */ + value: number + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: SetScreenBrightnessCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: SetScreenBrightnessFailCallback + /** 接口调用成功的回调函数 */ + success?: SetScreenBrightnessSuccessCallback + } + interface SetStorageOption { + /** 需要存储的内容。只支持原生类型、Date、及能够通过`JSON.stringify`序列化的对象。 */ + data: T + /** 本地缓存中指定的 key */ + key: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: SetStorageCompleteCallback + /** 需要基础库: `2.21.3` + * + * 是否开启加密存储。只有异步的 setStorage 接口支持开启加密存储。开启后,将会对 data 使用 AES128 加密,接口回调耗时将会增加。若开启加密存储,setStorage 和 getStorage 需要同时声明 encrypt 的值为 true。此外,由于加密后的数据会比原始数据膨胀1.4倍,因此开启 encrypt 的情况下,单个 key 允许存储的最大数据长度为 0.7MB,所有数据存储上限为 7.1MB */ + encrypt?: boolean + /** 接口调用失败的回调函数 */ + fail?: SetStorageFailCallback + /** 接口调用成功的回调函数 */ + success?: SetStorageSuccessCallback + } + interface SetTabBarBadgeOption { + /** tabBar 的哪一项,从左边算起 */ + index: number + /** 显示的文本,超过 4 个字符则显示成 ... */ + text: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: SetTabBarBadgeCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: SetTabBarBadgeFailCallback + /** 接口调用成功的回调函数 */ + success?: SetTabBarBadgeSuccessCallback + } + interface SetTabBarItemOption { + /** tabBar 的哪一项,从左边算起 */ + index: number + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: SetTabBarItemCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: SetTabBarItemFailCallback + /** 图片路径,icon 大小限制为 40kb,建议尺寸为 81px * 81px,当 postion 为 top 时,此参数无效 */ + iconPath?: string + /** 选中时的图片路径,icon 大小限制为 40kb,建议尺寸为 81px * 81px ,当 postion 为 top 时,此参数无效 */ + selectedIconPath?: string + /** 接口调用成功的回调函数 */ + success?: SetTabBarItemSuccessCallback + /** tab 上的按钮文字 */ + text?: string + } + interface SetTabBarStyleOption { + /** tab 的背景色,HexColor */ + backgroundColor?: string + /** tabBar上边框的颜色, 仅支持 black/white */ + borderStyle?: string + /** tab 上的文字默认颜色,HexColor */ + color?: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: SetTabBarStyleCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: SetTabBarStyleFailCallback + /** tab 上的文字选中时的颜色,HexColor */ + selectedColor?: string + /** 接口调用成功的回调函数 */ + success?: SetTabBarStyleSuccessCallback + } + interface SetTimeoutOption { + /** 设置超时时间 (ms) */ + timeout: number + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: SetTimeoutCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: SetTimeoutFailCallback + /** 接口调用成功的回调函数 */ + success?: SetTimeoutSuccessCallback + } + interface SetTopBarTextOption { + /** 置顶栏文字 */ + text: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: SetTopBarTextCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: SetTopBarTextFailCallback + /** 接口调用成功的回调函数 */ + success?: SetTopBarTextSuccessCallback + } + interface SetVisualEffectOnCaptureOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: SetVisualEffectOnCaptureCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: SetVisualEffectOnCaptureFailCallback + /** 接口调用成功的回调函数 */ + success?: SetVisualEffectOnCaptureSuccessCallback + /** 截屏/录屏时的表现,仅支持 none / hidden,传入 hidden 则表示在截屏/录屏时隐藏屏幕 */ + visualEffect?: string + } + interface SetWifiListOption { + /** 提供预设的 Wi-Fi 信息列表 */ + wifiList: WifiData[] + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: SetWifiListCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: SetWifiListFailCallback + /** 接口调用成功的回调函数 */ + success?: SetWifiListSuccessCallback + } + interface SetWindowSizeOption { + /** 窗口高度,以像素为单位 */ + height: number + /** 窗口宽度,以像素为单位 */ + width: number + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: SetWindowSizeCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: SetWindowSizeFailCallback + /** 接口调用成功的回调函数 */ + success?: SetWindowSizeSuccessCallback + } + interface SetZoomOption { + /** 缩放级别,范围[1, maxZoom]。zoom 可取小数,精确到小数后一位。maxZoom 可在 bindinitdone 返回值中获取。 */ + zoom: number + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: SetZoomCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: SetZoomFailCallback + /** 接口调用成功的回调函数 */ + success?: SetZoomSuccessCallback + } + interface SetZoomSuccessCallbackResult { + /** 实际设置的缩放级别。由于系统限制,某些机型可能无法设置成指定值,会改用最接近的可设值。 */ + zoom: number + errMsg: string + } + interface ShareFileMessageOption { + /** 要分享的文件地址,必须为本地路径或临时路径 */ + filePath: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: ShareFileMessageCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: ShareFileMessageFailCallback + /** 自定义文件名,若留空则使用filePath中的文件名 */ + fileName?: string + /** 接口调用成功的回调函数 */ + success?: ShareFileMessageSuccessCallback + } + interface ShareToWeRunOption { + /** 运动数据列表 */ + recordList: WxaSportRecord[] + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: ShareToWeRunCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: ShareToWeRunFailCallback + /** 接口调用成功的回调函数 */ + success?: ShareToWeRunSuccessCallback + } + interface ShareVideoMessageOption { + /** 要分享的视频地址,必须为本地路径或临时路径 */ + videoPath: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: ShareVideoMessageCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: ShareVideoMessageFailCallback + /** 接口调用成功的回调函数 */ + success?: ShareVideoMessageSuccessCallback + /** 缩略图路径,若留空则使用视频首帧 */ + thumbPath?: string + } + interface ShowActionSheetOption { + /** 按钮的文字数组,数组长度最大为 6 */ + itemList: string[] + /** 需要基础库: `2.14.0` + * + * 警示文案 */ + alertText?: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: ShowActionSheetCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: ShowActionSheetFailCallback + /** 按钮的文字颜色 */ + itemColor?: string + /** 接口调用成功的回调函数 */ + success?: ShowActionSheetSuccessCallback + } + interface ShowActionSheetSuccessCallbackResult { + /** 用户点击的按钮序号,从上到下的顺序,从0开始 */ + tapIndex: number + errMsg: string + } + interface ShowLoadingOption { + /** 提示的内容 */ + title: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: ShowLoadingCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: ShowLoadingFailCallback + /** 是否显示透明蒙层,防止触摸穿透 */ + mask?: boolean + /** 接口调用成功的回调函数 */ + success?: ShowLoadingSuccessCallback + } + interface ShowModalOption { + /** 取消按钮的文字颜色,必须是 16 进制格式的颜色字符串 */ + cancelColor?: string + /** 取消按钮的文字,最多 4 个字符 */ + cancelText?: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: ShowModalCompleteCallback + /** 确认按钮的文字颜色,必须是 16 进制格式的颜色字符串 */ + confirmColor?: string + /** 确认按钮的文字,最多 4 个字符 */ + confirmText?: string + /** 提示的内容 */ + content?: string + /** 需要基础库: `2.17.1` + * + * 是否显示输入框 */ + editable?: boolean + /** 接口调用失败的回调函数 */ + fail?: ShowModalFailCallback + /** 需要基础库: `2.17.1` + * + * 显示输入框时的提示文本 */ + placeholderText?: string + /** 是否显示取消按钮 */ + showCancel?: boolean + /** 接口调用成功的回调函数 */ + success?: ShowModalSuccessCallback + /** 提示的标题 */ + title?: string + } + interface ShowModalSuccessCallbackResult { + /** 需要基础库: `1.1.0` + * + * 为 true 时,表示用户点击了取消(用于 Android 系统区分点击蒙层关闭还是点击取消按钮关闭) */ + cancel: boolean + /** 为 true 时,表示用户点击了确定按钮 */ + confirm: boolean + /** editable 为 true 时,用户输入的文本 */ + content: string + errMsg: string + } + interface ShowNavigationBarLoadingOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: ShowNavigationBarLoadingCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: ShowNavigationBarLoadingFailCallback + /** 接口调用成功的回调函数 */ + success?: ShowNavigationBarLoadingSuccessCallback + } + interface ShowRedPackageOption { + /** 封面地址 */ + url: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: ShowRedPackageCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: ShowRedPackageFailCallback + /** 接口调用成功的回调函数 */ + success?: ShowRedPackageSuccessCallback + } + interface ShowShareImageMenuOption { + /** 要分享的图片地址,必须为本地路径或临时路径 */ + path: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: ShowShareImageMenuCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: ShowShareImageMenuFailCallback + /** 接口调用成功的回调函数 */ + success?: ShowShareImageMenuSuccessCallback + } + interface ShowShareMenuOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: ShowShareMenuCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: ShowShareMenuFailCallback + /** 需要基础库: `2.11.3` + * + * 本接口为 Beta 版本,暂只在 Android 平台支持。需要显示的转发按钮名称列表,默认['shareAppMessage']。按钮名称合法值包含 "shareAppMessage"、"shareTimeline" 两种 */ + menus?: string[] + /** 接口调用成功的回调函数 */ + success?: ShowShareMenuSuccessCallback + /** 是否使用带 shareTicket 的转发[详情](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/share.html) */ + withShareTicket?: boolean + } + interface ShowTabBarOption { + /** 是否需要动画效果 */ + animation?: boolean + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: ShowTabBarCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: ShowTabBarFailCallback + /** 接口调用成功的回调函数 */ + success?: ShowTabBarSuccessCallback + } + interface ShowTabBarRedDotOption { + /** tabBar 的哪一项,从左边算起 */ + index: number + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: ShowTabBarRedDotCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: ShowTabBarRedDotFailCallback + /** 接口调用成功的回调函数 */ + success?: ShowTabBarRedDotSuccessCallback + } + interface ShowToastOption { + /** 提示的内容 */ + title: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: ShowToastCompleteCallback + /** 提示的延迟时间 */ + duration?: number + /** 接口调用失败的回调函数 */ + fail?: ShowToastFailCallback + /** 图标 + * + * 可选值: + * - 'success': 显示成功图标,此时 title 文本最多显示 7 个汉字长度; + * - 'error': 显示失败图标,此时 title 文本最多显示 7 个汉字长度; + * - 'loading': 显示加载图标,此时 title 文本最多显示 7 个汉字长度; + * - 'none': 不显示图标,此时 title 文本最多可显示两行,[1.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html)及以上版本支持; */ + icon?: 'success' | 'error' | 'loading' | 'none' + /** 需要基础库: `1.1.0` + * + * 自定义图标的本地路径,image 的优先级高于 icon */ + image?: string + /** 是否显示透明蒙层,防止触摸穿透 */ + mask?: boolean + /** 接口调用成功的回调函数 */ + success?: ShowToastSuccessCallback + } + interface Size { + /** 变化后的窗口高度,单位 px */ + windowHeight: number + /** 变化后的窗口宽度,单位 px */ + windowWidth: number + } + /** 需要基础库: `2.10.4` + * + * 网络请求过程中一些调试信息 */ + interface SocketProfile { + /** 完成建立连接的时间(完成握手),如果是持久连接,则与 fetchStart 值相等。注意如果在传输层发生了错误且重新建立连接,则这里显示的是新建立的连接完成的时间。注意这里握手结束,包括安全连接建立完成、SOCKS 授权通过 */ + connectEnd: number + /** 开始建立连接的时间,如果是持久连接,则与 fetchStart 值相等。注意如果在传输层发生了错误且重新建立连接,则这里显示的是新建立的连接开始的时间 */ + connectStart: number + /** 上层请求到返回的耗时 */ + cost: number + /** DNS 域名查询完成的时间,如果使用了本地缓存(即无 DNS 查询)或持久连接,则与 fetchStart 值相等 */ + domainLookupEnd: number + /** DNS 域名查询开始的时间,如果使用了本地缓存(即无 DNS 查询)或持久连接,则与 fetchStart 值相等 */ + domainLookupStart: number + /** 组件准备好使用 SOCKET 建立请求的时间,这发生在检查本地缓存之前 */ + fetchStart: number + /** 握手耗时 */ + handshakeCost: number + /** 单次连接的耗时,包括 connect ,tls */ + rtt: number + } + interface SocketTaskCloseOption { + /** 一个数字值表示关闭连接的状态号,表示连接被关闭的原因。 */ + code?: number + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: FileSystemManagerCloseCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: SocketTaskCloseFailCallback + /** 一个可读的字符串,表示连接被关闭的原因。这个字符串必须是不长于 123 字节的 UTF-8 文本(不是字符)。 */ + reason?: string + /** 接口调用成功的回调函数 */ + success?: FileSystemManagerCloseSuccessCallback + } + interface SocketTaskOnCloseListenerResult { + /** 一个数字值表示关闭连接的状态号,表示连接被关闭的原因。 */ + code: number + /** 一个可读的字符串,表示连接被关闭的原因。 */ + reason: string + } + interface SocketTaskOnMessageListenerResult { + /** 服务器返回的消息 */ + data: string | ArrayBuffer + } + interface SocketTaskSendOption { + /** 需要发送的内容 */ + data: string | ArrayBuffer + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: SendCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: SendFailCallback + /** 接口调用成功的回调函数 */ + success?: SendSuccessCallback + } + interface StartAccelerometerOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: StartAccelerometerCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: StartAccelerometerFailCallback + /** 需要基础库: `2.1.0` + * + * 监听加速度数据回调函数的执行频率 + * + * 可选值: + * - 'game': 适用于更新游戏的回调频率,在 20ms/次 左右; + * - 'ui': 适用于更新 UI 的回调频率,在 60ms/次 左右; + * - 'normal': 普通的回调频率,在 200ms/次 左右; */ + interval?: 'game' | 'ui' | 'normal' + /** 接口调用成功的回调函数 */ + success?: StartAccelerometerSuccessCallback + } + interface StartAdvertisingObject { + /** 广播自定义参数 */ + advertiseRequest: AdvertiseReqObj + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: StartAdvertisingCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: StartAdvertisingFailCallback + /** 广播功率 + * + * 可选值: + * - 'low': 功率低; + * - 'medium': 功率适中; + * - 'high': 功率高; */ + powerLevel?: 'low' | 'medium' | 'high' + /** 接口调用成功的回调函数 */ + success?: StartAdvertisingSuccessCallback + } + interface StartBeaconDiscoveryOption { + /** Beacon 设备广播的 UUID 列表 */ + uuids: string[] + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: StartBeaconDiscoveryCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: StartBeaconDiscoveryFailCallback + /** 是否校验蓝牙开关,仅在 iOS 下有效。iOS 11 起,控制面板里关掉蓝牙,还是能继续使用 Beacon 服务。 */ + ignoreBluetoothAvailable?: boolean + /** 接口调用成功的回调函数 */ + success?: StartBeaconDiscoverySuccessCallback + } + interface StartBluetoothDevicesDiscoveryOption { + /** 是否允许重复上报同一设备。如果允许重复上报,则 [wx.onBlueToothDeviceFound](#) 方法会多次上报同一设备,但是 RSSI 值会有不同。 */ + allowDuplicatesKey?: boolean + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: StartBluetoothDevicesDiscoveryCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: StartBluetoothDevicesDiscoveryFailCallback + /** 上报设备的间隔,单位 ms。0 表示找到新设备立即上报,其他数值根据传入的间隔上报。 */ + interval?: number + /** 扫描模式,越高扫描越快,也越耗电。仅安卓微信客户端 7.0.12 及以上支持。 + * + * 可选值: + * - 'low': 低; + * - 'medium': 中; + * - 'high': 高; */ + powerLevel?: 'low' | 'medium' | 'high' + /** 要搜索的蓝牙设备主服务的 UUID 列表(支持 16/32/128 位 UUID)。某些蓝牙设备会广播自己的主 service 的 UUID。如果设置此参数,则只搜索广播包有对应 UUID 的主服务的蓝牙设备。建议通过该参数过滤掉周边不需要处理的其他蓝牙设备。 */ + services?: string[] + /** 接口调用成功的回调函数 */ + success?: StartBluetoothDevicesDiscoverySuccessCallback + } + interface StartCompassOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: StartCompassCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: StartCompassFailCallback + /** 接口调用成功的回调函数 */ + success?: StartCompassSuccessCallback + } + interface StartDeviceMotionListeningOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: StartDeviceMotionListeningCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: StartDeviceMotionListeningFailCallback + /** 监听设备方向的变化回调函数的执行频率 + * + * 可选值: + * - 'game': 适用于更新游戏的回调频率,在 20ms/次 左右; + * - 'ui': 适用于更新 UI 的回调频率,在 60ms/次 左右; + * - 'normal': 普通的回调频率,在 200ms/次 左右; */ + interval?: 'game' | 'ui' | 'normal' + /** 接口调用成功的回调函数 */ + success?: StartDeviceMotionListeningSuccessCallback + } + interface StartDiscoveryOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: StartDiscoveryCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: StartDiscoveryFailCallback + /** 接口调用成功的回调函数 */ + success?: StartDiscoverySuccessCallback + } + interface StartGyroscopeOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: StartGyroscopeCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: StartGyroscopeFailCallback + /** 监听陀螺仪数据回调函数的执行频率 + * + * 可选值: + * - 'game': 适用于更新游戏的回调频率,在 20ms/次 左右; + * - 'ui': 适用于更新 UI 的回调频率,在 60ms/次 左右; + * - 'normal': 普通的回调频率,在 200ms/次 左右; */ + interval?: 'game' | 'ui' | 'normal' + /** 接口调用成功的回调函数 */ + success?: StartGyroscopeSuccessCallback + } + interface StartHCEOption { + /** 需要注册到系统的 AID 列表 */ + aid_list: string[] + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: StartHCECompleteCallback + /** 接口调用失败的回调函数 */ + fail?: StartHCEFailCallback + /** 接口调用成功的回调函数 */ + success?: StartHCESuccessCallback + } + interface StartLocalServiceDiscoveryFailCallbackResult { + /** 错误信息 + * + * 可选值: + * - 'invalid param': serviceType 为空; + * - 'scan task already exist': 在当前 startLocalServiceDiscovery 发起的搜索未停止的情况下,再次调用 startLocalServiceDiscovery; */ + errMsg: string + } + interface StartLocalServiceDiscoveryOption { + /** 要搜索的服务类型 */ + serviceType: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: StartLocalServiceDiscoveryCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: StartLocalServiceDiscoveryFailCallback + /** 接口调用成功的回调函数 */ + success?: StartLocalServiceDiscoverySuccessCallback + } + interface StartLocationUpdateBackgroundOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: StartLocationUpdateBackgroundCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: StartLocationUpdateBackgroundFailCallback + /** 接口调用成功的回调函数 */ + success?: StartLocationUpdateBackgroundSuccessCallback + /** wgs84 返回 gps 坐标,gcj02 返回可用于 wx.openLocation 的坐标 */ + type?: string + } + interface StartLocationUpdateOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: StartLocationUpdateCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: StartLocationUpdateFailCallback + /** 接口调用成功的回调函数 */ + success?: StartLocationUpdateSuccessCallback + /** wgs84 返回 gps 坐标,gcj02 返回可用于 wx.openLocation 的坐标 */ + type?: string + } + interface StartPreviewOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: StartPreviewCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: StartPreviewFailCallback + /** 接口调用成功的回调函数 */ + success?: StartPreviewSuccessCallback + } + interface StartPullDownRefreshOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: StartPullDownRefreshCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: StartPullDownRefreshFailCallback + /** 接口调用成功的回调函数 */ + success?: StartPullDownRefreshSuccessCallback + } + interface StartRecordSuccessCallbackResult { + /** 录音文件的临时路径 (本地路径) */ + tempFilePath: string + errMsg: string + } + interface StartRecordTimeoutCallbackResult { + /** 封面图片文件的临时路径 (本地路径) */ + tempThumbPath: string + /** 视频的文件的临时路径 (本地路径) */ + tempVideoPath: string + } + interface StartSoterAuthenticationOption { + /** 挑战因子。挑战因子为调用者为此次生物鉴权准备的用于签名的字符串关键识别信息,将作为 `resultJSON` 的一部分,供调用者识别本次请求。例如:如果场景为请求用户对某订单进行授权确认,则可以将订单号填入此参数。 */ + challenge: string + /** 请求使用的可接受的生物认证方式 + * + * 可选值: + * - 'fingerPrint': 指纹识别; + * - 'facial': 人脸识别; + * - 'speech': 声纹识别(暂未支持); */ + requestAuthModes: Array<'fingerPrint' | 'facial' | 'speech'> + /** 验证描述,即识别过程中显示在界面上的对话框提示内容 */ + authContent?: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: StartSoterAuthenticationCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: StartSoterAuthenticationFailCallback + /** 接口调用成功的回调函数 */ + success?: StartSoterAuthenticationSuccessCallback + } + interface StartSoterAuthenticationSuccessCallbackResult { + /** 生物认证方式 */ + authMode: string + /** 错误码 */ + errCode: number + /** 错误信息 */ + errMsg: string + /** 在设备安全区域(TEE)内获得的本机安全信息(如TEE名称版本号等以及防重放参数)以及本次认证信息(仅Android支持,本次认证的指纹ID)。具体说明见下文 */ + resultJSON: string + /** 用SOTER安全密钥对 `resultJSON` 的签名(SHA256 with RSA/PSS, saltlen=20) */ + resultJSONSignature: string + } + interface StartWifiOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: StartWifiCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: StartWifiFailCallback + /** 接口调用成功的回调函数 */ + success?: StartWifiSuccessCallback + } + interface StatFailCallbackResult { + /** 错误信息 + * + * 可选值: + * - 'fail permission denied, open ${path}': 指定的 path 路径没有读权限; + * - 'fail no such file or directory ${path}': 文件不存在; + * - 'fail sdcard not mounted': Android sdcard 挂载失败; */ + errMsg: string + } + interface StatOption { + /** 文件/目录路径 (本地路径) */ + path: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: StatCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: StatFailCallback + /** 需要基础库: `2.3.0` + * + * 是否递归获取目录下的每个文件的 Stats 信息 */ + recursive?: boolean + /** 接口调用成功的回调函数 */ + success?: StatSuccessCallback + } + interface StatSuccessCallbackResult { + /** [Stats](https://developers.weixin.qq.com/miniprogram/dev/api/file/Stats.html)|Array.<[Stats](https://developers.weixin.qq.com/miniprogram/dev/api/file/Stats.html)> + * + * 当 recursive 为 false 时,res.stats 是一个 Stats 对象。当 recursive 为 true 且 path 是一个目录的路径时,res.stats 是一个 Array,数组的每一项是一个对象,每个对象包含 path 和 stats。 */ + stats: Stats | Stats[] + errMsg: string + } + /** 描述文件状态的对象 */ + interface Stats { + /** 文件最近一次被存取或被执行的时间,UNIX 时间戳,对应 POSIX stat.st_atime */ + lastAccessedTime: number + /** 文件最后一次被修改的时间,UNIX 时间戳,对应 POSIX stat.st_mtime */ + lastModifiedTime: number + /** 文件的类型和存取的权限,对应 POSIX stat.st_mode */ + mode: string + /** 文件大小,单位:B,对应 POSIX stat.st_size */ + size: number + } + interface StepOption { + /** 动画延迟时间,单位 ms */ + delay?: number + /** 动画持续时间,单位 ms */ + duration?: number + /** 动画的效果 + * + * 可选值: + * - 'linear': 动画从头到尾的速度是相同的; + * - 'ease': 动画以低速开始,然后加快,在结束前变慢; + * - 'ease-in': 动画以低速开始; + * - 'ease-in-out': 动画以低速开始和结束; + * - 'ease-out': 动画以低速结束; + * - 'step-start': 动画第一帧就跳至结束状态直到结束; + * - 'step-end': 动画一直保持开始状态,最后一帧跳到结束状态; */ + timingFunction?: + | 'linear' + | 'ease' + | 'ease-in' + | 'ease-in-out' + | 'ease-out' + | 'step-start' + | 'step-end' + transformOrigin?: string + } + interface StopAccelerometerOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: StopAccelerometerCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: StopAccelerometerFailCallback + /** 接口调用成功的回调函数 */ + success?: StopAccelerometerSuccessCallback + } + interface StopAdvertisingOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: StopAdvertisingCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: StopAdvertisingFailCallback + /** 接口调用成功的回调函数 */ + success?: StopAdvertisingSuccessCallback + } + interface StopBGMOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: StopBGMCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: StopBGMFailCallback + /** 接口调用成功的回调函数 */ + success?: StopBGMSuccessCallback + } + interface StopBackgroundAudioOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: StopBackgroundAudioCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: StopBackgroundAudioFailCallback + /** 接口调用成功的回调函数 */ + success?: StopBackgroundAudioSuccessCallback + } + interface StopBeaconDiscoveryOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: StopBeaconDiscoveryCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: StopBeaconDiscoveryFailCallback + /** 接口调用成功的回调函数 */ + success?: StopBeaconDiscoverySuccessCallback + } + interface StopBluetoothDevicesDiscoveryOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: StopBluetoothDevicesDiscoveryCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: StopBluetoothDevicesDiscoveryFailCallback + /** 接口调用成功的回调函数 */ + success?: StopBluetoothDevicesDiscoverySuccessCallback + } + interface StopCompassOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: StopCompassCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: StopCompassFailCallback + /** 接口调用成功的回调函数 */ + success?: StopCompassSuccessCallback + } + interface StopDeviceMotionListeningOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: StopDeviceMotionListeningCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: StopDeviceMotionListeningFailCallback + /** 接口调用成功的回调函数 */ + success?: StopDeviceMotionListeningSuccessCallback + } + interface StopDiscoveryOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: StopDiscoveryCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: StopDiscoveryFailCallback + /** 接口调用成功的回调函数 */ + success?: StopDiscoverySuccessCallback + } + interface StopFaceDetectOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: StopFaceDetectCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: StopFaceDetectFailCallback + /** 接口调用成功的回调函数 */ + success?: StopFaceDetectSuccessCallback + } + interface StopGyroscopeOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: StopGyroscopeCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: StopGyroscopeFailCallback + /** 接口调用成功的回调函数 */ + success?: StopGyroscopeSuccessCallback + } + interface StopHCEOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: StopHCECompleteCallback + /** 接口调用失败的回调函数 */ + fail?: StopHCEFailCallback + /** 接口调用成功的回调函数 */ + success?: StopHCESuccessCallback + } + interface StopLocalServiceDiscoveryFailCallbackResult { + /** 错误信息 + * + * 可选值: + * - 'task not found': 在当前没有处在搜索服务中的情况下调用 stopLocalServiceDiscovery; */ + errMsg: string + } + interface StopLocalServiceDiscoveryOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: StopLocalServiceDiscoveryCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: StopLocalServiceDiscoveryFailCallback + /** 接口调用成功的回调函数 */ + success?: StopLocalServiceDiscoverySuccessCallback + } + interface StopLocationUpdateOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: StopLocationUpdateCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: StopLocationUpdateFailCallback + /** 接口调用成功的回调函数 */ + success?: StopLocationUpdateSuccessCallback + } + interface StopOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: StopCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: StopFailCallback + /** 接口调用成功的回调函数 */ + success?: StopSuccessCallback + } + interface StopPreviewOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: StopPreviewCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: StopPreviewFailCallback + /** 接口调用成功的回调函数 */ + success?: StopPreviewSuccessCallback + } + interface StopPullDownRefreshOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: StopPullDownRefreshCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: StopPullDownRefreshFailCallback + /** 接口调用成功的回调函数 */ + success?: StopPullDownRefreshSuccessCallback + } + interface StopRecordSuccessCallbackResult { + /** 封面图片文件的临时路径 (本地路径) */ + tempThumbPath: string + /** 视频的文件的临时路径 (本地路径) */ + tempVideoPath: string + errMsg: string + } + interface StopVoiceOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: StopVoiceCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: StopVoiceFailCallback + /** 接口调用成功的回调函数 */ + success?: StopVoiceSuccessCallback + } + interface StopWifiOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: StopWifiCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: StopWifiFailCallback + /** 接口调用成功的回调函数 */ + success?: StopWifiSuccessCallback + } + interface SubscribeVoIPVideoMembersOption { + /** 订阅的成员列表 */ + openIdList: string[] + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: SubscribeVoIPVideoMembersCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: SubscribeVoIPVideoMembersFailCallback + /** 接口调用成功的回调函数 */ + success?: SubscribeVoIPVideoMembersSuccessCallback + } + /** 订阅消息设置 +* +* **示例代码** +* +* ```javascript +wx.getSetting({ + withSubscriptions: true, + success (res) { + console.log(res.authSetting) + // res.authSetting = { + // "scope.userInfo": true, + // "scope.userLocation": true + // } + console.log(res.subscriptionsSetting) + // res.subscriptionsSetting = { + // mainSwitch: true, // 订阅消息总开关 + // itemSettings: { // 每一项开关 + // SYS_MSG_TYPE_INTERACTIVE: 'accept', // 小游戏系统订阅消息 + // SYS_MSG_TYPE_RANK: 'accept' + // zun-LzcQyW-edafCVvzPkK4de2Rllr1fFpw2A_x0oXE: 'reject', // 普通一次性订阅消息 + // ke_OZC_66gZxALLcsuI7ilCJSP2OJ2vWo2ooUPpkWrw: 'ban', + // } + // } + } +}) +``` */ + interface SubscriptionsSetting { + /** 订阅消息总开关,true为开启,false为关闭 */ + mainSwitch: boolean + /** 每一项订阅消息的订阅状态。itemSettings对象的键为**一次性订阅消息的模板id**或**系统订阅消息的类型**,值为'accept'、'reject'、'ban'中的其中一种。'accept'表示用户同意订阅这条消息,'reject'表示用户拒绝订阅这条消息,'ban'表示已被后台封禁。一次性订阅消息使用方法详见 [wx.requestSubscribeMessage](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/subscribe-message/wx.requestSubscribeMessage.html),永久订阅消息(仅小游戏可用)使用方法详见[wx.requestSubscribeSystemMessage](https://developers.weixin.qq.com/minigame/dev/api/open-api/subscribe-message/wx.requestSubscribeSystemMessage.html) + * ## 注意事项 + * - itemSettings 只返回用户勾选过订阅面板中的“总是保持以上选择,不再询问”的订阅消息。 */ + itemSettings?: IAnyObject + } + interface SwitchCameraOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: SwitchCameraCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: SwitchCameraFailCallback + /** 接口调用成功的回调函数 */ + success?: SwitchCameraSuccessCallback + } + interface SwitchTabOption { + /** 需要跳转的 tabBar 页面的路径 (代码包路径)(需在 app.json 的 [tabBar](https://developers.weixin.qq.com/miniprogram/dev/reference/configuration/app.html#tabbar) 字段定义的页面),路径后不能带参数。 */ + url: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: SwitchTabCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: SwitchTabFailCallback + /** 接口调用成功的回调函数 */ + success?: SwitchTabSuccessCallback + } + interface SystemInfo { + /** 需要基础库: `1.1.0` + * + * 客户端基础库版本 */ + SDKVersion: string + /** 需要基础库: `2.6.0` + * + * 允许微信使用相册的开关(仅 iOS 有效) */ + albumAuthorized: boolean + /** 需要基础库: `1.8.0` + * + * 设备性能等级(仅 Android)。取值为:-2 或 0(该设备无法运行小游戏),-1(性能未知),>=1(设备性能值,该值越高,设备性能越好,目前最高不到50) */ + benchmarkLevel: number + /** 需要基础库: `2.6.0` + * + * 蓝牙的系统开关 */ + bluetoothEnabled: boolean + /** 需要基础库: `1.5.0` + * + * 设备品牌 */ + brand: string + /** 需要基础库: `2.6.0` + * + * 允许微信使用摄像头的开关 */ + cameraAuthorized: boolean + /** 设备方向 + * + * 可选值: + * - 'portrait': 竖屏; + * - 'landscape': 横屏; */ + deviceOrientation: 'portrait' | 'landscape' + /** 需要基础库: `2.15.0` + * + * 是否已打开调试。可通过右上角菜单或 [wx.setEnableDebug](https://developers.weixin.qq.com/miniprogram/dev/api/base/debug/wx.setEnableDebug.html) 打开调试。 */ + enableDebug: boolean + /** 需要基础库: `1.5.0` + * + * 用户字体大小(单位px)。以微信客户端「我-设置-通用-字体大小」中的设置为准 */ + fontSizeSetting: number + /** 需要基础库: `2.12.3` + * + * 当前小程序运行的宿主环境 */ + host: SystemInfoHost + /** 微信设置的语言 */ + language: string + /** 需要基础库: `2.6.0` + * + * 允许微信使用定位的开关 */ + locationAuthorized: boolean + /** 需要基础库: `2.6.0` + * + * 地理位置的系统开关 */ + locationEnabled: boolean + /** `true` 表示模糊定位,`false` 表示精确定位,仅 iOS 支持 */ + locationReducedAccuracy: boolean + /** 需要基础库: `2.6.0` + * + * 允许微信使用麦克风的开关 */ + microphoneAuthorized: boolean + /** 设备型号。新机型刚推出一段时间会显示unknown,微信会尽快进行适配。 */ + model: string + /** 需要基础库: `2.6.0` + * + * 允许微信通知带有提醒的开关(仅 iOS 有效) */ + notificationAlertAuthorized: boolean + /** 需要基础库: `2.6.0` + * + * 允许微信通知的开关 */ + notificationAuthorized: boolean + /** 需要基础库: `2.6.0` + * + * 允许微信通知带有标记的开关(仅 iOS 有效) */ + notificationBadgeAuthorized: boolean + /** 需要基础库: `2.6.0` + * + * 允许微信通知带有声音的开关(仅 iOS 有效) */ + notificationSoundAuthorized: boolean + /** 需要基础库: `2.19.3` + * + * 允许微信使用日历的开关 */ + phoneCalendarAuthorized: boolean + /** 设备像素比 */ + pixelRatio: number + /** 客户端平台 + * + * 可选值: + * - 'ios': iOS微信(包含 iPhone、iPad); + * - 'android': Android微信; + * - 'windows': Windows微信; + * - 'mac': macOS微信; + * - 'devtools': 微信开发者工具; */ + platform: 'ios' | 'android' | 'windows' | 'mac' | 'devtools' + /** 需要基础库: `2.7.0` + * + * 在竖屏正方向下的安全区域 */ + safeArea: SafeArea + /** 需要基础库: `1.1.0` + * + * 屏幕高度,单位px */ + screenHeight: number + /** 需要基础库: `1.1.0` + * + * 屏幕宽度,单位px */ + screenWidth: number + /** 需要基础库: `1.9.0` + * + * 状态栏的高度,单位px */ + statusBarHeight: number + /** 操作系统及版本 */ + system: string + /** 微信版本号 */ + version: string + /** 需要基础库: `2.6.0` + * + * Wi-Fi 的系统开关 */ + wifiEnabled: boolean + /** 可使用窗口高度,单位px */ + windowHeight: number + /** 可使用窗口宽度,单位px */ + windowWidth: number + /** 需要基础库: `2.11.0` + * + * 系统当前主题,取值为`light`或`dark`,全局配置`"darkmode":true`时才能获取,否则为 undefined (不支持小游戏) + * + * 可选值: + * - 'dark': 深色主题; + * - 'light': 浅色主题; */ + theme?: 'dark' | 'light' + } + /** 需要基础库: `2.12.3` + * + * 当前小程序运行的宿主环境 */ + interface SystemInfoHost { + /** 宿主 app 对应的 appId */ + appId: string + } + interface SystemSetting { + /** 蓝牙的系统开关 */ + bluetoothEnabled: boolean + /** 设备方向 + * + * 可选值: + * - 'portrait': 竖屏; + * - 'landscape': 横屏; */ + deviceOrientation: 'portrait' | 'landscape' + /** 地理位置的系统开关 */ + locationEnabled: boolean + /** Wi-Fi 的系统开关 */ + wifiEnabled: boolean + } + interface TCPSocketConnectOption { + /** 套接字要连接的地址 */ + address: string + /** 套接字要连接的端口 */ + port: number + /** 套接字要连接的超时时间,默认为 2s */ + timeout?: number + } + interface TCPSocketOnMessageListenerResult { + /** 接收端地址信息 */ + localInfo: LocalInfo + /** 收到的消息 */ + message: ArrayBuffer + /** 发送端地址信息 */ + remoteInfo: RemoteInfo + } + interface TakePhotoOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: TakePhotoCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: TakePhotoFailCallback + /** 成像质量 + * + * 可选值: + * - 'high': 高质量; + * - 'normal': 普通质量; + * - 'low': 低质量; */ + quality?: 'high' | 'normal' | 'low' + /** 需要基础库: `2.22.0` + * + * 是否开启镜像 */ + selfieMirror?: boolean + /** 接口调用成功的回调函数 */ + success?: TakePhotoSuccessCallback + } + interface TakePhotoSuccessCallbackResult { + /** 照片文件的临时路径 (本地路径),安卓是jpg图片格式,ios是png */ + tempImagePath: string + errMsg: string + } + /** 标签类型枚举 */ + interface TechType { + /** 对应IsoDep实例,实例支持ISO-DEP (ISO 14443-4)标准的读写 */ + isoDep: string + /** 对应MifareClassic实例,实例支持MIFARE Classic标签的读写 */ + mifareClassic: string + /** 对应MifareUltralight实例,实例支持MIFARE Ultralight标签的读写 */ + mifareUltralight: string + /** 对应Ndef实例,实例支持对NDEF格式的NFC标签上的NDEF数据的读写 */ + ndef: string + /** 对应NfcA实例,实例支持NFC-A (ISO 14443-3A)标准的读写 */ + nfcA: string + /** 对应NfcB实例,实例支持NFC-B (ISO 14443-3B)标准的读写 */ + nfcB: string + /** 对应NfcF实例,实例支持NFC-F (JIS 6319-4)标准的读写 */ + nfcF: string + /** 对应NfcV实例,实例支持NFC-V (ISO 15693)标准的读写 */ + nfcV: string + } + interface TextMetrics { + /** 文本的宽度 */ + width: number + } + interface ToScreenLocationOption { + /** 纬度 */ + latitude: number + /** 经度 */ + longitude: number + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: ToScreenLocationCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: ToScreenLocationFailCallback + /** 接口调用成功的回调函数 */ + success?: ToScreenLocationSuccessCallback + } + interface ToScreenLocationSuccessCallbackResult { + /** x 坐标值 */ + x: number + /** y 坐标值 */ + y: number + errMsg: string + } + interface ToggleTorchOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: ToggleTorchCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: ToggleTorchFailCallback + /** 接口调用成功的回调函数 */ + success?: ToggleTorchSuccessCallback + } + /** 跟踪能力配置,目前不同的跟踪能力之间是互斥的,默认使用平面跟踪能力。需要注意目前 track 中不同的跟踪配置存在互斥关系(比如 marker 跟踪配置和 OSD 跟踪配置不能同时存在),请按需配置。 */ + interface Track { + /** 平面跟踪配置 */ + plane: PlaneTrack + /** 需要基础库: `2.24.5` + * + * OSD 跟踪配置 */ + OSD?: boolean + /** 需要基础库: `2.25.0` + * + * 人脸检测配置。用法详情[指南文档](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/visionkit/face.html)。安卓微信8.0.25开始支持,iOS微信8.0.24开始支持。 */ + face?: FaceTrack + /** 需要基础库: `2.24.5` + * + * marker 跟踪配置 */ + marker?: boolean + } + interface TransceiveOption { + /** 需要传递的二进制数据 */ + data: ArrayBuffer + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: TransceiveCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: TransceiveFailCallback + /** 接口调用成功的回调函数 */ + success?: TransceiveSuccessCallback + } + interface TransceiveSuccessCallbackResult { + data: ArrayBuffer + errMsg: string + } + interface TranslateMarkerOption { + /** 移动过程中是否自动旋转 marker */ + autoRotate: boolean + /** 指定 marker 移动到的目标点 */ + destination: DestinationOption + /** 指定 marker */ + markerId: number + /** marker 的旋转角度 */ + rotate: number + /** 动画结束回调函数 */ + animationEnd?: (...args: any[]) => any + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: TranslateMarkerCompleteCallback + /** 动画持续时长,平移与旋转分别计算 */ + duration?: number + /** 接口调用失败的回调函数 */ + fail?: TranslateMarkerFailCallback + /** 需要基础库: `2.13.0` + * + * 平移和旋转同时进行 */ + moveWithRotate?: boolean + /** 接口调用成功的回调函数 */ + success?: TranslateMarkerSuccessCallback + } + interface TruncateFailCallbackResult { + /** 错误信息 + * + * 可选值: + * - 'fail no such file or directory, open ${filePath}': 指定的 filePath 所在目录不存在; + * - 'fail illegal operation on a directory, open "${filePath}"': 指定的 filePath 是一个已经存在的目录; + * - 'fail permission denied, open ${dirPath}': 指定的 filePath 路径没有写权限; + * - 'fail the maximum size of the file storage limit is exceeded': 存储空间不足; + * - 'fail sdcard not mounted': android sdcard 挂载失败; */ + errMsg: string + } + interface TruncateOption { + /** 要截断的文件路径 (本地路径) */ + filePath: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: TruncateCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: TruncateFailCallback + /** 截断位置,默认0。如果 length 小于文件长度(字节),则只有前面 length 个字节会保留在文件中,其余内容会被删除;如果 length 大于文件长度,则会对其进行扩展,并且扩展部分将填充空字节('\0') */ + length?: number + /** 接口调用成功的回调函数 */ + success?: TruncateSuccessCallback + } + interface TruncateSyncOption { + /** 要截断的文件路径 (本地路径) */ + filePath: string + /** 截断位置,默认0。如果 length 小于文件长度(字节),则只有前面 length 个字节会保留在文件中,其余内容会被删除;如果 length 大于文件长度,则会对其进行扩展,并且扩展部分将填充空字节('\0') */ + length?: number + } + interface UDPSocketConnectOption { + /** 要发消息的地址 */ + address: string + /** 要发送消息的端口号 */ + port: number + } + interface UDPSocketOnMessageListenerResult { + /** 接收端地址信息,2.18.0 起支持 */ + localInfo: LocalInfo + /** 收到的消息。消息长度需要小于4096。 */ + message: ArrayBuffer + /** 发送端地址信息 */ + remoteInfo: RemoteInfo + } + interface UDPSocketSendOption { + /** 要发消息的地址。在基础库 <= 2.9.3 版本必须是和本机同网段的 IP 地址,或安全域名列表内的域名地址;之后版本可以是任意 IP 和域名 */ + address: string + /** 要发送的数据 */ + message: string | ArrayBuffer + /** 要发送消息的端口号 */ + port: number + /** 发送数据的长度,仅当 message 为 ArrayBuffer 类型时有效 */ + length?: number + /** 发送数据的偏移量,仅当 message 为 ArrayBuffer 类型时有效 */ + offset?: number + /** 向指定地址发消息时,是否要开启广播,基础库 2.24.0 开始支持 */ + setBroadcast?: boolean + } + interface UndoOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: UndoCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: UndoFailCallback + /** 接口调用成功的回调函数 */ + success?: UndoSuccessCallback + } + interface UnlinkFailCallbackResult { + /** 错误信息 + * + * 可选值: + * - 'fail permission denied, open ${path}': 指定的 path 路径没有读权限; + * - 'fail no such file or directory ${path}': 文件不存在; + * - 'fail operation not permitted, unlink ${filePath}': 传入的 filePath 是一个目录; + * - 'fail sdcard not mounted': Android sdcard 挂载失败; */ + errMsg: string + } + interface UnlinkOption { + /** 要删除的文件路径 (本地路径) */ + filePath: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: UnlinkCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: UnlinkFailCallback + /** 接口调用成功的回调函数 */ + success?: UnlinkSuccessCallback + } + interface UnzipFailCallbackResult { + /** 错误信息 + * + * 可选值: + * - 'fail permission denied, unzip ${zipFilePath} -> ${destPath}': 指定目标文件路径没有写权限; + * - 'fail no such file or directory, unzip ${zipFilePath} -> "${destPath}': 源文件不存在,或目标文件路径的上层目录不存在; */ + errMsg: string + } + interface UnzipOption { + /** 目标目录路径, 支持本地路径 */ + targetPath: string + /** 源文件路径,支持本地路径, 只可以是 zip 压缩文件 */ + zipFilePath: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: UnzipCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: UnzipFailCallback + /** 接口调用成功的回调函数 */ + success?: UnzipSuccessCallback + } + /** 参数列表 */ + interface UpdatableMessageFrontEndParameter { + /** 参数名 */ + name: string + /** 参数值 */ + value: string + } + /** 需要基础库: `2.4.0` + * + * 动态消息的模板信息 */ + interface UpdatableMessageFrontEndTemplateInfo { + /** 参数列表 */ + parameterList: UpdatableMessageFrontEndParameter[] + } + interface UpdateGroundOverlayOption { + /** 图片覆盖的经纬度范围 */ + bounds: MapBounds + /** 图片图层 id */ + id: string + /** 图片路径,支持网络图片、临时路径、代码包路径 */ + src: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: UpdateGroundOverlayCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: UpdateGroundOverlayFailCallback + /** 图层透明度 */ + opacity?: number + /** 接口调用成功的回调函数 */ + success?: UpdateGroundOverlaySuccessCallback + /** 是否可见 */ + visible?: boolean + /** 图层绘制顺序 */ + zIndex?: number + } + interface UpdateShareMenuOption { + /** 需要基础库: `2.4.0` + * + * 动态消息的 activityId。通过 [updatableMessage.createActivityId](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/updatable-message/updatableMessage.createActivityId.html) 接口获取 */ + activityId?: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: UpdateShareMenuCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: UpdateShareMenuFailCallback + /** 需要基础库: `2.13.0` + * + * 是否是私密消息。详见 [小程序私密消息](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/share/private-message.html) */ + isPrivateMessage?: boolean + /** 需要基础库: `2.4.0` + * + * 是否是动态消息,详见[动态消息](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/share/updatable-message.html) */ + isUpdatableMessage?: boolean + /** 接口调用成功的回调函数 */ + success?: UpdateShareMenuSuccessCallback + /** 需要基础库: `2.4.0` + * + * 动态消息的模板信息 */ + templateInfo?: UpdatableMessageFrontEndTemplateInfo + /** 需要基础库: `2.11.0` + * + * 群待办消息的id,通过toDoActivityId可以把多个群待办消息聚合为同一个。通过 [updatableMessage.createActivityId](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/updatable-message/updatableMessage.createActivityId.html) 接口获取。详见[群待办消息](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/share.html) */ + toDoActivityId?: string + /** 是否使用带 shareTicket 的转发[详情](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/share.html) */ + withShareTicket?: boolean + } + interface UpdateVoIPChatMuteConfigOption { + /** 静音设置 */ + muteConfig: MuteConfig + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: UpdateVoIPChatMuteConfigCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: UpdateVoIPChatMuteConfigFailCallback + /** 接口调用成功的回调函数 */ + success?: UpdateVoIPChatMuteConfigSuccessCallback + } + interface UpdateWeChatAppOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: UpdateWeChatAppCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: UpdateWeChatAppFailCallback + /** 接口调用成功的回调函数 */ + success?: UpdateWeChatAppSuccessCallback + } + interface UploadFileOption { + /** 要上传文件资源的路径 (本地路径) */ + filePath: string + /** 文件对应的 key,开发者在服务端可以通过这个 key 获取文件的二进制内容 */ + name: string + /** 开发者服务器地址 */ + url: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: UploadFileCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: UploadFileFailCallback + /** HTTP 请求中其他额外的 form data */ + formData?: IAnyObject + /** HTTP 请求 Header,Header 中不能设置 Referer */ + header?: IAnyObject + /** 接口调用成功的回调函数 */ + success?: UploadFileSuccessCallback + /** 需要基础库: `2.10.0` + * + * 超时时间,单位为毫秒 */ + timeout?: number + } + interface UploadFileSuccessCallbackResult { + /** 开发者服务器返回的数据 */ + data: string + /** 开发者服务器返回的 HTTP 状态码 */ + statusCode: number + errMsg: string + } + interface UploadTaskOnProgressUpdateListenerResult { + /** 上传进度百分比 */ + progress: number + /** 预期需要上传的数据总长度,单位 Bytes */ + totalBytesExpectedToSend: number + /** 已经上传的数据长度,单位 Bytes */ + totalBytesSent: number + } + /** @warning **用户头像昵称获取规则已调整,参考 [用户信息接口调整说明](https://developers.weixin.qq.com/community/develop/doc/000cacfa20ce88df04cb468bc52801)、[小程序用户头像昵称获取规则调整公告](https://developers.weixin.qq.com/community/develop/doc/00022c683e8a80b29bed2142b56c01)** + * + * 用户信息 */ + interface UserInfo { + /** 用户头像图片的 URL。URL 最后一个数值代表正方形头像大小(有 0、46、64、96、132 数值可选,0 代表 640x640 的正方形头像,46 表示 46x46 的正方形头像,剩余数值以此类推。默认132),用户没有头像时该项为空。若用户更换头像,原有头像 URL 将失效。 */ + avatarUrl: string + /** 用户所在城市。不再返回,参考 [相关公告](https://developers.weixin.qq.com/community/develop/doc/00028edbe3c58081e7cc834705b801) */ + city: string + /** 用户所在国家。不再返回,参考 [相关公告](https://developers.weixin.qq.com/community/develop/doc/00028edbe3c58081e7cc834705b801) */ + country: string + /** 用户性别。不再返回,参考 [相关公告](https://developers.weixin.qq.com/community/develop/doc/00028edbe3c58081e7cc834705b801) + * + * 可选值: + * - 0: 未知; + * - 1: 男性; + * - 2: 女性; */ + gender: 0 | 1 | 2 + /** 显示 country,province,city 所用的语言。强制返回 “zh_CN”,参考 [相关公告](https://developers.weixin.qq.com/community/develop/doc/00028edbe3c58081e7cc834705b801) + * + * 可选值: + * - 'en': 英文; + * - 'zh_CN': 简体中文; + * - 'zh_TW': 繁体中文; */ + language: 'en' | 'zh_CN' | 'zh_TW' + /** 用户昵称 */ + nickName: string + /** 用户所在省份。不再返回,参考 [相关公告](https://developers.weixin.qq.com/community/develop/doc/00028edbe3c58081e7cc834705b801) */ + province: string + } + /** 需要基础库: `2.20.0` + * + * 相机对象 */ + interface VKCamera { + /** 需要基础库: `2.22.0` + * + * 相机内参,只有 v2 版本支持 */ + intrinsics: Float32Array + /** 视图矩阵 */ + viewMatrix: Float32Array + } + interface VKConfig { + /** 跟踪能力配置,目前不同的跟踪能力之间是互斥的,默认使用平面跟踪能力。需要注意目前 track 中不同的跟踪配置存在互斥关系(比如 marker 跟踪配置和 OSD 跟踪配置不能同时存在),请按需配置。 */ + track: Track + /** 需要基础库: `2.23.0` + * + * 绑定的 WebGLRenderingContext 对象 */ + gl?: WebGLRenderingContext + /** 需要基础库: `2.22.0` + * + * vision kit 版本。 + * + * 可选值: + * - 'v1': v1适用于用户在平面场景下,例如桌面,地面,泛平面场景,放置虚拟物体,不提供真实世界距离。用户放置物体时,手机相机倾斜向下对着目标平面点击即可,具有广泛的机型支持; + * - 'v2': v2提供真实物理距离的 ar 定位功能,提供平面识别功能,用户在平面范围点击放置虚拟物体的功能,具有[有限的机型支持](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/visionkit/plane.html#%E9%99%84%E5%BD%95)。iOS 设备在基础库 2.22.0 开始支持v2。安卓设备在基础库 2.25.1 开始支持v2,另外,安卓v2不支持竖直平面。; */ + version?: 'v1' | 'v2' + } + /** 需要基础库: `2.25.0` + * + * 人脸 anchor + * + * **示例代码** + * + * [静态图像人脸检测能力使用参考](https://github.com/wechat-miniprogram/miniprogram-demo/tree/master/miniprogram/packageAPI/pages/ar/photo-face-detect) + * + * [实时摄像头人脸检测能力使用参考](https://github.com/wechat-miniprogram/miniprogram-demo/tree/master/miniprogram/packageAPI/pages/ar/face-detect) */ + interface VKFaceAnchor { + /** 人脸角度信息 */ + angle: number[] + /** 关键点的置信度 */ + confidence: number[] + /** 识别序号 */ + detectId: number + /** 唯一标识 */ + id: number + /** 相对视窗的位置信息,取值范围为 [0, 1],0 为左/上边缘,1 为右/下边缘 */ + origin: VKOrigin + /** 人脸 106 个关键点的坐标 */ + points: VKPoint[] + /** 相对视窗的尺寸,取值范围为 [0, 1],0 为左/上边缘,1 为右/下边缘 */ + size: VKSize + /** 类型 + * + * 可选值: + * - 3: 人脸; */ + type: 3 + } + /** 需要基础库: `2.20.0` + * + * vision kit 会话对象。 */ + interface VKFrame { + /** [VKCamera](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/VKCamera.html) + * + * 相机对象 */ + camera: VKCamera + /** 生成时间 */ + timestamp: number + } + interface VKMarker { + /** marker id */ + markerId: number + /** 图片路径 */ + path: string + } + /** 需要基础库: `2.24.5` + * + * marker anchor + * + * **示例代码** + * + * [2D Marker能力使用参考](https://github.com/wechat-miniprogram/miniprogram-demo/tree/master/miniprogram/packageAPI/pages/ar/2dmarker-ar) */ + interface VKMarkerAnchor { + /** 唯一标识 */ + id: number + /** marker id */ + markerId: number + /** 图片路径 */ + path: string + /** 包含位置、旋转、放缩信息的矩阵,以列为主序 */ + transform: Float32Array + /** 类型 + * + * 可选值: + * - 1: marker; */ + type: 1 + } + /** 需要基础库: `2.24.5` + * + * OSD anchor + * + * **示例代码** + * + * [单样本检测(OSD)能力使用参考](https://github.com/wechat-miniprogram/miniprogram-demo/tree/master/miniprogram/packageAPI/pages/ar/osd-ar) */ + interface VKOSDAnchor { + /** 唯一标识 */ + id: number + /** marker id */ + markerId: number + /** 相对视窗的位置信息,取值范围为 [0, 1],0 为左/上边缘,1 为右/下边缘 */ + origin: VKOrigin + /** 图片路径 */ + path: string + /** 相对视窗的尺寸,取值范围为 [0, 1],0 为左/上边缘,1 为右/下边缘 */ + size: VKSize + /** 类型 + * + * 可选值: + * - 2: OSD; */ + type: 2 + } + /** 相对视窗的位置信息,取值范围为 [0, 1],0 为左/上边缘,1 为右/下边缘 */ + interface VKOrigin { + /** 横坐标 */ + x: number + /** 纵坐标 */ + y: number + } + /** 需要基础库: `2.22.0` + * + * 平面 anchor,只有 v2 版本支持 + * + * **示例代码** + * + * v1 版本:[水平面AR能力使用参考](https://github.com/wechat-miniprogram/miniprogram-demo/tree/master/miniprogram/packageAPI/pages/ar/plane-ar) + * v2 版本:[水平面AR能力v2使用参考](https://github.com/wechat-miniprogram/miniprogram-demo/tree/master/miniprogram/packageAPI/pages/ar/plane-ar-v2) */ + interface VKPlaneAnchor { + /** 方向 */ + alignment: number + /** 唯一标识 */ + id: number + /** 尺寸 */ + size: VKSize + /** 包含位置、旋转、放缩信息的矩阵,以列为主序 */ + transform: Float32Array + /** 类型 + * + * 可选值: + * - 0: 平面; */ + type: 0 + } + /** 人脸 106 个关键点的坐标 */ + interface VKPoint { + /** 横坐标 */ + x: number + /** 纵坐标 */ + y: number + } + /** 需要基础库: `2.20.0` + * + * vision kit 会话对象。 */ + interface VKSession { + /** 相机尺寸 */ + cameraSize: VKSize + /** 会话配置 */ + config: VKConfig + /** 会话状态 + * + * 可选值: + * - 0: 不可用; + * - 1: 运行中; + * - 2: 暂停中; */ + state: 0 | 1 | 2 + } + interface VKSize { + /** 高度 */ + height: number + /** 宽度 */ + width: number + } + interface VibrateLongOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: VibrateLongCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: VibrateLongFailCallback + /** 接口调用成功的回调函数 */ + success?: VibrateLongSuccessCallback + } + interface VibrateShortFailCallbackResult { + /** 错误信息 + * + * 可选值: + * - 'style is not support': 当前设备不支持设置震动等级; */ + errMsg: string + } + interface VibrateShortOption { + /** 需要基础库: `2.13.0` + * + * 震动强度类型,有效值为:heavy、medium、light */ + type: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: VibrateShortCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: VibrateShortFailCallback + /** 接口调用成功的回调函数 */ + success?: VibrateShortSuccessCallback + } + interface VideoContextRequestFullScreenOption { + /** 需要基础库: `1.7.0` + * + * 设置全屏时视频的方向,不指定则根据宽高比自动判断。 + * + * 可选值: + * - 0: 正常竖向; + * - 90: 屏幕逆时针90度; + * - -90: 屏幕顺时针90度; */ + direction?: 0 | 90 | -90 + } + interface VideoDecoderStartOption { + /** 需要解码的视频源文件。基础库 2.13.0 以下的版本只支持本地路径。 2.13.0 开始支持 http:// 和 https:// 协议的远程路径。 */ + source: string + /** 需要基础库: `2.15.0` + * + * 是否不需要音频轨道 */ + abortAudio?: boolean + /** 需要基础库: `2.15.0` + * + * 是否不需要视频轨道 */ + abortVideo?: boolean + /** 解码模式。0:按 pts 解码;1:以最快速度解码 */ + mode?: number + } + interface VoIP1v1ChatUser { + /** 昵称 */ + nickname: string + /** 小程序内 openid */ + openid: string + /** 头像 */ + headImage?: string + } + /** 需要基础库: `2.19.0` +* +* WebAudioContext 实例,通过[wx.createWebAudioContext](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/wx.createWebAudioContext.html) 接口获取该实例。 +* +* **示例代码** +* +* ```js +// 监听状态 +const audioCtx = wx.createWebAudioContext() +audioCtx.onstatechange = () => { + console.log(ctx.state) +} +setTimeout(audioCtx.suspend, 1000) +setTimeout(audioCtx.resume, 2000) +``` */ + interface WebAudioContext { + /** 获取当前上下文的时间戳。 */ + currentTime: number + /** [WebAudioContextNode](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/WebAudioContextNode.html) + * + * 当前上下文的最终目标节点,一般是音频渲染设备。 */ + destination: WebAudioContextNode + /** 空间音频监听器。 */ + listener: AudioListener + /** 可写属性,开发者可以对该属性设置一个监听函数,当WebAudio状态改变的时候,会触发开发者设置的监听函数。 */ + onstatechange: (...args: any[]) => any + /** 采样率,通常在8000-96000之间,通常44100hz的采样率最为常见。 */ + sampleRate: number + /** 当前WebAudio上下文的状态。可能的值如下:suspended(暂停)、running(正在运行)、closed(已关闭)。需要注意的是,不要在 audioContext close后再访问state属性 */ + state: string + } + /** 需要基础库: `2.19.0` + * + * 一类音频处理模块,不同的Node具备不同的功能,如GainNode(音量调整)等。一个WebAudioContextNode可以通过上下文来创建。 + * 目前已经支持以下Node: + * IIRFilterNode + * WaveShaperNode + * ConstantSourceNode + * ChannelMergerNode + * OscillatorNode + * GainNode + * BiquadFilterNode + * PeriodicWaveNode + * BufferSourceNode + * ChannelSplitterNode + * ChannelMergerNode + * DelayNode + * DynamicsCompressorNode + * ScriptProcessorNode + * PannerNode + * AnalyserNode */ + interface WebAudioContextNode { + /** 表示监听器的前向系统在同一笛卡尔坐标系中的水平位置,作为位置(位置x,位置和位置和位置)值。 */ + forwardX: number + /** 表示听众的前向方向在同一笛卡尔坐标系中作为位置(位置x,位置和位置和位置)值的垂直位置。 */ + forwardY: number + /** 表示与position (positionX、positionY和positionZ)值在同一笛卡尔坐标系下的听者前进方向的纵向(前后)位置。 */ + forwardZ: number + /** 右手笛卡尔坐标系中X轴的位置。 */ + positionX: number + /** 右手笛卡尔坐标系中Y轴的位置。 */ + positionY: number + /** 右手笛卡尔坐标系中Z轴的位置。 */ + positionZ: number + /** 设置监听器的方向 */ + setOrientation: (...args: any[]) => any + /** 设置监听器的位置 + * + * /** */ + setPosition: (...args: any[]) => any + /** 表示在与position (positionX、positionY和positionZ)值相同的笛卡尔坐标系中侦听器向前方向的水平位置。 */ + upX: number + /** 表示在与position (positionX、positionY和positionZ)值相同的笛卡尔坐标系中侦听器向上方向的水平位置。 */ + upY: number + /** 表示在与position (positionX、positionY和positionZ)值相同的笛卡尔坐标系中侦听器向后方向的水平位置。 */ + upZ: number + } + /** 提供预设的 Wi-Fi 信息列表 */ + interface WifiData { + /** Wi-Fi 的 BSSID */ + BSSID?: string + /** Wi-Fi 的 SSID */ + SSID?: string + /** Wi-Fi 设备密码 */ + password?: string + } + /** Wifi 信息 + * + * **注意** + * + * - 安卓 wx.connectWifi / wx.getConnectedWifi 若设置了 partialInfo:true ,或者调用了 wx.onWifiConnectedWithPartialInfo 事件。将会返回只包含 SSID 属性的 WifiInfo 对象。 + * - iOS wx.getConnectedWifi 若设置了 partialInfo:true ,将会返回只包含 SSID、BSSID 属性的 WifiInfo 对象,且需要用户开启微信定位权限才能正确返回结果。 + * - 在某些情况下,可能 Wi-Fi 已经连接成功,但会因为获取不到完整的 WifiInfo 对象报错。具体错误信息为 errCode: 12010, errMsg: can't gain current wifi 或 no wifi is connected 。如果开发者不需要完整的 WifiInfo 对象,则可以通过采取上述策略解决报错问题。 */ + interface WifiInfo { + /** Wi-Fi 的 BSSID */ + BSSID: string + /** Wi-Fi 的 SSID */ + SSID: string + /** 需要基础库: `2.12.0` + * + * Wi-Fi 频段单位 MHz */ + frequency: number + /** Wi-Fi 是否安全 */ + secure: boolean + /** Wi-Fi 信号强度, 安卓取值 0 ~ 100 ,iOS 取值 0 ~ 1 ,值越大强度越大 */ + signalStrength: number + } + interface WindowInfo { + /** 设备像素比 */ + pixelRatio: number + /** 在竖屏正方向下的安全区域 */ + safeArea: SafeArea + /** 屏幕高度,单位px */ + screenHeight: number + /** 窗口上边缘的y值 */ + screenTop: number + /** 屏幕宽度,单位px */ + screenWidth: number + /** 状态栏的高度,单位px */ + statusBarHeight: number + /** 可使用窗口高度,单位px */ + windowHeight: number + /** 可使用窗口宽度,单位px */ + windowWidth: number + } + /** Worker 实例,主线程中可通过 [wx.createWorker](https://developers.weixin.qq.com/miniprogram/dev/api/worker/wx.createWorker.html) 接口获取,worker 线程中可通过全局变量 `worker` 获取。 +* +* **示例代码** +* +* 运行以下代码需先进行基础配置,详细请查阅 [小程序多线程](https://developers.weixin.qq.com/miniprogram/dev/framework/workers.html) | [小游戏多线程](https://developers.weixin.qq.com/minigame/dev/guide/base-ability/worker.html) 文档了解基础知识和配置方法。 +* +* ```js +const worker = wx.createWorker('workers/request/index.js') // 文件名指定 worker 的入口文件路径,绝对路径 + +worker.onMessage(function (res) { + console.log(res) +}) +// 监听worker被系统回收事件 +worker.onProcessKilled(function () { + console.log('worker has been killed') + // 重新创建一个worker + // wx.createWorker() +}) + +worker.postMessage({ + msg: 'hello worker' +}) + +worker.terminate() +``` */ + interface Worker { + /** worker内的环境变量 */ + env: WorkerEnv + } + /** worker内的环境变量 */ + interface WorkerEnv { + /** 文件系统中的用户目录路径 (本地路径) */ + USER_DATA_PATH: string + } + interface WorkerOnMessageListenerResult { + /** 主线程/Worker 线程向当前线程发送的消息 */ + message: IAnyObject + } + interface WriteBLECharacteristicValueOption { + /** 蓝牙特征的 UUID */ + characteristicId: string + /** 蓝牙设备 id */ + deviceId: string + /** 蓝牙特征对应服务的 UUID */ + serviceId: string + /** 蓝牙设备特征对应的二进制值 */ + value: ArrayBuffer + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: WriteBLECharacteristicValueCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: WriteBLECharacteristicValueFailCallback + /** 接口调用成功的回调函数 */ + success?: WriteBLECharacteristicValueSuccessCallback + /** 蓝牙特征值的写模式设置,有两种模式,iOS 优先 write,安卓优先 writeNoResponse 。(基础库 2.22.0 开始支持) + * + * 可选值: + * - 'write': 强制回复写,不支持时报错; + * - 'writeNoResponse': 强制无回复写,不支持时报错; */ + writeType?: 'write' | 'writeNoResponse' + } + interface WriteCharacteristicValueObject { + /** 蓝牙特征的 UUID */ + characteristicId: string + /** 是否需要通知主机 value 已更新 */ + needNotify: boolean + /** 蓝牙特征对应服务的 UUID */ + serviceId: string + /** characteristic 对应的二进制值 */ + value: ArrayBuffer + /** 可选,处理回包时使用 */ + callbackId?: number + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: WriteCharacteristicValueCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: WriteCharacteristicValueFailCallback + /** 接口调用成功的回调函数 */ + success?: WriteCharacteristicValueSuccessCallback + } + interface WriteFailCallbackResult { + /** 错误信息 + * + * 可选值: + * - 'bad file descriptor': 无效的文件描述符; + * - 'fail permission denied': 指定的 fd 路径没有写权限; + * - 'fail sdcard not mounted': android sdcard 挂载失败; */ + errMsg: string + } + interface WriteFileFailCallbackResult { + /** 错误信息 + * + * 可选值: + * - 'fail no such file or directory, open ${filePath}': 指定的 filePath 所在目录不存在; + * - 'fail permission denied, open ${dirPath}': 指定的 filePath 路径没有写权限; + * - 'fail the maximum size of the file storage limit is exceeded': 存储空间不足; + * - 'fail sdcard not mounted': Android sdcard 挂载失败; */ + errMsg: string + } + interface WriteFileOption { + /** 要写入的文本或二进制数据 */ + data: string | ArrayBuffer + /** 要写入的文件路径 (本地路径) */ + filePath: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: WriteFileCompleteCallback + /** 指定写入文件的字符编码 + * + * 可选值: + * - 'ascii': ; + * - 'base64': ; + * - 'binary': ; + * - 'hex': ; + * - 'ucs2': 以小端序读取; + * - 'ucs-2': 以小端序读取; + * - 'utf16le': 以小端序读取; + * - 'utf-16le': 以小端序读取; + * - 'utf-8': ; + * - 'utf8': ; + * - 'latin1': ; */ + encoding?: + | 'ascii' + | 'base64' + | 'binary' + | 'hex' + | 'ucs2' + | 'ucs-2' + | 'utf16le' + | 'utf-16le' + | 'utf-8' + | 'utf8' + | 'latin1' + /** 接口调用失败的回调函数 */ + fail?: WriteFileFailCallback + /** 接口调用成功的回调函数 */ + success?: WriteFileSuccessCallback + } + interface WriteNdefMessageOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: WriteNdefMessageCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: WriteNdefMessageFailCallback + /** 二进制对象数组, 需要指明 id, type 以及 payload (均为 ArrayBuffer 类型) */ + records?: any[] + /** 接口调用成功的回调函数 */ + success?: WriteNdefMessageSuccessCallback + /** text 数组 */ + texts?: any[] + /** uri 数组 */ + uris?: any[] + } + interface WriteOption { + /** 写入的内容,类型为 String 或 ArrayBuffer */ + data: string | ArrayBuffer + /** 文件描述符。fd 通过 [FileSystemManager.open](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.open.html) 或 [FileSystemManager.openSync](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.openSync.html) 接口获得 */ + fd: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: WriteCompleteCallback + /** 只在 data 类型是 String 时有效,指定写入文件的字符编码,默认为 utf8 + * + * 可选值: + * - 'ascii': ; + * - 'base64': ; + * - 'binary': ; + * - 'hex': ; + * - 'ucs2': 以小端序读取; + * - 'ucs-2': 以小端序读取; + * - 'utf16le': 以小端序读取; + * - 'utf-16le': 以小端序读取; + * - 'utf-8': ; + * - 'utf8': ; + * - 'latin1': ; */ + encoding?: + | 'ascii' + | 'base64' + | 'binary' + | 'hex' + | 'ucs2' + | 'ucs-2' + | 'utf16le' + | 'utf-16le' + | 'utf-8' + | 'utf8' + | 'latin1' + /** 接口调用失败的回调函数 */ + fail?: WriteFailCallback + /** 只在 data 类型是 ArrayBuffer 时有效,指定要写入的字节数,默认为 arrayBuffer 从0开始偏移 offset 个字节后剩余的字节数 */ + length?: number + /** 只在 data 类型是 ArrayBuffer 时有效,决定 arrayBuffe 中要被写入的部位,即 arrayBuffer 中的索引,默认0 */ + offset?: number + /** 指定文件开头的偏移量,即数据要被写入的位置。当 position 不传或者传入非 Number 类型的值时,数据会被写入当前指针所在位置。 */ + position?: number + /** 接口调用成功的回调函数 */ + success?: WriteSuccessCallback + } + /** 文件写入结果。 通过 [FileSystemManager.writeSync](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.writeSync.html) 接口返回 */ + interface WriteResult { + /** 实际被写入到文件中的字节数(注意,被写入的字节数不一定与被写入的字符串字符数相同) */ + bytesWritten: number + } + interface WriteSuccessCallbackResult { + /** 实际被写入到文件中的字节数(注意,被写入的字节数不一定与被写入的字符串字符数相同) */ + bytesWritten: number + errMsg: string + } + interface WriteSyncOption { + /** 写入的内容,类型为 String 或 ArrayBuffer */ + data: string | ArrayBuffer + /** 文件描述符。fd 通过 [FileSystemManager.open](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.open.html) 或 [FileSystemManager.openSync](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.openSync.html) 接口获得 */ + fd: string + /** 只在 data 类型是 String 时有效,指定写入文件的字符编码,默认为 utf8 + * + * 可选值: + * - 'ascii': ; + * - 'base64': ; + * - 'binary': ; + * - 'hex': ; + * - 'ucs2': 以小端序读取; + * - 'ucs-2': 以小端序读取; + * - 'utf16le': 以小端序读取; + * - 'utf-16le': 以小端序读取; + * - 'utf-8': ; + * - 'utf8': ; + * - 'latin1': ; */ + encoding?: + | 'ascii' + | 'base64' + | 'binary' + | 'hex' + | 'ucs2' + | 'ucs-2' + | 'utf16le' + | 'utf-16le' + | 'utf-8' + | 'utf8' + | 'latin1' + /** 只在 data 类型是 ArrayBuffer 时有效,指定要写入的字节数,默认为 arrayBuffer 从0开始偏移 offset 个字节后剩余的字节数 */ + length?: number + /** 只在 data 类型是 ArrayBuffer 时有效,决定 arrayBuffe 中要被写入的部位,即 arrayBuffer 中的索引,默认0 */ + offset?: number + /** 指定文件开头的偏移量,即数据要被写入的位置。当 position 不传或者传入非 Number 类型的值时,数据会被写入当前指针所在位置。 */ + position?: number + } + interface WxGetFileInfoOption { + /** 本地文件路径 (本地路径) */ + filePath: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: GetFileInfoCompleteCallback + /** 计算文件摘要的算法 + * + * 可选值: + * - 'md5': md5 算法; + * - 'sha1': sha1 算法; */ + digestAlgorithm?: 'md5' | 'sha1' + /** 接口调用失败的回调函数 */ + fail?: WxGetFileInfoFailCallback + /** 接口调用成功的回调函数 */ + success?: WxGetFileInfoSuccessCallback + } + interface WxGetFileInfoSuccessCallbackResult { + /** 按照传入的 digestAlgorithm 计算得出的的文件摘要 */ + digest: string + /** 文件大小,以字节为单位 */ + size: number + errMsg: string + } + interface WxGetSavedFileListOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: GetSavedFileListCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: GetSavedFileListFailCallback + /** 接口调用成功的回调函数 */ + success?: WxGetSavedFileListSuccessCallback + } + interface WxGetSavedFileListSuccessCallbackResult { + /** 文件数组,每一项是一个 FileItem */ + fileList: FileItem[] + errMsg: string + } + interface WxRemoveSavedFileOption { + /** 需要删除的文件路径 (本地路径) */ + filePath: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: RemoveSavedFileCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: WxRemoveSavedFileFailCallback + /** 接口调用成功的回调函数 */ + success?: RemoveSavedFileSuccessCallback + } + interface WxSaveFileOption { + /** 需要保存的文件的临时路径 (本地路径) */ + tempFilePath: string + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: SaveFileCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: WxSaveFileFailCallback + /** 接口调用成功的回调函数 */ + success?: SaveFileSuccessCallback + } + interface WxStartRecordOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: StartRecordCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: StartRecordFailCallback + /** 接口调用成功的回调函数 */ + success?: WxStartRecordSuccessCallback + } + interface WxStopRecordOption { + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?: StopRecordCompleteCallback + /** 接口调用失败的回调函数 */ + fail?: StopRecordFailCallback + /** 接口调用成功的回调函数 */ + success?: WxStopRecordSuccessCallback + } + /** 运动数据列表 */ + interface WxaSportRecord { + /** 消耗卡路里 */ + calorie: number + /** 运动距离 */ + distance: number + /** 运动时长 */ + time: number + /** 运动项目id */ + typeId: number + } + /** 帧纹理对象 */ + interface YUVTextureRes { + /** UV 分量纹理 */ + uvTexture: WebGLTexture + /** Y 分量纹理 */ + yTexture: WebGLTexture + } + /** 文件路径 */ + interface ZipFileItem { + /** 文件内容 */ + data: string | ArrayBuffer + /** 错误信息 */ + errMsg: string + } + interface Animation { + /** [Object Animation.export()](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.export.html) + * + * 在插件中使用:支持 + * + * 导出动画队列。**export 方法每次调用后会清掉之前的动画操作。** */ + export(): AnimationExportResult + /** [[Animation](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.html) Animation.backgroundColor(string value)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.backgroundColor.html) + * + * 在插件中使用:支持 + * + * 设置背景色 */ + backgroundColor( + /** 颜色值 */ + value: string + ): Animation + /** [[Animation](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.html) Animation.bottom(number|string value)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.bottom.html) + * + * 在插件中使用:支持 + * + * 设置 bottom 值 */ + bottom( + /** 长度值,如果传入 number 则默认使用 px,可传入其他自定义单位的长度值 */ + value: number | string + ): Animation + /** [[Animation](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.html) Animation.height(number|string value)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.height.html) + * + * 在插件中使用:支持 + * + * 设置高度 */ + height( + /** 长度值,如果传入 number 则默认使用 px,可传入其他自定义单位的长度值 */ + value: number | string + ): Animation + /** [[Animation](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.html) Animation.left(number|string value)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.left.html) + * + * 在插件中使用:支持 + * + * 设置 left 值 */ + left( + /** 长度值,如果传入 number 则默认使用 px,可传入其他自定义单位的长度值 */ + value: number | string + ): Animation + /** [[Animation](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.html) Animation.matrix()](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.matrix.html) + * + * 在插件中使用:支持 + * + * 同 [transform-function matrix](https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function/matrix) */ + matrix(): Animation + /** [[Animation](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.html) Animation.matrix3d()](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.matrix3d.html) + * + * 在插件中使用:支持 + * + * 同 [transform-function matrix3d](https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function/matrix3d) */ + matrix3d(): Animation + /** [[Animation](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.html) Animation.opacity(number value)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.opacity.html) + * + * 在插件中使用:支持 + * + * 设置透明度 */ + opacity( + /** 透明度,范围 0-1 */ + value: number + ): Animation + /** [[Animation](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.html) Animation.right(number|string value)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.right.html) + * + * 在插件中使用:支持 + * + * 设置 right 值 */ + right( + /** 长度值,如果传入 number 则默认使用 px,可传入其他自定义单位的长度值 */ + value: number | string + ): Animation + /** [[Animation](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.html) Animation.rotate(number angle)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.rotate.html) + * + * 在插件中使用:支持 + * + * 从原点顺时针旋转一个角度 */ + rotate( + /** 旋转的角度。范围 [-180, 180] */ + angle: number + ): Animation + /** [[Animation](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.html) Animation.rotate3d(number x, number y, number z, number angle)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.rotate3d.html) + * + * 在插件中使用:支持 + * + * 从 固定 轴顺时针旋转一个角度 */ + rotate3d( + /** 旋转轴的 x 坐标 */ + x: number, + /** 旋转轴的 y 坐标 */ + y: number, + /** 旋转轴的 z 坐标 */ + z: number, + /** 旋转的角度。范围 [-180, 180] */ + angle: number + ): Animation + /** [[Animation](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.html) Animation.rotateX(number angle)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.rotateX.html) + * + * 在插件中使用:支持 + * + * 从 X 轴顺时针旋转一个角度 */ + rotateX( + /** 旋转的角度。范围 [-180, 180] */ + angle: number + ): Animation + /** [[Animation](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.html) Animation.rotateY(number angle)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.rotateY.html) + * + * 在插件中使用:支持 + * + * 从 Y 轴顺时针旋转一个角度 */ + rotateY( + /** 旋转的角度。范围 [-180, 180] */ + angle: number + ): Animation + /** [[Animation](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.html) Animation.rotateZ(number angle)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.rotateZ.html) + * + * 在插件中使用:支持 + * + * 从 Z 轴顺时针旋转一个角度 */ + rotateZ( + /** 旋转的角度。范围 [-180, 180] */ + angle: number + ): Animation + /** [[Animation](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.html) Animation.scale(number sx, number sy)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.scale.html) + * + * 在插件中使用:支持 + * + * 缩放 */ + scale( + /** 当仅有 sx 参数时,表示在 X 轴、Y 轴同时缩放sx倍数 */ + sx: number, + /** 在 Y 轴缩放 sy 倍数 */ + sy?: number + ): Animation + /** [[Animation](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.html) Animation.scale3d(number sx, number sy, number sz)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.scale3d.html) + * + * 在插件中使用:支持 + * + * 缩放 */ + scale3d( + /** x 轴的缩放倍数 */ + sx: number, + /** y 轴的缩放倍数 */ + sy: number, + /** z 轴的缩放倍数 */ + sz: number + ): Animation + /** [[Animation](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.html) Animation.scaleX(number scale)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.scaleX.html) + * + * 在插件中使用:支持 + * + * 缩放 X 轴 */ + scaleX( + /** X 轴的缩放倍数 */ + scale: number + ): Animation + /** [[Animation](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.html) Animation.scaleY(number scale)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.scaleY.html) + * + * 在插件中使用:支持 + * + * 缩放 Y 轴 */ + scaleY( + /** Y 轴的缩放倍数 */ + scale: number + ): Animation + /** [[Animation](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.html) Animation.scaleZ(number scale)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.scaleZ.html) + * + * 在插件中使用:支持 + * + * 缩放 Z 轴 */ + scaleZ( + /** Z 轴的缩放倍数 */ + scale: number + ): Animation + /** [[Animation](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.html) Animation.skew(number ax, number ay)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.skew.html) + * + * 在插件中使用:支持 + * + * 对 X、Y 轴坐标进行倾斜 */ + skew( + /** 对 X 轴坐标倾斜的角度,范围 [-180, 180] */ + ax: number, + /** 对 Y 轴坐标倾斜的角度,范围 [-180, 180] */ + ay: number + ): Animation + /** [[Animation](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.html) Animation.skewX(number angle)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.skewX.html) + * + * 在插件中使用:支持 + * + * 对 X 轴坐标进行倾斜 */ + skewX( + /** 倾斜的角度,范围 [-180, 180] */ + angle: number + ): Animation + /** [[Animation](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.html) Animation.skewY(number angle)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.skewY.html) + * + * 在插件中使用:支持 + * + * 对 Y 轴坐标进行倾斜 */ + skewY( + /** 倾斜的角度,范围 [-180, 180] */ + angle: number + ): Animation + /** [[Animation](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.html) Animation.step(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.step.html) + * + * 在插件中使用:支持 + * + * 表示一组动画完成。可以在一组动画中调用任意多个动画方法,一组动画中的所有动画会同时开始,一组动画完成后才会进行下一组动画。 */ + step(option?: StepOption): Animation + /** [[Animation](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.html) Animation.top(number|string value)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.top.html) + * + * 在插件中使用:支持 + * + * 设置 top 值 */ + top( + /** 长度值,如果传入 number 则默认使用 px,可传入其他自定义单位的长度值 */ + value: number | string + ): Animation + /** [[Animation](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.html) Animation.translate(number tx, number ty)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.translate.html) + * + * 在插件中使用:支持 + * + * 平移变换 */ + translate( + /** 当仅有该参数时表示在 X 轴偏移 tx,单位 px */ + tx?: number, + /** 在 Y 轴平移的距离,单位为 px */ + ty?: number + ): Animation + /** [[Animation](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.html) Animation.translate3d(number tx, number ty, number tz)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.translate3d.html) + * + * 在插件中使用:支持 + * + * 对 xyz 坐标进行平移变换 */ + translate3d( + /** 在 X 轴平移的距离,单位为 px */ + tx?: number, + /** 在 Y 轴平移的距离,单位为 px */ + ty?: number, + /** 在 Z 轴平移的距离,单位为 px */ + tz?: number + ): Animation + /** [[Animation](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.html) Animation.translateX(number translation)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.translateX.html) + * + * 在插件中使用:支持 + * + * 对 X 轴平移 */ + translateX( + /** 在 X 轴平移的距离,单位为 px */ + translation: number + ): Animation + /** [[Animation](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.html) Animation.translateY(number translation)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.translateY.html) + * + * 在插件中使用:支持 + * + * 对 Y 轴平移 */ + translateY( + /** 在 Y 轴平移的距离,单位为 px */ + translation: number + ): Animation + /** [[Animation](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.html) Animation.translateZ(number translation)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.translateZ.html) + * + * 在插件中使用:支持 + * + * 对 Z 轴平移 */ + translateZ( + /** 在 Z 轴平移的距离,单位为 px */ + translation: number + ): Animation + /** [[Animation](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.html) Animation.width(number|string value)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.width.html) + * + * 在插件中使用:支持 + * + * 设置宽度 */ + width( + /** 长度值,如果传入 number 则默认使用 px,可传入其他自定义单位的长度值 */ + value: number | string + ): Animation + } + interface AudioBuffer { + /** [AudioBuffer.copyFromChannel()](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/AudioBuffer.copyFromChannel.html) + * + * 在插件中使用:不支持 + * + * 从AudioBuffer的指定频道复制到数组终端。 */ + copyFromChannel(): void + /** [AudioBuffer.copyToChannel(Float32Array source, number channelNumber, number startInChannel)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/AudioBuffer.copyToChannel.html) + * + * 在插件中使用:不支持 + * + * 从指定数组复制样本到audioBuffer的特定通道 + * + * **示例代码** + * + * 示例代码参考AudioBuffer.copyFromChannel */ + copyToChannel( + /** 需要复制的源数组 */ + source: Float32Array, + /** 需要复制到的目的通道号 */ + channelNumber: number, + /** 复制偏移数据量 */ + startInChannel: number + ): void + /** [Float32Array AudioBuffer.getChannelData(number channel)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/AudioBuffer.getChannelData.html) + * + * 在插件中使用:不支持 + * + * 返回一个 Float32Array,包含了带有频道的PCM数据,由频道参数定义(有0代表第一个频道) */ + getChannelData( + /** 要获取特定通道数据的索引 */ + channel: number + ): Float32Array + } + interface AudioContext { + /** [AudioContext.pause()](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/AudioContext.pause.html) + * + * 在插件中使用:支持 + * @deprecated 基础库版本 [1.6.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [wx.createInnerAudioContext](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/wx.createInnerAudioContext.html) 替换 + * + * 暂停音频。 */ + pause(): void + /** [AudioContext.play()](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/AudioContext.play.html) + * + * 在插件中使用:支持 + * @deprecated 基础库版本 [1.6.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [wx.createInnerAudioContext](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/wx.createInnerAudioContext.html) 替换 + * + * 播放音频。 */ + play(): void + /** [AudioContext.seek(number position)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/AudioContext.seek.html) + * + * 在插件中使用:支持 + * @deprecated 基础库版本 [1.6.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [wx.createInnerAudioContext](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/wx.createInnerAudioContext.html) 替换 + * + * 跳转到指定位置。 */ + seek( + /** 跳转位置,单位 s */ + position: number + ): void + /** [AudioContext.setSrc(string src)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/AudioContext.setSrc.html) + * + * 在插件中使用:支持 + * @deprecated 基础库版本 [1.6.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [wx.createInnerAudioContext](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/wx.createInnerAudioContext.html) 替换 + * + * 设置音频地址 */ + setSrc( + /** 音频地址 */ + src: string + ): void + } + interface BLEPeripheralServer { + /** [BLEPeripheralServer.addService(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-peripheral/BLEPeripheralServer.addService.html) + * + * 需要基础库: `2.10.3` + * + * 在插件中使用:不支持 + * + * 添加服务。 */ + addService(option: AddServiceOption): void + /** [BLEPeripheralServer.close(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-peripheral/BLEPeripheralServer.close.html) + * + * 需要基础库: `2.10.3` + * + * 在插件中使用:不支持 + * + * 关闭当前服务端。 */ + close(option?: BLEPeripheralServerCloseOption): void + /** [BLEPeripheralServer.offCharacteristicReadRequest(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-peripheral/BLEPeripheralServer.offCharacteristicReadRequest.html) +* +* 需要基础库: `2.10.3` +* +* 在插件中使用:不支持 +* +* 移除已连接的设备请求读当前外围设备的特征值事件的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +BLEPeripheralServer.onCharacteristicReadRequest(listener) +BLEPeripheralServer.offCharacteristicReadRequest(listener) // 需传入与监听时同一个的函数对象 +``` */ + offCharacteristicReadRequest( + /** onCharacteristicReadRequest 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: OffCharacteristicReadRequestCallback + ): void + /** [BLEPeripheralServer.offCharacteristicSubscribed(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-peripheral/BLEPeripheralServer.offCharacteristicSubscribed.html) +* +* 需要基础库: `2.13.0` +* +* 在插件中使用:不支持 +* +* 移除特征订阅事件的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +BLEPeripheralServer.onCharacteristicSubscribed(listener) +BLEPeripheralServer.offCharacteristicSubscribed(listener) // 需传入与监听时同一个的函数对象 +``` */ + offCharacteristicSubscribed( + /** onCharacteristicSubscribed 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: OffCharacteristicSubscribedCallback + ): void + /** [BLEPeripheralServer.offCharacteristicUnsubscribed(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-peripheral/BLEPeripheralServer.offCharacteristicUnsubscribed.html) +* +* 需要基础库: `2.13.0` +* +* 在插件中使用:不支持 +* +* 移除取消特征订阅事件的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +BLEPeripheralServer.onCharacteristicUnsubscribed(listener) +BLEPeripheralServer.offCharacteristicUnsubscribed(listener) // 需传入与监听时同一个的函数对象 +``` */ + offCharacteristicUnsubscribed( + /** onCharacteristicUnsubscribed 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: OffCharacteristicUnsubscribedCallback + ): void + /** [BLEPeripheralServer.offCharacteristicWriteRequest(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-peripheral/BLEPeripheralServer.offCharacteristicWriteRequest.html) +* +* 需要基础库: `2.10.3` +* +* 在插件中使用:不支持 +* +* 移除已连接的设备请求写当前外围设备的特征值事件的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +BLEPeripheralServer.onCharacteristicWriteRequest(listener) +BLEPeripheralServer.offCharacteristicWriteRequest(listener) // 需传入与监听时同一个的函数对象 +``` */ + offCharacteristicWriteRequest( + /** onCharacteristicWriteRequest 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: OffCharacteristicWriteRequestCallback + ): void + /** [BLEPeripheralServer.onCharacteristicReadRequest(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-peripheral/BLEPeripheralServer.onCharacteristicReadRequest.html) + * + * 需要基础库: `2.10.3` + * + * 在插件中使用:不支持 + * + * 监听已连接的设备请求读当前外围设备的特征值事件。收到该消息后需要立刻调用 [writeCharacteristicValue](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-peripheral/BLEPeripheralServer.writeCharacteristicValue.html) 写回数据,否则主机不会收到响应。 */ + onCharacteristicReadRequest( + /** 已连接的设备请求读当前外围设备的特征值事件的监听函数 */ + listener: OnCharacteristicReadRequestCallback + ): void + /** [BLEPeripheralServer.onCharacteristicSubscribed(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-peripheral/BLEPeripheralServer.onCharacteristicSubscribed.html) + * + * 需要基础库: `2.13.0` + * + * 在插件中使用:不支持 + * + * 监听特征订阅事件,仅 iOS 支持。 */ + onCharacteristicSubscribed( + /** 特征订阅事件的监听函数 */ + listener: OnCharacteristicSubscribedCallback + ): void + /** [BLEPeripheralServer.onCharacteristicUnsubscribed(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-peripheral/BLEPeripheralServer.onCharacteristicUnsubscribed.html) + * + * 需要基础库: `2.13.0` + * + * 在插件中使用:不支持 + * + * 监听取消特征订阅事件,仅 iOS 支持。 */ + onCharacteristicUnsubscribed( + /** 取消特征订阅事件的监听函数 */ + listener: OnCharacteristicUnsubscribedCallback + ): void + /** [BLEPeripheralServer.onCharacteristicWriteRequest(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-peripheral/BLEPeripheralServer.onCharacteristicWriteRequest.html) + * + * 需要基础库: `2.10.3` + * + * 在插件中使用:不支持 + * + * 监听已连接的设备请求写当前外围设备的特征值事件。收到该消息后需要立刻调用 [writeCharacteristicValue](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-peripheral/BLEPeripheralServer.writeCharacteristicValue.html) 写回数据,否则主机不会收到响应。 */ + onCharacteristicWriteRequest( + /** 已连接的设备请求写当前外围设备的特征值事件的监听函数 */ + listener: OnCharacteristicWriteRequestCallback + ): void + /** [BLEPeripheralServer.removeService(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-peripheral/BLEPeripheralServer.removeService.html) + * + * 需要基础库: `2.10.3` + * + * 在插件中使用:不支持 + * + * 移除服务。 */ + removeService(option: RemoveServiceOption): void + /** [BLEPeripheralServer.startAdvertising(Object Object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-peripheral/BLEPeripheralServer.startAdvertising.html) + * + * 需要基础库: `2.10.3` + * + * 在插件中使用:不支持 + * + * 开始广播本地创建的外围设备。 + * + * **注意** + * + * - Android 8.0.9 开始,支持直接使用 16/32/128 位 UUID; + * - Android 8.0.9 以下版本只支持 128 位 UUID,使用 16/32 位的 UUID 时需要进行补位(系统会自动识别是否属于预分配区间),可以参考[蓝牙指南](https://developers.weixin.qq.com/miniprogram/dev/framework/device/ble.html); + * - iOS 必须直接使用 16 位的 UUID,不能补位到 128 位,否则系统组包时仍会按照 128 位传输。iOS 暂不支持 32 位 UUID。 + * - iOS 同时只能发起一个广播,安卓支持同时发起多个广播。 + * - 传 beacon 参数时,不能同时传入 deviceName,serviceUuids,manufacturerData 参数。 */ + startAdvertising(Object: StartAdvertisingObject): void + /** [BLEPeripheralServer.stopAdvertising(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-peripheral/BLEPeripheralServer.stopAdvertising.html) + * + * 需要基础库: `2.10.3` + * + * 在插件中使用:不支持 + * + * 停止广播。 */ + stopAdvertising(option?: StopAdvertisingOption): void + /** [BLEPeripheralServer.writeCharacteristicValue(Object Object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-peripheral/BLEPeripheralServer.writeCharacteristicValue.html) + * + * 需要基础库: `2.10.3` + * + * 在插件中使用:不支持 + * + * 往指定特征写入二进制数据值,并通知已连接的主机,从机的特征值已发生变化,该接口会处理是走回包还是走订阅。 */ + writeCharacteristicValue(Object: WriteCharacteristicValueObject): void + } + interface BackgroundAudioError { + /** 错误信息 + * + * | 错误码 | 错误信息 | 说明 | + * | - | - | - | + * | 10001 | | 系统错误 | + * | 10002 | | 网络错误 | + * | 10003 | | 文件错误,请检查是否responseheader是否缺少Content-Length | + * | 10004 | | 格式错误 | + * | -1 | | 未知错误 | */ errMsg: string + /** 错误码 + * + * | 错误码 | 错误信息 | 说明 | + * | - | - | - | + * | 10001 | | 系统错误 | + * | 10002 | | 网络错误 | + * | 10003 | | 文件错误,请检查是否responseheader是否缺少Content-Length | + * | 10004 | | 格式错误 | + * | -1 | | 未知错误 | */ errCode: number + } + interface BackgroundAudioManager { + /** [BackgroundAudioManager.onCanplay(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/BackgroundAudioManager.onCanplay.html) + * + * 在插件中使用:支持 + * + * 监听背景音频进入可播放状态事件。 但不保证后面可以流畅播放 */ + onCanplay( + /** 背景音频进入可播放状态事件的监听函数 */ + listener: OnCanplayCallback + ): void + /** [BackgroundAudioManager.onEnded(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/BackgroundAudioManager.onEnded.html) + * + * 在插件中使用:支持 + * + * 监听背景音频自然播放结束事件 */ + onEnded( + /** 背景音频自然播放结束事件的监听函数 */ + listener: OnEndedCallback + ): void + /** [BackgroundAudioManager.onError(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/BackgroundAudioManager.onError.html) + * + * 在插件中使用:支持 + * + * 监听背景音频播放错误事件 */ + onError( + /** 背景音频播放错误事件的监听函数 */ + listener: BackgroundAudioManagerOnErrorCallback + ): void + /** [BackgroundAudioManager.onNext(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/BackgroundAudioManager.onNext.html) + * + * 在插件中使用:支持 + * + * 监听用户在系统音乐播放面板点击下一曲事件(仅iOS) */ + onNext( + /** 用户在系统音乐播放面板点击下一曲事件的监听函数 */ + listener: OnNextCallback + ): void + /** [BackgroundAudioManager.onPause(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/BackgroundAudioManager.onPause.html) + * + * 在插件中使用:支持 + * + * 监听背景音频暂停事件 */ + onPause( + /** 背景音频暂停事件的监听函数 */ + listener: OnPauseCallback + ): void + /** [BackgroundAudioManager.onPlay(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/BackgroundAudioManager.onPlay.html) + * + * 在插件中使用:支持 + * + * 监听背景音频播放事件 */ + onPlay( + /** 背景音频播放事件的监听函数 */ + listener: OnPlayCallback + ): void + /** [BackgroundAudioManager.onPrev(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/BackgroundAudioManager.onPrev.html) + * + * 在插件中使用:支持 + * + * 监听用户在系统音乐播放面板点击上一曲事件(仅iOS) */ + onPrev( + /** 用户在系统音乐播放面板点击上一曲事件的监听函数 */ + listener: OnPrevCallback + ): void + /** [BackgroundAudioManager.onSeeked(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/BackgroundAudioManager.onSeeked.html) + * + * 在插件中使用:支持 + * + * 监听背景音频完成跳转操作事件 */ + onSeeked( + /** 背景音频完成跳转操作事件的监听函数 */ + listener: OnSeekedCallback + ): void + /** [BackgroundAudioManager.onSeeking(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/BackgroundAudioManager.onSeeking.html) + * + * 在插件中使用:支持 + * + * 监听背景音频开始跳转操作事件 */ + onSeeking( + /** 背景音频开始跳转操作事件的监听函数 */ + listener: OnSeekingCallback + ): void + /** [BackgroundAudioManager.onStop(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/BackgroundAudioManager.onStop.html) + * + * 在插件中使用:支持 + * + * 监听背景音频停止事件 */ + onStop( + /** 背景音频停止事件的监听函数 */ + listener: InnerAudioContextOnStopCallback + ): void + /** [BackgroundAudioManager.onTimeUpdate(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/BackgroundAudioManager.onTimeUpdate.html) + * + * 在插件中使用:支持 + * + * 监听背景音频播放进度更新事件,只有小程序在前台时会回调。 */ + onTimeUpdate( + /** 背景音频播放进度更新事件的监听函数 */ + listener: OnTimeUpdateCallback + ): void + /** [BackgroundAudioManager.onWaiting(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/BackgroundAudioManager.onWaiting.html) + * + * 在插件中使用:支持 + * + * 监听音频加载中事件。当音频因为数据不足,需要停下来加载时会触发 */ + onWaiting( + /** 音频加载中事件的监听函数 */ + listener: OnWaitingCallback + ): void + /** [BackgroundAudioManager.pause()](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/BackgroundAudioManager.pause.html) + * + * 在插件中使用:支持 + * + * 暂停音乐 */ + pause(): void + /** [BackgroundAudioManager.play()](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/BackgroundAudioManager.play.html) + * + * 在插件中使用:支持 + * + * 播放音乐 */ + play(): void + /** [BackgroundAudioManager.seek(number currentTime)](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/BackgroundAudioManager.seek.html) + * + * 在插件中使用:支持 + * + * 跳转到指定位置 */ + seek( + /** 跳转的位置,单位 s。精确到小数点后 3 位,即支持 ms 级别精确度 */ + currentTime: number + ): void + /** [BackgroundAudioManager.stop()](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/BackgroundAudioManager.stop.html) + * + * 在插件中使用:支持 + * + * 停止音乐 */ + stop(): void + } + interface BeaconError { + /** 错误信息 + * + * | 错误码 | 错误信息 | 说明 | + * | - | - | - | + * | 0 | ok | 正常 | + * | 11000 | unsupport | 系统或设备不支持 | + * | 11001 | bluetooth service unavailable | 蓝牙服务不可用 | + * | 11002 | location service unavailable | 位置服务不可用 | + * | 11003 | already start | 已经开始搜索 | + * | 11004 | not startBeaconDiscovery | 还未开始搜索 | + * | 11005 | system error | 系统错误 | + * | 11006 | invalid data | 参数不正确 | */ errMsg: string + /** 错误码 + * + * | 错误码 | 错误信息 | 说明 | + * | - | - | - | + * | 0 | ok | 正常 | + * | 11000 | unsupport | 系统或设备不支持 | + * | 11001 | bluetooth service unavailable | 蓝牙服务不可用 | + * | 11002 | location service unavailable | 位置服务不可用 | + * | 11003 | already start | 已经开始搜索 | + * | 11004 | not startBeaconDiscovery | 还未开始搜索 | + * | 11005 | system error | 系统错误 | + * | 11006 | invalid data | 参数不正确 | */ errCode: number + } + interface BluetoothError { + /** 错误信息 + * + * | 错误码 | 错误信息 | 说明 | + * | - | - | - | + * | 0 | ok | 正常 | + * | -1 | already connect | 已连接 | + * | 10000 | not init | 未初始化蓝牙适配器 | + * | 10001 | not available | 当前蓝牙适配器不可用 | + * | 10002 | no device | 没有找到指定设备 | + * | 10003 | connection fail | 连接失败 | + * | 10004 | no service | 没有找到指定服务 | + * | 10005 | no characteristic | 没有找到指定特征 | + * | 10006 | no connection | 当前连接已断开 | + * | 10007 | property not support | 当前特征不支持此操作 | + * | 10008 | system error | 其余所有系统上报的异常 | + * | 10009 | system not support | Android 系统特有,系统版本低于 4.3 不支持 BLE | + * | 10012 | operate time out | 连接超时 | + * | 10013 | invalid_data | 连接 deviceId 为空或者是格式不正确 | */ errMsg: string + /** 错误码 + * + * | 错误码 | 错误信息 | 说明 | + * | - | - | - | + * | 0 | ok | 正常 | + * | -1 | already connect | 已连接 | + * | 10000 | not init | 未初始化蓝牙适配器 | + * | 10001 | not available | 当前蓝牙适配器不可用 | + * | 10002 | no device | 没有找到指定设备 | + * | 10003 | connection fail | 连接失败 | + * | 10004 | no service | 没有找到指定服务 | + * | 10005 | no characteristic | 没有找到指定特征 | + * | 10006 | no connection | 当前连接已断开 | + * | 10007 | property not support | 当前特征不支持此操作 | + * | 10008 | system error | 其余所有系统上报的异常 | + * | 10009 | system not support | Android 系统特有,系统版本低于 4.3 不支持 BLE | + * | 10012 | operate time out | 连接超时 | + * | 10013 | invalid_data | 连接 deviceId 为空或者是格式不正确 | */ errCode: number + } + interface CacheManager { + /** [Array.<string> CacheManager.addRules(Object rules)](https://developers.weixin.qq.com/miniprogram/dev/api/storage/cachemanager/CacheManager.addRules.html) + * + * 需要基础库: `2.24.0` + * + * 在插件中使用:不支持 + * + * 批量添加规则,规则写法可参考 [CacheManager.addRule](https://developers.weixin.qq.com/miniprogram/dev/api/storage/cachemanager/CacheManager.addRule.html)。 */ + addRules( + /** 规则列表 */ + rules: IAnyObject + ): string[] + /** [CacheManager.clearCaches()](https://developers.weixin.qq.com/miniprogram/dev/api/storage/cachemanager/CacheManager.clearCaches.html) + * + * 需要基础库: `2.24.0` + * + * 在插件中使用:不支持 + * + * 清空所有缓存。 */ + clearCaches(): void + /** [CacheManager.clearRules()](https://developers.weixin.qq.com/miniprogram/dev/api/storage/cachemanager/CacheManager.clearRules.html) + * + * 需要基础库: `2.24.0` + * + * 在插件中使用:不支持 + * + * 清空所有规则,同时会删除对应规则下所有缓存。 */ + clearRules(): void + /** [CacheManager.deleteCache(string id)](https://developers.weixin.qq.com/miniprogram/dev/api/storage/cachemanager/CacheManager.deleteCache.html) + * + * 需要基础库: `2.24.0` + * + * 在插件中使用:不支持 + * + * 删除缓存。 */ + deleteCache( + /** 缓存 id */ + id: string + ): void + /** [CacheManager.deleteCaches(Array.<string> ids)](https://developers.weixin.qq.com/miniprogram/dev/api/storage/cachemanager/CacheManager.deleteCaches.html) + * + * 需要基础库: `2.24.0` + * + * 在插件中使用:不支持 + * + * 批量删除缓存。 */ + deleteCaches( + /** 缓存 id 列表 */ + ids: string[] + ): void + /** [CacheManager.deleteRule(string id)](https://developers.weixin.qq.com/miniprogram/dev/api/storage/cachemanager/CacheManager.deleteRule.html) + * + * 需要基础库: `2.24.0` + * + * 在插件中使用:不支持 + * + * 删除规则,同时会删除对应规则下所有缓存。 */ + deleteRule( + /** 规则 id */ + id: string + ): void + /** [CacheManager.deleteRules(Array.<string> ids)](https://developers.weixin.qq.com/miniprogram/dev/api/storage/cachemanager/CacheManager.deleteRules.html) + * + * 需要基础库: `2.24.0` + * + * 在插件中使用:不支持 + * + * 批量删除规则,同时会删除对应规则下所有缓存。 */ + deleteRules( + /** 规则 id 列表 */ + ids: string[] + ): void + /** [CacheManager.off(string eventName, function handler)](https://developers.weixin.qq.com/miniprogram/dev/api/storage/cachemanager/CacheManager.off.html) + * + * 需要基础库: `2.24.0` + * + * 在插件中使用:不支持 + * + * 取消事件监听。 */ + off( + /** 事件名 */ + eventName: string, + /** 事件句柄 */ + handler: (...args: any[]) => any + ): void + /** [CacheManager.on(string eventName, function handler)](https://developers.weixin.qq.com/miniprogram/dev/api/storage/cachemanager/CacheManager.on.html) +* +* 需要基础库: `2.24.0` +* +* 在插件中使用:不支持 +* +* 监听事件。 +* +* **** +* +* 这里 request 事件会提供 request 事件对象,用于做后续的处理;在 request 事件中需要返回一个 promise,用来生成 wx.request 请求的返回内容。 +* +* #### 示例代码 +* +* ```js +async function handler(evt) { + // evt.url - 请求 url + // evt.data - 请求参数 + // evt.method - 请求方法 + // evt.request - 原始 request 方法,返回一个 promise + + // if (evt.url === '/xxx') { + // // 如果有些请求仍然希望走到网络,则可以如下处理 + // const res = await evt.request() + // // res 即为网络请求返回 + // } + + return new Promsie((resolve, reject) => { + // do sth + if (data) { + // 这里 resolve 的 data 就会作为 wx.request 的 success 回调结果返回 + resolve(data) + } else { + // 这里 reject 的错误信息就会作为 wx.request 的 fail 回调结果返回 + reject('no data') + } + }) +} +cacheManager.on('request', handler) +``` */ + on( + /** 事件名 + * + * 参数 eventName 可选值: + * - 'request': 发生 wx.request 请求,只在缓存管理器开启阶段会触发; + * - 'enterWeakNetwork': 进入弱网/离线状态; + * - 'exitWeakNetwork': 离开弱网/离线状态; */ + eventName: 'request' | 'enterWeakNetwork' | 'exitWeakNetwork', + /** 事件句柄 */ + handler: (...args: any[]) => any + ): void + /** [CacheManager.start()](https://developers.weixin.qq.com/miniprogram/dev/api/storage/cachemanager/CacheManager.start.html) + * + * 需要基础库: `2.24.0` + * + * 在插件中使用:不支持 + * + * 开启缓存,仅在 mode 为 none 时生效,调用后缓存管理器的 state 会置为 1。 */ + start(): void + /** [CacheManager.stop()](https://developers.weixin.qq.com/miniprogram/dev/api/storage/cachemanager/CacheManager.stop.html) + * + * 需要基础库: `2.24.0` + * + * 在插件中使用:不支持 + * + * 关闭缓存,仅在 mode 为 none 时生效,调用后缓存管理器的 state 会置为 0。 */ + stop(): void + /** [Object CacheManager.match(Object evt)](https://developers.weixin.qq.com/miniprogram/dev/api/storage/cachemanager/CacheManager.match.html) +* +* 需要基础库: `2.24.0` +* +* 在插件中使用:不支持 +* +* 匹配命中的缓存规则,一般需要和 request 事件搭配使用。 +* +* **示例代码** +* +* ```js +function handler(evt) { + const cache = cacheManager.match(evt) + // 若有重复监听,则取第一个 handler 返回的 promise + return new Promise((resolve, reject) => { + if (cache.data) { + resolve(cache.data) + } else { + reject('no cache') + } + }) +} +cacheManager.on('request', handler) +``` */ + match( + /** request 事件对象 */ + evt: IAnyObject + ): MatchCache + /** [string CacheManager.addRule(Object rule)](https://developers.weixin.qq.com/miniprogram/dev/api/storage/cachemanager/CacheManager.addRule.html) +* +* 需要基础库: `2.24.0` +* +* 在插件中使用:不支持 +* +* 添加规则。 +* +* **规则说明** +* +* 支持的规则写法有字符串、正则和对象三种: +* +* ### 字符串写法 +* +* 1. `addRule('/abc')`:纯 uri 串。 +* 2. `addRule('GET /abc'):带方法的 uri 串,除了匹配 uri 外,还会匹配请求方法。如例子中必须是 GET 方法请求才会被匹配。 +* 3. `addRule('/abc/:id'):带可变部分的 uri 串,id 可以是任意符合标准的字符串,表示这一段可以动态变化。比如 `/abc/123` 和 `/abc/321` 都会被匹配,而 `/abc/123/xxx` 因为多了一段,就不会被匹配。 +* 4. `addRule('/abc?aa'):带 query 参数的 uri 串,包含 aa 参数,值可以为任意值。比如 `/abc?aa=haha` 会被匹配,但是 `/abc` 就不会被匹配,因为缺少规则中声明的 aa 参数;不过如果请求是 `/abc?aa=haha&bb=123`,虽然多带了 bb 参数,但是因为包含了 aa 参数,所以也可以被匹配。 +* 5. `addRule('/abc?dd=haha'):带 query 参数的 uri 串,包含 dd 参数且值为 haha。比如 `/abc?dd=haha` 和 `/abc?dd=haha&bb=123` 会被匹配,而 `/abc?dd=123` 就不会被匹配,因为规则要求了 dd 参数的值。 +* +* > 以上写法中的 uri 串如果只有 path 部分,则会取全局 origin 进行补全。比如全局 origin 是 `https://weixin.qq.com`,而规则是 `/abc`,则会补全为 `https://weixin.qq.com/abc`。因此在前面例子中 `addRule('/abc')` 和 `addRule('https://weixin.qq.com/abc')` 的写法效果一致。所以一般情况下如果需要匹配的请求 origin 和全局 origin 一致,则规则中可忽略不写 orign。 +* +* ### 正则写法 +* +* 1. `addRule(/\/(abc|cba)$/ig)`:直接正则匹配请求的 uri,同时会比对请求 origin 和全局 origin 是否一致。 +* 2. `addRule(/^https:\/\/weixin.qq.com\/(abc|cba)$/ig)`:带有 orign 部分的正则表达式,则只匹配 uri,不再比对 origin。 +* +* ### 对象写法 +* +* 使用规则对象,可以更为详细的描述规则内容。(一般使用规则对象,是为了匹配请求参数) +* +* #### 规则对象: +* +* | 属性名 | 类型 | 默认值 | 备注 | +* |---|---|---|---| +* | id | string | | 规则 id,如果不填则会由基础库生成 | +* | method | string | | 请求方法,可选值 GET/POST/PATCH/PUT/DELETE,如果为空则表示前面提到的所有方法都能被匹配到 | +* | url | any | 必填 | uri 匹配规则,可参考规则字符串写法和正则写法 | +* | maxAge | number | 7 * 24 * 60 * 60 * 1000 | 缓存有效时间,单位为 ms,不填则默认取缓存管理器全局的缓存有效时间 | +* | dataSchema | Array\ | | 匹配请求参数 | +* +* 其中,dataSchema 用来匹配对象类型的请求参数(比如 wx.request 的 data),默认可以不填,即不做参数匹配。 +* +* dataSchema 的类型是一个 DataRule 对象数组,一个 DataRule 对象描述一个参数,比如一个 wx.request 请求的 data 是 `{a: 123, b: 'haha', c: true}`,你想要用一条规则来匹配其中的 a 和 b 参数,如果 a 是数字且 b 是字符串就能命中该规则,那么就需要在 dataSchema 中补充两个 DataRule 对象,即 `[{name: 'a', schema: {type: 'number'}}, {name: 'b', schema: {type: 'string'}}]`。 +* +* #### DataRule 对象: +* +* | 属性名 | 类型 | 默认值 | 备注 | +* |---|---|---|---| +* | name | string | | 需要匹配的参数名 | +* | schema | DataSchema/Array\ | 需要匹配的参数模式,支持数组,表示该参数值有多种模式 | +* +* name 表示要匹配的参数名,schema 为 DataSchema 对象,用来描述该参数的类型和值。 +* +* 一个 DataRule 对象也可以匹配可能拥有多种类型的参数,所以 schema 也支持为 DataSchema 对象数组。比如上述例子中,希望匹配的 a 参数必须是数值或者字符串,那么可以这么写:`{name: 'a', schema: [{type: 'number'}, {type: 'string'}]}`。 +* +* #### DataSchema 对象: +* +* | 属性名 | 类型 | 默认值 | 备注 | +* |---|---|---|---| +* | type | string | | 需要匹配的 data 对象的参数类型,string、number、boolean、null、object、any(表示任意类型),同时支持数组模式(数组模式则在类型后面加 [],如 string[] 表示字符串数组) | +* | value | string/regexp/function/Array\ | | 需要匹配的 data 对象的参数值,当 type 为基本类型时,可以用 string/regexp 来匹配固定的值,也可以通过 function 来确定值是否匹配,如果传入的 type 是 object,那么表示需要嵌套匹配值是否正确,可以传入 Array | +* +* type 参数表示要匹配的参数类型,value 表示要匹配的参数值。其中 value 支持多种写法,不同写法有如下匹配方式: +* +* 1. 字符串写法:直接判值的字符串形式是否和给定字符串一样,比如 value 值为 `123`,就要求参数值必须为 123 才能与之匹配。 +* 2. 正则写法:直接判值的字符串形式是否能被正则匹配,比如 value 值为 `/\d+/ig`,就要求参数值必须为数字,如果参数值为 `abc` 则不会被匹配。 +* 3. 函数写法:在匹配时会调用用户传入的函数,交由用户判断是否匹配。 +* 4. DataRule 数组写法:当参数类型为对象时,那么字符串写法和正则写法就无法使用,需要传入 DataRule 数组来进行匹配,即通过嵌套 DataRule 数组的方式来匹配嵌套的对象。 +* +* ### 示例代码 +* +* ```js +const ruleId = cacheManager.addRule({ + id: 'haha-rule', + method: 'GET', + url: '/haha', + maxAge: 123455, + dataSchema: [ + // data 字段的匹配,默认为空,表示不匹配 + // 类型可以是:string、number、boolean、null、object、any(表示任意类型均可),以及这些类型的数组表示方式 + {name: 'aaa', schema: {type: 'string'}}, // 类型为 string + {name: 'bbb', schema: [{type: 'number'}, {type: 'string'}]}, // 类型为 number, string + {name: 'ccc', schema: {type: 'string', value: 'abc'}}, // 值为 abc + {name: 'ddd', schema: {type: 'string', value: /(abc|cba)/ig}}, // 值符合该正则匹配,如果该值不是字符串类型,则会被尝试转成字符串后再进行比较 + {name: 'ddd', schema: {type: 'string', value: val => val === '123'}}, // 传入函数来校验值 + {name: 'eee', schema: {type: 'object', value: [{ // 类型为对象,则通过嵌套的方式来逐层校验 + name: 'aaa', schema: {type: 'string'}, + // ... + // 嵌套 dataSchema,同上面的方式一样来匹配嵌套的对象 + }]}}, + {name: 'fff', schema: {type: 'string[]'}}, // 类型为 string 数组 + {name: 'ggg', schema: {type: 'any'}}, // 类型为任意类型 + {name: 'hhh', schema: {type: 'any[]'}}, // 类型为任意类型的数组 + }], +}) +``` +* +* ### 补充说明 +* +* 用户可以添加多条规则,每条规则都会去解析网络请求,然后判断是否命中规则。假设有多条规则命中,则取第一条命中的规则。 +* +* ### 缓存覆盖 +* +* 不同的网络请求也可能命中同一条规则,所以每条规则可能对应多个缓存。每条规则会有一个规则 id,每个缓存会有一个缓存 id,一个规则 id 可能对应多个缓存 id,而缓存管理器的缓存存储是基于缓存 id 标识的,如果两个不同的请求生成了同样的缓存 id,那么后发生的请求结果缓存会覆盖前者。因此使用时需要思考缓存的覆盖情况,目前缓存 id 生成方式如下: +* +* 1. 规则使用字符串写法:那么按 method + url + 规则中声明的 query 参数来生成缓存 id。 +* +* > 需要注意的是这里不使用真实请求中的 query 参数来生成缓存 id,而是使用规则中匹配到的 query 来生成缓存 id。比如规则是 `/abc?aa=123`,请求是 GET 方法的 `/abc?aa=123&bb=123`,那么就会基于 `GET /abc?aa=123` 来生成缓存 id。而规则里没有声明 `bb=123`,所以 bb 参数不会被纳入缓存 id 的生成基准。 +* +* 2. 规则使用正则写法:那么只按 method + url 生成缓存 id,不考虑 query 参数。 +* 3. 规则使用对象写法:如果规则对象中的 url 是字符串写法,那么按 method + url + 规则中声明的 query 参数 + 规则中 dataSchema 声明的请求参数来生成缓存 id;如果规则对象中的 url 是正则写法,那么按 method + url + 规则中 dataSchema 声明的请求参数来生成缓存 id。 +* +* > 生成缓存 id 时没有使用请求中完整的 query 参数或者请求参数来作为基准,是考虑到很多请求可能会带上 token 或时间戳等参数。因为此参数存在不确定性,会导致每次请求生成的缓存 id 都不同,进而导致缓存命中率下降,故采取规则中声明的 query 参数和 dataSchema 声明的请求参数来作为生成缓存 id 的基准。 */ + addRule( + /** 规则 */ + rule: IAnyObject + ): string + } + interface CameraContext { + /** [CameraContext.setZoom(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/camera/CameraContext.setZoom.html) + * + * 需要基础库: `2.10.0` + * + * 在插件中使用:支持 + * + * 设置缩放级别 */ + setZoom(option: SetZoomOption): void + /** [CameraContext.startRecord(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/camera/CameraContext.startRecord.html) + * + * 在插件中使用:支持 + * + * 开始录像 */ + startRecord(option: CameraContextStartRecordOption): void + /** [CameraContext.stopRecord(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/camera/CameraContext.stopRecord.html) + * + * 在插件中使用:支持 + * + * 结束录像 */ + stopRecord(option: CameraContextStopRecordOption): void + /** [CameraContext.takePhoto(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/camera/CameraContext.takePhoto.html) + * + * 在插件中使用:支持 + * + * 拍摄照片 */ + takePhoto(option: TakePhotoOption): void + /** [[CameraFrameListener](https://developers.weixin.qq.com/miniprogram/dev/api/media/camera/CameraFrameListener.html) CameraContext.onCameraFrame(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/media/camera/CameraContext.onCameraFrame.html) +* +* 需要基础库: `2.7.0` +* +* 在插件中使用:不支持 +* +* 获取 Camera 实时帧数据 +* +* **** +* +* 注: 使用该接口需同时在 [camera](https://developers.weixin.qq.com/miniprogram/dev/component/camera.html) 组件属性中指定 frame-size。 +* +* **示例代码** +* +* ```js +const context = wx.createCameraContext() +const listener = context.onCameraFrame((frame) => { + console.log(frame.data instanceof ArrayBuffer, frame.width, frame.height) +}) +listener.start() +``` */ + onCameraFrame( + /** 回调函数 */ + callback: OnCameraFrameCallback + ): CameraFrameListener + } + interface CameraFrameListener { + /** [CameraFrameListener.start(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/camera/CameraFrameListener.start.html) + * + * 在插件中使用:不支持 + * + * 开始监听帧数据 */ + start(option?: CameraFrameListenerStartOption): void + /** [CameraFrameListener.stop(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/camera/CameraFrameListener.stop.html) + * + * 在插件中使用:不支持 + * + * 停止监听帧数据 */ + stop(option?: StopOption): void + } + interface Canvas { + /** [Canvas.cancelAnimationFrame(number requestID)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/Canvas.cancelAnimationFrame.html) + * + * 需要基础库: `2.7.0` + * + * 在插件中使用:支持 + * + * 取消由 requestAnimationFrame 添加到计划中的动画帧请求。支持在 2D Canvas 和 WebGL Canvas 下使用, 但不支持混用 2D 和 WebGL 的方法。 */ + cancelAnimationFrame(requestID: number): void + /** [[ImageData](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/ImageData.html) Canvas.createImageData()](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/Canvas.createImageData.html) + * + * 需要基础库: `2.9.0` + * + * 在插件中使用:支持 + * + * 创建一个 ImageData 对象。仅支持在 2D Canvas 中使用。 */ + createImageData(): ImageData + /** [[Image](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/Image.html) Canvas.createImage()](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/Canvas.createImage.html) + * + * 需要基础库: `2.7.0` + * + * 在插件中使用:支持 + * + * 创建一个图片对象。 支持在 2D Canvas 和 WebGL Canvas 下使用, 但不支持混用 2D 和 WebGL 的方法。 */ + createImage(): Image + /** [[Path2D](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/Path2D.html) Canvas.createPath2D([Path2D](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/Path2D.html) path)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/Canvas.createPath2D.html) + * + * 需要基础库: `2.11.0` + * + * 在插件中使用:支持 + * + * 创建 Path2D 对象 */ + createPath2D( + /** [Path2D](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/Path2D.html) */ + path: Path2D + ): Path2D + /** [[RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) Canvas.getContext(string contextType)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/Canvas.getContext.html) + * + * 需要基础库: `2.7.0` + * + * 在插件中使用:支持 + * + * 该方法返回 Canvas 的绘图上下文 + * + * **** + * + * 支持获取 2D 和 WebGL 绘图上下文 */ + getContext(contextType: string): any + /** [number Canvas.requestAnimationFrame(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/Canvas.requestAnimationFrame.html) + * + * 需要基础库: `2.7.0` + * + * 在插件中使用:支持 + * + * 在下次进行重绘时执行。 支持在 2D Canvas 和 WebGL Canvas 下使用, 但不支持混用 2D 和 WebGL 的方法。 */ + requestAnimationFrame( + /** 执行的 callback */ + callback: (...args: any[]) => any + ): number + /** [string Canvas.toDataURL(string type, number encoderOptions)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/Canvas.toDataURL.html) + * + * 需要基础库: `2.11.0` + * + * 在插件中使用:支持 + * + * 返回一个包含图片展示的 data URI 。可以使用 type 参数其类型,默认为 PNG 格式。 */ + toDataURL( + /** 图片格式,默认为 image/png */ + type: string, + /** 在指定图片格式为 image/jpeg 或 image/webp的情况下,可以从 0 到 1 的区间内选择图片的质量。如果超出取值范围,将会使用默认值 0.92。其他参数会被忽略。 */ + encoderOptions: number + ): string + } + interface CanvasContext { + /** [CanvasContext.arc(number x, number y, number r, number sAngle, number eAngle, boolean counterclockwise)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.arc.html) +* +* 在插件中使用:支持 +* @deprecated 基础库版本 [2.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) 替换 +* +* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** +* +* 创建一条弧线。 +* +* - 创建一个圆可以指定起始弧度为 0,终止弧度为 2 * Math.PI。 +* - 用 `stroke` 或者 `fill` 方法来在 `canvas` 中画弧线。 +* +* **示例代码** +* +* ```javascript +const ctx = wx.createCanvasContext('myCanvas') + +// Draw coordinates +ctx.arc(100, 75, 50, 0, 2 * Math.PI) +ctx.setFillStyle('#EEEEEE') +ctx.fill() + +ctx.beginPath() +ctx.moveTo(40, 75) +ctx.lineTo(160, 75) +ctx.moveTo(100, 15) +ctx.lineTo(100, 135) +ctx.setStrokeStyle('#AAAAAA') +ctx.stroke() + +ctx.setFontSize(12) +ctx.setFillStyle('black') +ctx.fillText('0', 165, 78) +ctx.fillText('0.5*PI', 83, 145) +ctx.fillText('1*PI', 15, 78) +ctx.fillText('1.5*PI', 83, 10) + +// Draw points +ctx.beginPath() +ctx.arc(100, 75, 2, 0, 2 * Math.PI) +ctx.setFillStyle('lightgreen') +ctx.fill() + +ctx.beginPath() +ctx.arc(100, 25, 2, 0, 2 * Math.PI) +ctx.setFillStyle('blue') +ctx.fill() + +ctx.beginPath() +ctx.arc(150, 75, 2, 0, 2 * Math.PI) +ctx.setFillStyle('red') +ctx.fill() + +// Draw arc +ctx.beginPath() +ctx.arc(100, 75, 50, 0, 1.5 * Math.PI) +ctx.setStrokeStyle('#333333') +ctx.stroke() + +ctx.draw() +``` +* +* ![](@program/dev/image/canvas/arc.png) +* +* 针对 arc(100, 75, 50, 0, 1.5 * Math.PI)的三个关键坐标如下: +* +* - 绿色: 圆心 (100, 75) +* - 红色: 起始弧度 (0) +* - 蓝色: 终止弧度 (1.5 * Math.PI) */ + arc( + /** 圆心的 x 坐标 */ + x: number, + /** 圆心的 y 坐标 */ + y: number, + /** 圆的半径 */ + r: number, + /** 起始弧度,单位弧度(在3点钟方向) */ + sAngle: number, + /** 终止弧度 */ + eAngle: number, + /** 弧度的方向是否是逆时针 */ + counterclockwise?: boolean + ): void + /** [CanvasContext.arcTo(number x1, number y1, number x2, number y2, number radius)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.arcTo.html) + * + * 需要基础库: `1.9.90` + * + * 在插件中使用:支持 + * @deprecated 基础库版本 [2.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) 替换 + * + * @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** + * + * 根据控制点和半径绘制圆弧路径。 */ + arcTo( + /** 第一个控制点的 x 轴坐标 */ + x1: number, + /** 第一个控制点的 y 轴坐标 */ + y1: number, + /** 第二个控制点的 x 轴坐标 */ + x2: number, + /** 第二个控制点的 y 轴坐标 */ + y2: number, + /** 圆弧的半径 */ + radius: number + ): void + /** [CanvasContext.beginPath()](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.beginPath.html) +* +* 在插件中使用:支持 +* @deprecated 基础库版本 [2.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) 替换 +* +* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** +* +* 开始创建一个路径。需要调用 `fill` 或者 `stroke` 才会使用路径进行填充或描边 +* +* - 在最开始的时候相当于调用了一次 `beginPath`。 +* - 同一个路径内的多次 `setFillStyle`、`setStrokeStyle`、`setLineWidth`等设置,以最后一次设置为准。 +* +* **示例代码** +* +* ```javascript +const ctx = wx.createCanvasContext('myCanvas') +// begin path +ctx.rect(10, 10, 100, 30) +ctx.setFillStyle('yellow') +ctx.fill() + +// begin another path +ctx.beginPath() +ctx.rect(10, 40, 100, 30) + +// only fill this rect, not in current path +ctx.setFillStyle('blue') +ctx.fillRect(10, 70, 100, 30) + +ctx.rect(10, 100, 100, 30) + +// it will fill current path +ctx.setFillStyle('red') +ctx.fill() +ctx.draw() +``` +* +* ![](@program/dev/image/canvas/fill-path.png) */ + beginPath(): void + /** [CanvasContext.bezierCurveTo(number cp1x, number cp1y, number cp2x, number cp2y, number x, number y)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.bezierCurveTo.html) +* +* 在插件中使用:支持 +* @deprecated 基础库版本 [2.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) 替换 +* +* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** +* +* 创建三次方贝塞尔曲线路径。曲线的起始点为路径中前一个点。 +* +* **示例代码** +* +* ```javascript +const ctx = wx.createCanvasContext('myCanvas') + +// Draw points +ctx.beginPath() +ctx.arc(20, 20, 2, 0, 2 * Math.PI) +ctx.setFillStyle('red') +ctx.fill() + +ctx.beginPath() +ctx.arc(200, 20, 2, 0, 2 * Math.PI) +ctx.setFillStyle('lightgreen') +ctx.fill() + +ctx.beginPath() +ctx.arc(20, 100, 2, 0, 2 * Math.PI) +ctx.arc(200, 100, 2, 0, 2 * Math.PI) +ctx.setFillStyle('blue') +ctx.fill() + +ctx.setFillStyle('black') +ctx.setFontSize(12) + +// Draw guides +ctx.beginPath() +ctx.moveTo(20, 20) +ctx.lineTo(20, 100) +ctx.lineTo(150, 75) + +ctx.moveTo(200, 20) +ctx.lineTo(200, 100) +ctx.lineTo(70, 75) +ctx.setStrokeStyle('#AAAAAA') +ctx.stroke() + +// Draw quadratic curve +ctx.beginPath() +ctx.moveTo(20, 20) +ctx.bezierCurveTo(20, 100, 200, 100, 200, 20) +ctx.setStrokeStyle('black') +ctx.stroke() + +ctx.draw() +``` +* +* ![](@program/dev/image/canvas/bezier-curve.png) +* +* 针对 moveTo(20, 20) bezierCurveTo(20, 100, 200, 100, 200, 20) 的三个关键坐标如下: +* +* - 红色:起始点(20, 20) +* - 蓝色:两个控制点(20, 100) (200, 100) +* - 绿色:终止点(200, 20) */ + bezierCurveTo( + /** 第一个贝塞尔控制点的 x 坐标 */ + cp1x: number, + /** 第一个贝塞尔控制点的 y 坐标 */ + cp1y: number, + /** 第二个贝塞尔控制点的 x 坐标 */ + cp2x: number, + /** 第二个贝塞尔控制点的 y 坐标 */ + cp2y: number, + /** 结束点的 x 坐标 */ + x: number, + /** 结束点的 y 坐标 */ + y: number + ): void + /** [CanvasContext.clearRect(number x, number y, number width, number height)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.clearRect.html) +* +* 在插件中使用:支持 +* @deprecated 基础库版本 [2.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) 替换 +* +* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** +* +* 清除画布上在该矩形区域内的内容 +* +* **示例代码** +* +* clearRect 并非画一个白色的矩形在地址区域,而是清空,为了有直观感受,对 canvas 加了一层背景色。 +* ```html +* +* ``` +* ```javascript +const ctx = wx.createCanvasContext('myCanvas') +ctx.setFillStyle('red') +ctx.fillRect(0, 0, 150, 200) +ctx.setFillStyle('blue') +ctx.fillRect(150, 0, 150, 200) +ctx.clearRect(10, 10, 150, 75) +ctx.draw() +``` +* ![](@program/dev/image/canvas/clear-rect.png) */ + clearRect( + /** 矩形路径左上角的横坐标 */ + x: number, + /** 矩形路径左上角的纵坐标 */ + y: number, + /** 矩形路径的宽度 */ + width: number, + /** 矩形路径的高度 */ + height: number + ): void + /** [CanvasContext.clip()](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.clip.html) +* +* 需要基础库: `1.6.0` +* +* 在插件中使用:支持 +* @deprecated 基础库版本 [2.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) 替换 +* +* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** +* +* 从原始画布中剪切任意形状和尺寸。一旦剪切了某个区域,则所有之后的绘图都会被限制在被剪切的区域内(不能访问画布上的其他区域)。可以在使用 `clip` 方法前通过使用 `save` 方法对当前画布区域进行保存,并在以后的任意时间通过`restore`方法对其进行恢复。 +* +* **示例代码** +* +* ```javascript +const ctx = wx.createCanvasContext('myCanvas') + +wx.downloadFile({ + url: 'http://is5.mzstatic.com/image/thumb/Purple128/v4/75/3b/90/753b907c-b7fb-5877-215a-759bd73691a4/source/50x50bb.jpg', + success: function(res) { + ctx.save() + ctx.beginPath() + ctx.arc(50, 50, 25, 0, 2*Math.PI) + ctx.clip() + ctx.drawImage(res.tempFilePath, 25, 25) + ctx.restore() + ctx.draw() + } +}) +``` +* ![](@program/dev/image/canvas/clip.png) */ + clip(): void + /** [CanvasContext.closePath()](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.closePath.html) +* +* 在插件中使用:支持 +* @deprecated 基础库版本 [2.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) 替换 +* +* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** +* +* 关闭一个路径。会连接起点和终点。如果关闭路径后没有调用 `fill` 或者 `stroke` 并开启了新的路径,那之前的路径将不会被渲染。 +* +* **示例代码** +* +* ```javascript +const ctx = wx.createCanvasContext('myCanvas') +ctx.moveTo(10, 10) +ctx.lineTo(100, 10) +ctx.lineTo(100, 100) +ctx.closePath() +ctx.stroke() +ctx.draw() +``` +* ![](@program/dev/image/canvas/close-line.png) +* +* ```javascript +const ctx = wx.createCanvasContext('myCanvas') +// begin path +ctx.rect(10, 10, 100, 30) +ctx.closePath() + +// begin another path +ctx.beginPath() +ctx.rect(10, 40, 100, 30) + +// only fill this rect, not in current path +ctx.setFillStyle('blue') +ctx.fillRect(10, 70, 100, 30) + +ctx.rect(10, 100, 100, 30) + +// it will fill current path +ctx.setFillStyle('red') +ctx.fill() +ctx.draw() +``` +* +* ![](@program/dev/image/canvas/close-path.png) */ + closePath(): void + /** [CanvasContext.createPattern(string image, string repetition)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.createPattern.html) + * + * 需要基础库: `1.9.90` + * + * 在插件中使用:支持 + * @deprecated 基础库版本 [2.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) 替换 + * + * @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** + * + * 对指定的图像创建模式的方法,可在指定的方向上重复元图像 */ + createPattern( + /** 重复的图像源,支持代码包路径和本地临时路径 (本地路径) */ + image: string, + /** 如何重复图像 + * + * 参数 repetition 可选值: + * - 'repeat': 水平竖直方向都重复; + * - 'repeat-x': 水平方向重复; + * - 'repeat-y': 竖直方向重复; + * - 'no-repeat': 不重复; */ + repetition: 'repeat' | 'repeat-x' | 'repeat-y' | 'no-repeat' + ): void + /** [CanvasContext.draw(boolean reserve, function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.draw.html) +* +* 在插件中使用:支持 +* @deprecated 基础库版本 [2.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) 替换 +* +* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** +* +* 将之前在绘图上下文中的描述(路径、变形、样式)画到 canvas 中。 +* +* **示例代码** +* +* 第二次 draw() reserve 为 true。所以保留了上一次的绘制结果,在上下文设置的 fillStyle 'red' 也变成了默认的 'black'。 +* +* ```javascript +const ctx = wx.createCanvasContext('myCanvas') + +ctx.setFillStyle('red') +ctx.fillRect(10, 10, 150, 100) +ctx.draw() +ctx.fillRect(50, 50, 150, 100) +ctx.draw(true) +``` +* ![](@program/dev/image/canvas/reserve.png) +* +* **示例代码** +* +* 第二次 draw() reserve 为 false。所以没有保留了上一次的绘制结果和在上下文设置的 fillStyle 'red'。 +* +* ```javascript +const ctx = wx.createCanvasContext('myCanvas') + +ctx.setFillStyle('red') +ctx.fillRect(10, 10, 150, 100) +ctx.draw() +ctx.fillRect(50, 50, 150, 100) +ctx.draw() +``` +* ![](@program/dev/image/canvas/un-reserve.png) */ + draw( + /** 本次绘制是否接着上一次绘制。即 reserve 参数为 false,则在本次调用绘制之前 native 层会先清空画布再继续绘制;若 reserve 参数为 true,则保留当前画布上的内容,本次调用 drawCanvas 绘制的内容覆盖在上面,默认 false。 */ + reserve?: boolean, + /** 绘制完成后执行的回调函数 */ + callback?: (...args: any[]) => any + ): void + /** [CanvasContext.drawImage(string imageResource, number sx, number sy, number sWidth, number sHeight, number dx, number dy, number dWidth, number dHeight)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.drawImage.html) +* +* 在插件中使用:支持 +* @deprecated 基础库版本 [2.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) 替换 +* +* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** +* +* 绘制图像到画布 +* +* **示例代码** +* +* 有三个版本的写法: +* +* - drawImage(imageResource, dx, dy) +* - drawImage(imageResource, dx, dy, dWidth, dHeight) +* - drawImage(imageResource, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight) 从 1.9.0 起支持 +* +* ```javascript +const ctx = wx.createCanvasContext('myCanvas') + +wx.chooseImage({ + success: function(res){ + ctx.drawImage(res.tempFilePaths[0], 0, 0, 150, 100) + ctx.draw() + } +}) + +``` +* ![](@program/dev/image/canvas/draw-image.png) */ + drawImage( + /** 所要绘制的图片资源(网络图片要通过 getImageInfo / downloadFile 先下载) */ + imageResource: string, + /** imageResource的左上角在目标 canvas 上 x 轴的位置 */ + dx: number, + /** imageResource的左上角在目标 canvas 上 y 轴的位置 */ + dy: number + ): void + /** [CanvasContext.drawImage(string imageResource, number sx, number sy, number sWidth, number sHeight, number dx, number dy, number dWidth, number dHeight)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.drawImage.html) +* +* 在插件中使用:支持 +* @deprecated 基础库版本 [2.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) 替换 +* +* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** +* +* 绘制图像到画布 +* +* **示例代码** +* +* 有三个版本的写法: +* +* - drawImage(imageResource, dx, dy) +* - drawImage(imageResource, dx, dy, dWidth, dHeight) +* - drawImage(imageResource, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight) 从 1.9.0 起支持 +* +* ```javascript +const ctx = wx.createCanvasContext('myCanvas') + +wx.chooseImage({ + success: function(res){ + ctx.drawImage(res.tempFilePaths[0], 0, 0, 150, 100) + ctx.draw() + } +}) + +``` +* ![](@program/dev/image/canvas/draw-image.png) */ + drawImage( + /** 所要绘制的图片资源(网络图片要通过 getImageInfo / downloadFile 先下载) */ + imageResource: string, + /** imageResource的左上角在目标 canvas 上 x 轴的位置 */ + dx: number, + /** imageResource的左上角在目标 canvas 上 y 轴的位置 */ + dy: number, + /** 在目标画布上绘制imageResource的宽度,允许对绘制的imageResource进行缩放 */ + dWidth: number, + /** 在目标画布上绘制imageResource的高度,允许对绘制的imageResource进行缩放 */ + dHeight: number + ): void + /** [CanvasContext.drawImage(string imageResource, number sx, number sy, number sWidth, number sHeight, number dx, number dy, number dWidth, number dHeight)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.drawImage.html) +* +* 在插件中使用:支持 +* @deprecated 基础库版本 [2.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) 替换 +* +* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** +* +* 绘制图像到画布 +* +* **示例代码** +* +* 有三个版本的写法: +* +* - drawImage(imageResource, dx, dy) +* - drawImage(imageResource, dx, dy, dWidth, dHeight) +* - drawImage(imageResource, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight) 从 1.9.0 起支持 +* +* ```javascript +const ctx = wx.createCanvasContext('myCanvas') + +wx.chooseImage({ + success: function(res){ + ctx.drawImage(res.tempFilePaths[0], 0, 0, 150, 100) + ctx.draw() + } +}) + +``` +* ![](@program/dev/image/canvas/draw-image.png) */ + drawImage( + /** 所要绘制的图片资源(网络图片要通过 getImageInfo / downloadFile 先下载) */ + imageResource: string, + /** 需要绘制到画布中的,imageResource的矩形(裁剪)选择框的左上角 x 坐标 */ + sx: number, + /** 需要绘制到画布中的,imageResource的矩形(裁剪)选择框的左上角 y 坐标 */ + sy: number, + /** 需要绘制到画布中的,imageResource的矩形(裁剪)选择框的宽度 */ + sWidth: number, + /** 需要绘制到画布中的,imageResource的矩形(裁剪)选择框的高度 */ + sHeight: number, + /** imageResource的左上角在目标 canvas 上 x 轴的位置 */ + dx: number, + /** imageResource的左上角在目标 canvas 上 y 轴的位置 */ + dy: number, + /** 在目标画布上绘制imageResource的宽度,允许对绘制的imageResource进行缩放 */ + dWidth: number, + /** 在目标画布上绘制imageResource的高度,允许对绘制的imageResource进行缩放 */ + dHeight: number + ): void + /** [CanvasContext.fill()](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.fill.html) +* +* 在插件中使用:支持 +* @deprecated 基础库版本 [2.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) 替换 +* +* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** +* +* 对当前路径中的内容进行填充。默认的填充色为黑色。 +* +* **示例代码** +* +* 如果当前路径没有闭合,fill() 方法会将起点和终点进行连接,然后填充。 +* +* ```javascript +const ctx = wx.createCanvasContext('myCanvas') +ctx.moveTo(10, 10) +ctx.lineTo(100, 10) +ctx.lineTo(100, 100) +ctx.fill() +ctx.draw() +``` +* +* fill() 填充的的路径是从 beginPath() 开始计算,但是不会将 fillRect() 包含进去。 +* +* ![](@program/dev/image/canvas/fill-line.png) +* +* ```javascript +const ctx = wx.createCanvasContext('myCanvas') +// begin path +ctx.rect(10, 10, 100, 30) +ctx.setFillStyle('yellow') +ctx.fill() + +// begin another path +ctx.beginPath() +ctx.rect(10, 40, 100, 30) + +// only fill this rect, not in current path +ctx.setFillStyle('blue') +ctx.fillRect(10, 70, 100, 30) + +ctx.rect(10, 100, 100, 30) + +// it will fill current path +ctx.setFillStyle('red') +ctx.fill() +ctx.draw() +``` +* +* ![](@program/dev/image/canvas/fill-path.png) */ + fill(): void + /** [CanvasContext.fillRect(number x, number y, number width, number height)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.fillRect.html) +* +* 在插件中使用:支持 +* @deprecated 基础库版本 [2.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) 替换 +* +* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** +* +* 填充一个矩形。用 [`setFillStyle`](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.setFillStyle.html) 设置矩形的填充色,如果没设置默认是黑色。 +* +* **示例代码** +* +* ```javascript +const ctx = wx.createCanvasContext('myCanvas') +ctx.setFillStyle('red') +ctx.fillRect(10, 10, 150, 75) +ctx.draw() +``` +* ![](@program/dev/image/canvas/fill-rect.png) */ + fillRect( + /** 矩形路径左上角的横坐标 */ + x: number, + /** 矩形路径左上角的纵坐标 */ + y: number, + /** 矩形路径的宽度 */ + width: number, + /** 矩形路径的高度 */ + height: number + ): void + /** [CanvasContext.fillText(string text, number x, number y, number maxWidth)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.fillText.html) +* +* 在插件中使用:支持 +* @deprecated 基础库版本 [2.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) 替换 +* +* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** +* +* 在画布上绘制被填充的文本 +* +* **示例代码** +* +* ```javascript +const ctx = wx.createCanvasContext('myCanvas') + +ctx.setFontSize(20) +ctx.fillText('Hello', 20, 20) +ctx.fillText('MINA', 100, 100) + +ctx.draw() +``` +* ![](@program/dev/image/canvas/text.png) */ + fillText( + /** 在画布上输出的文本 */ + text: string, + /** 绘制文本的左上角 x 坐标位置 */ + x: number, + /** 绘制文本的左上角 y 坐标位置 */ + y: number, + /** 需要绘制的最大宽度,可选 */ + maxWidth?: number + ): void + /** [CanvasContext.lineTo(number x, number y)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.lineTo.html) +* +* 在插件中使用:支持 +* @deprecated 基础库版本 [2.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) 替换 +* +* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** +* +* 增加一个新点,然后创建一条从上次指定点到目标点的线。用 `stroke` 方法来画线条 +* +* **示例代码** +* +* ```javascript +const ctx = wx.createCanvasContext('myCanvas') +ctx.moveTo(10, 10) +ctx.rect(10, 10, 100, 50) +ctx.lineTo(110, 60) +ctx.stroke() +ctx.draw() +``` +* ![](@program/dev/image/canvas/line-to.png) */ + lineTo( + /** 目标位置的 x 坐标 */ + x: number, + /** 目标位置的 y 坐标 */ + y: number + ): void + /** [CanvasContext.moveTo(number x, number y)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.moveTo.html) +* +* 在插件中使用:支持 +* @deprecated 基础库版本 [2.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) 替换 +* +* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** +* +* 把路径移动到画布中的指定点,不创建线条。用 `stroke` 方法来画线条 +* +* **示例代码** +* +* ```javascript +const ctx = wx.createCanvasContext('myCanvas') +ctx.moveTo(10, 10) +ctx.lineTo(100, 10) + +ctx.moveTo(10, 50) +ctx.lineTo(100, 50) +ctx.stroke() +ctx.draw() +``` +* ![](@program/dev/image/canvas/move-to.png) */ + moveTo( + /** 目标位置的 x 坐标 */ + x: number, + /** 目标位置的 y 坐标 */ + y: number + ): void + /** [CanvasContext.quadraticCurveTo(number cpx, number cpy, number x, number y)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.quadraticCurveTo.html) +* +* 在插件中使用:支持 +* @deprecated 基础库版本 [2.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) 替换 +* +* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** +* +* 创建二次贝塞尔曲线路径。曲线的起始点为路径中前一个点。 +* +* **示例代码** +* +* ```javascript +const ctx = wx.createCanvasContext('myCanvas') + +// Draw points +ctx.beginPath() +ctx.arc(20, 20, 2, 0, 2 * Math.PI) +ctx.setFillStyle('red') +ctx.fill() + +ctx.beginPath() +ctx.arc(200, 20, 2, 0, 2 * Math.PI) +ctx.setFillStyle('lightgreen') +ctx.fill() + +ctx.beginPath() +ctx.arc(20, 100, 2, 0, 2 * Math.PI) +ctx.setFillStyle('blue') +ctx.fill() + +ctx.setFillStyle('black') +ctx.setFontSize(12) + +// Draw guides +ctx.beginPath() +ctx.moveTo(20, 20) +ctx.lineTo(20, 100) +ctx.lineTo(200, 20) +ctx.setStrokeStyle('#AAAAAA') +ctx.stroke() + +// Draw quadratic curve +ctx.beginPath() +ctx.moveTo(20, 20) +ctx.quadraticCurveTo(20, 100, 200, 20) +ctx.setStrokeStyle('black') +ctx.stroke() + +ctx.draw() +``` +* +* ![](@program/dev/image/canvas/quadratic-curve-to.png) +* +* 针对 moveTo(20, 20) quadraticCurveTo(20, 100, 200, 20) 的三个关键坐标如下: +* +* - 红色:起始点(20, 20) +* - 蓝色:控制点(20, 100) +* - 绿色:终止点(200, 20) */ + quadraticCurveTo( + /** 贝塞尔控制点的 x 坐标 */ + cpx: number, + /** 贝塞尔控制点的 y 坐标 */ + cpy: number, + /** 结束点的 x 坐标 */ + x: number, + /** 结束点的 y 坐标 */ + y: number + ): void + /** [CanvasContext.rect(number x, number y, number width, number height)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.rect.html) +* +* 在插件中使用:支持 +* @deprecated 基础库版本 [2.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) 替换 +* +* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** +* +* 创建一个矩形路径。需要用 [`fill`](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.fill.html) 或者 [`stroke`](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.stroke.html) 方法将矩形真正的画到 `canvas` 中 +* +* **示例代码** +* +* ```javascript +const ctx = wx.createCanvasContext('myCanvas') +ctx.rect(10, 10, 150, 75) +ctx.setFillStyle('red') +ctx.fill() +ctx.draw() +``` +* ![](@program/dev/image/canvas/fill-rect.png) */ + rect( + /** 矩形路径左上角的横坐标 */ + x: number, + /** 矩形路径左上角的纵坐标 */ + y: number, + /** 矩形路径的宽度 */ + width: number, + /** 矩形路径的高度 */ + height: number + ): void + /** [CanvasContext.restore()](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.restore.html) +* +* 在插件中使用:支持 +* @deprecated 基础库版本 [2.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) 替换 +* +* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** +* +* 恢复之前保存的绘图上下文。 +* +* **示例代码** +* +* ```javascript +const ctx = wx.createCanvasContext('myCanvas') + +// save the default fill style +ctx.save() +ctx.setFillStyle('red') +ctx.fillRect(10, 10, 150, 100) + +// restore to the previous saved state +ctx.restore() +ctx.fillRect(50, 50, 150, 100) + +ctx.draw() +``` +* ![](@program/dev/image/canvas/save-restore.png) */ + restore(): void + /** [CanvasContext.rotate(number rotate)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.rotate.html) +* +* 在插件中使用:支持 +* @deprecated 基础库版本 [2.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) 替换 +* +* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** +* +* 以原点为中心顺时针旋转当前坐标轴。多次调用旋转的角度会叠加。原点可以用 `translate` 方法修改。 +* +* **示例代码** +* +* ```javascript +const ctx = wx.createCanvasContext('myCanvas') + +ctx.strokeRect(100, 10, 150, 100) +ctx.rotate(20 * Math.PI / 180) +ctx.strokeRect(100, 10, 150, 100) +ctx.rotate(20 * Math.PI / 180) +ctx.strokeRect(100, 10, 150, 100) + +ctx.draw() +``` +* ![](@program/dev/image/canvas/rotate.png) */ + rotate( + /** 旋转角度,以弧度计 degrees * Math.PI/180;degrees 范围为 0-360 */ + rotate: number + ): void + /** [CanvasContext.save()](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.save.html) +* +* 在插件中使用:支持 +* @deprecated 基础库版本 [2.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) 替换 +* +* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** +* +* 保存绘图上下文。 +* +* **示例代码** +* +* ```javascript +const ctx = wx.createCanvasContext('myCanvas') + +// save the default fill style +ctx.save() +ctx.setFillStyle('red') +ctx.fillRect(10, 10, 150, 100) + +// restore to the previous saved state +ctx.restore() +ctx.fillRect(50, 50, 150, 100) + +ctx.draw() +``` +* ![](@program/dev/image/canvas/save-restore.png) */ + save(): void + /** [CanvasContext.scale(number scaleWidth, number scaleHeight)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.scale.html) +* +* 在插件中使用:支持 +* @deprecated 基础库版本 [2.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) 替换 +* +* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** +* +* 在调用后,之后创建的路径其横纵坐标会被缩放。多次调用倍数会相乘。 +* +* **示例代码** +* +* ```javascript +const ctx = wx.createCanvasContext('myCanvas') + +ctx.strokeRect(10, 10, 25, 15) +ctx.scale(2, 2) +ctx.strokeRect(10, 10, 25, 15) +ctx.scale(2, 2) +ctx.strokeRect(10, 10, 25, 15) + +ctx.draw() +``` +* ![](@program/dev/image/canvas/scale.png) */ + scale( + /** 横坐标缩放的倍数 (1 = 100%,0.5 = 50%,2 = 200%) */ + scaleWidth: number, + /** 纵坐标轴缩放的倍数 (1 = 100%,0.5 = 50%,2 = 200%) */ + scaleHeight: number + ): void + /** [CanvasContext.setFillStyle(string|[CanvasGradient](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasGradient.html) color)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.setFillStyle.html) +* +* 在插件中使用:支持 +* @deprecated 基础库版本 [1.9.90](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [CanvasContext.fillStyle](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.html) 替换 +* +* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** +* +* 设置填充色。 +* +* **代码示例** +* +* ```js +const ctx = wx.createCanvasContext('myCanvas') +ctx.setFillStyle('red') +ctx.fillRect(10, 10, 150, 75) +ctx.draw() +``` +* ![](@program/dev/image/canvas/fill-rect.png) */ + setFillStyle( + /** 填充的颜色,默认颜色为 black。 */ + color: string | CanvasGradient + ): void + /** [CanvasContext.setFontSize(number fontSize)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.setFontSize.html) +* +* 在插件中使用:支持 +* @deprecated 基础库版本 [1.9.90](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [CanvasContext.font](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.html) 替换 +* +* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** +* +* 设置字体的字号 +* +* **示例代码** +* +* ```javascript +const ctx = wx.createCanvasContext('myCanvas') + +ctx.setFontSize(20) +ctx.fillText('20', 20, 20) +ctx.setFontSize(30) +ctx.fillText('30', 40, 40) +ctx.setFontSize(40) +ctx.fillText('40', 60, 60) +ctx.setFontSize(50) +ctx.fillText('50', 90, 90) + +ctx.draw() +``` +* ![](@program/dev/image/canvas/font-size.png) */ + setFontSize( + /** 字体的字号 */ + fontSize: number + ): void + /** [CanvasContext.setGlobalAlpha(number alpha)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.setGlobalAlpha.html) +* +* 在插件中使用:支持 +* @deprecated 基础库版本 [1.9.90](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [CanvasContext.globalAlpha](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.html) 替换 +* +* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** +* +* 设置全局画笔透明度。 +* +* **示例代码** +* +* ```javascript +const ctx = wx.createCanvasContext('myCanvas') + +ctx.setFillStyle('red') +ctx.fillRect(10, 10, 150, 100) +ctx.setGlobalAlpha(0.2) +ctx.setFillStyle('blue') +ctx.fillRect(50, 50, 150, 100) +ctx.setFillStyle('yellow') +ctx.fillRect(100, 100, 150, 100) + +ctx.draw() +``` +* ![](@program/dev/image/canvas/global-alpha.png) */ + setGlobalAlpha( + /** 透明度。范围 0-1,0 表示完全透明,1 表示完全不透明。 */ + alpha: number + ): void + /** [CanvasContext.setLineCap(string lineCap)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.setLineCap.html) +* +* 在插件中使用:支持 +* @deprecated 基础库版本 [1.9.90](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [CanvasContext.lineCap](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.html) 替换 +* +* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** +* +* 设置线条的端点样式 +* +* **示例代码** +* +* ```javascript +const ctx = wx.createCanvasContext('myCanvas') +ctx.beginPath() +ctx.moveTo(10, 10) +ctx.lineTo(150, 10) +ctx.stroke() + +ctx.beginPath() +ctx.setLineCap('butt') +ctx.setLineWidth(10) +ctx.moveTo(10, 30) +ctx.lineTo(150, 30) +ctx.stroke() + +ctx.beginPath() +ctx.setLineCap('round') +ctx.setLineWidth(10) +ctx.moveTo(10, 50) +ctx.lineTo(150, 50) +ctx.stroke() + +ctx.beginPath() +ctx.setLineCap('square') +ctx.setLineWidth(10) +ctx.moveTo(10, 70) +ctx.lineTo(150, 70) +ctx.stroke() + +ctx.draw() +``` +* ![](@program/dev/image/canvas/line-cap.png) */ + setLineCap( + /** 线条的结束端点样式 + * + * 参数 lineCap 可选值: + * - 'butt': 向线条的每个末端添加平直的边缘。; + * - 'round': 向线条的每个末端添加圆形线帽。; + * - 'square': 向线条的每个末端添加正方形线帽。; */ + lineCap: 'butt' | 'round' | 'square' + ): void + /** [CanvasContext.setLineDash(Array.<number> pattern, number offset)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.setLineDash.html) +* +* 需要基础库: `1.6.0` +* +* 在插件中使用:支持 +* @deprecated 基础库版本 [1.9.90](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [CanvasContext.lineDashOffset](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.html) 替换 +* +* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** +* +* 设置虚线样式。 +* +* **示例代码** +* +* ```javascript +const ctx = wx.createCanvasContext('myCanvas') + +ctx.setLineDash([10, 20], 5); + +ctx.beginPath(); +ctx.moveTo(0,100); +ctx.lineTo(400, 100); +ctx.stroke(); + +ctx.draw() +``` +* ![](@program/dev/image/canvas/set-line-dash.png) */ + setLineDash( + /** 一组描述交替绘制线段和间距(坐标空间单位)长度的数字 */ + pattern: number[], + /** 虚线偏移量 */ + offset: number + ): void + /** [CanvasContext.setLineJoin(string lineJoin)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.setLineJoin.html) +* +* 在插件中使用:支持 +* @deprecated 基础库版本 [1.9.90](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [CanvasContext.lineJoin](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.html) 替换 +* +* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** +* +* 设置线条的交点样式 +* +* **示例代码** +* +* ```javascript +const ctx = wx.createCanvasContext('myCanvas') +ctx.beginPath() +ctx.moveTo(10, 10) +ctx.lineTo(100, 50) +ctx.lineTo(10, 90) +ctx.stroke() + +ctx.beginPath() +ctx.setLineJoin('bevel') +ctx.setLineWidth(10) +ctx.moveTo(50, 10) +ctx.lineTo(140, 50) +ctx.lineTo(50, 90) +ctx.stroke() + +ctx.beginPath() +ctx.setLineJoin('round') +ctx.setLineWidth(10) +ctx.moveTo(90, 10) +ctx.lineTo(180, 50) +ctx.lineTo(90, 90) +ctx.stroke() + +ctx.beginPath() +ctx.setLineJoin('miter') +ctx.setLineWidth(10) +ctx.moveTo(130, 10) +ctx.lineTo(220, 50) +ctx.lineTo(130, 90) +ctx.stroke() + +ctx.draw() +``` +* ![](@program/dev/image/canvas/line-join.png) */ + setLineJoin( + /** 线条的结束交点样式 + * + * 参数 lineJoin 可选值: + * - 'bevel': 斜角; + * - 'round': 圆角; + * - 'miter': 尖角; */ + lineJoin: 'bevel' | 'round' | 'miter' + ): void + /** [CanvasContext.setLineWidth(number lineWidth)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.setLineWidth.html) +* +* 在插件中使用:支持 +* @deprecated 基础库版本 [1.9.90](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [CanvasContext.lineWidth](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.html) 替换 +* +* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** +* +* 设置线条的宽度 +* +* **示例代码** +* +* ```javascript +const ctx = wx.createCanvasContext('myCanvas') +ctx.beginPath() +ctx.moveTo(10, 10) +ctx.lineTo(150, 10) +ctx.stroke() + +ctx.beginPath() +ctx.setLineWidth(5) +ctx.moveTo(10, 30) +ctx.lineTo(150, 30) +ctx.stroke() + +ctx.beginPath() +ctx.setLineWidth(10) +ctx.moveTo(10, 50) +ctx.lineTo(150, 50) +ctx.stroke() + +ctx.beginPath() +ctx.setLineWidth(15) +ctx.moveTo(10, 70) +ctx.lineTo(150, 70) +ctx.stroke() + +ctx.draw() +``` +* +* ![](@program/dev/image/canvas/line-width.png) */ + setLineWidth( + /** 线条的宽度,单位px */ + lineWidth: number + ): void + /** [CanvasContext.setMiterLimit(number miterLimit)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.setMiterLimit.html) +* +* 在插件中使用:支持 +* @deprecated 基础库版本 [1.9.90](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [CanvasContext.miterLimit](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.html) 替换 +* +* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** +* +* 设置最大斜接长度。斜接长度指的是在两条线交汇处内角和外角之间的距离。当 [CanvasContext.setLineJoin()](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.setLineJoin.html) 为 miter 时才有效。超过最大倾斜长度的,连接处将以 lineJoin 为 bevel 来显示。 +* +* **示例代码** +* +* ```javascript +const ctx = wx.createCanvasContext('myCanvas') +ctx.beginPath() +ctx.setLineWidth(10) +ctx.setLineJoin('miter') +ctx.setMiterLimit(1) +ctx.moveTo(10, 10) +ctx.lineTo(100, 50) +ctx.lineTo(10, 90) +ctx.stroke() + +ctx.beginPath() +ctx.setLineWidth(10) +ctx.setLineJoin('miter') +ctx.setMiterLimit(2) +ctx.moveTo(50, 10) +ctx.lineTo(140, 50) +ctx.lineTo(50, 90) +ctx.stroke() + +ctx.beginPath() +ctx.setLineWidth(10) +ctx.setLineJoin('miter') +ctx.setMiterLimit(3) +ctx.moveTo(90, 10) +ctx.lineTo(180, 50) +ctx.lineTo(90, 90) +ctx.stroke() + +ctx.beginPath() +ctx.setLineWidth(10) +ctx.setLineJoin('miter') +ctx.setMiterLimit(4) +ctx.moveTo(130, 10) +ctx.lineTo(220, 50) +ctx.lineTo(130, 90) +ctx.stroke() + +ctx.draw() +``` +* ![](@program/dev/image/canvas/miter-limit.png) */ + setMiterLimit( + /** 最大斜接长度 */ + miterLimit: number + ): void + /** [CanvasContext.setShadow(number offsetX, number offsetY, number blur, string color)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.setShadow.html) +* +* 在插件中使用:支持 +* @deprecated 基础库版本 [1.9.90](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [CanvasContext.shadowOffsetX|CanvasContext.shadowOffsetY|CanvasContext.shadowColor|CanvasContext.shadowBlur](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.html) 替换 +* +* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** +* +* 设定阴影样式。 +* +* **示例代码** +* +* ```javascript +const ctx = wx.createCanvasContext('myCanvas') +ctx.setFillStyle('red') +ctx.setShadow(10, 50, 50, 'blue') +ctx.fillRect(10, 10, 150, 75) +ctx.draw() +``` +* ![](@program/dev/image/canvas/shadow.png) */ + setShadow( + /** 阴影相对于形状在水平方向的偏移,默认值为 0。 */ + offsetX: number, + /** 阴影相对于形状在竖直方向的偏移,默认值为 0。 */ + offsetY: number, + /** 阴影的模糊级别,数值越大越模糊。范围 0- 100。,默认值为 0。 */ + blur: number, + /** 阴影的颜色。默认值为 black。 */ + color: string + ): void + /** [CanvasContext.setStrokeStyle(string|[CanvasGradient](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasGradient.html) color)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.setStrokeStyle.html) +* +* 在插件中使用:支持 +* @deprecated 基础库版本 [1.9.90](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [CanvasContext.strokeStyle](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.html) 替换 +* +* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** +* +* 设置描边颜色。 +* +* **代码示例** +* +* ```js +const ctx = wx.createCanvasContext('myCanvas') +ctx.setStrokeStyle('red') +ctx.strokeRect(10, 10, 150, 75) +ctx.draw() +``` +* ![](@program/dev/image/canvas/stroke-rect.png) */ + setStrokeStyle( + /** 描边的颜色,默认颜色为 black。 */ + color: string | CanvasGradient + ): void + /** [CanvasContext.setTextAlign(string align)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.setTextAlign.html) +* +* 需要基础库: `1.1.0` +* +* 在插件中使用:支持 +* @deprecated 基础库版本 [2.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) 替换 +* +* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** +* +* 设置文字的对齐 +* +* **示例代码** +* +* ```javascript +const ctx = wx.createCanvasContext('myCanvas') + +ctx.setStrokeStyle('red') +ctx.moveTo(150, 20) +ctx.lineTo(150, 170) +ctx.stroke() + +ctx.setFontSize(15) +ctx.setTextAlign('left') +ctx.fillText('textAlign=left', 150, 60) + +ctx.setTextAlign('center') +ctx.fillText('textAlign=center', 150, 80) + +ctx.setTextAlign('right') +ctx.fillText('textAlign=right', 150, 100) + +ctx.draw() +``` +* +* ![](@program/dev/image/canvas/set-text-align.png) */ + setTextAlign( + /** 文字的对齐方式 + * + * 参数 align 可选值: + * - 'left': 左对齐; + * - 'center': 居中对齐; + * - 'right': 右对齐; */ + align: 'left' | 'center' | 'right' + ): void + /** [CanvasContext.setTextBaseline(string textBaseline)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.setTextBaseline.html) +* +* 需要基础库: `1.4.0` +* +* 在插件中使用:支持 +* @deprecated 基础库版本 [2.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) 替换 +* +* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** +* +* 设置文字的竖直对齐 +* +* **示例代码** +* +* ```javascript +const ctx = wx.createCanvasContext('myCanvas') + +ctx.setStrokeStyle('red') +ctx.moveTo(5, 75) +ctx.lineTo(295, 75) +ctx.stroke() + +ctx.setFontSize(20) + +ctx.setTextBaseline('top') +ctx.fillText('top', 5, 75) + +ctx.setTextBaseline('middle') +ctx.fillText('middle', 50, 75) + +ctx.setTextBaseline('bottom') +ctx.fillText('bottom', 120, 75) + +ctx.setTextBaseline('normal') +ctx.fillText('normal', 200, 75) + +ctx.draw() +``` +* ![](@program/dev/image/canvas/set-text-baseline.png) */ + setTextBaseline( + /** 文字的竖直对齐方式 + * + * 参数 textBaseline 可选值: + * - 'top': 顶部对齐; + * - 'bottom': 底部对齐; + * - 'middle': 居中对齐; + * - 'normal': ; */ + textBaseline: 'top' | 'bottom' | 'middle' | 'normal' + ): void + /** [CanvasContext.setTransform(number scaleX, number skewX, number skewY, number scaleY, number translateX, number translateY)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.setTransform.html) + * + * 需要基础库: `1.9.90` + * + * 在插件中使用:支持 + * @deprecated 基础库版本 [2.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) 替换 + * + * @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** + * + * 使用矩阵重新设置(覆盖)当前变换的方法 */ + setTransform( + /** 水平缩放 */ + scaleX: number, + /** 水平倾斜 */ + skewX: number, + /** 垂直倾斜 */ + skewY: number, + /** 垂直缩放 */ + scaleY: number, + /** 水平移动 */ + translateX: number, + /** 垂直移动 */ + translateY: number + ): void + /** [CanvasContext.stroke()](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.stroke.html) +* +* 在插件中使用:支持 +* @deprecated 基础库版本 [2.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) 替换 +* +* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** +* +* 画出当前路径的边框。默认颜色色为黑色。 +* +* **示例代码** +* +* ```javascript +const ctx = wx.createCanvasContext('myCanvas') +ctx.moveTo(10, 10) +ctx.lineTo(100, 10) +ctx.lineTo(100, 100) +ctx.stroke() +ctx.draw() +``` +* ![](@program/dev/image/canvas/stroke-line.png) +* +* stroke() 描绘的的路径是从 beginPath() 开始计算,但是不会将 strokeRect() 包含进去。 +* +* ```javascript +const ctx = wx.createCanvasContext('myCanvas') +// begin path +ctx.rect(10, 10, 100, 30) +ctx.setStrokeStyle('yellow') +ctx.stroke() + +// begin another path +ctx.beginPath() +ctx.rect(10, 40, 100, 30) + +// only stoke this rect, not in current path +ctx.setStrokeStyle('blue') +ctx.strokeRect(10, 70, 100, 30) + +ctx.rect(10, 100, 100, 30) + +// it will stroke current path +ctx.setStrokeStyle('red') +ctx.stroke() +ctx.draw() +``` +* +* ![](@program/dev/image/canvas/stroke-path.png) */ + stroke(): void + /** [CanvasContext.strokeRect(number x, number y, number width, number height)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.strokeRect.html) +* +* 在插件中使用:支持 +* @deprecated 基础库版本 [2.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) 替换 +* +* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** +* +* 画一个矩形(非填充)。 用 [`setStrokeStyle`](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.setStrokeStyle.html) 设置矩形线条的颜色,如果没设置默认是黑色。 +* +* **示例代码** +* +* ```javascript +const ctx = wx.createCanvasContext('myCanvas') +ctx.setStrokeStyle('red') +ctx.strokeRect(10, 10, 150, 75) +ctx.draw() +``` +* ![](@program/dev/image/canvas/stroke-rect.png) */ + strokeRect( + /** 矩形路径左上角的横坐标 */ + x: number, + /** 矩形路径左上角的纵坐标 */ + y: number, + /** 矩形路径的宽度 */ + width: number, + /** 矩形路径的高度 */ + height: number + ): void + /** [CanvasContext.strokeText(string text, number x, number y, number maxWidth)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.strokeText.html) + * + * 需要基础库: `1.9.90` + * + * 在插件中使用:支持 + * @deprecated 基础库版本 [2.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) 替换 + * + * @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** + * + * 给定的 (x, y) 位置绘制文本描边的方法 */ + strokeText( + /** 要绘制的文本 */ + text: string, + /** 文本起始点的 x 轴坐标 */ + x: number, + /** 文本起始点的 y 轴坐标 */ + y: number, + /** 需要绘制的最大宽度,可选 */ + maxWidth?: number + ): void + /** [CanvasContext.transform(number scaleX, number skewX, number skewY, number scaleY, number translateX, number translateY)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.transform.html) + * + * 需要基础库: `1.9.90` + * + * 在插件中使用:支持 + * @deprecated 基础库版本 [2.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) 替换 + * + * @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** + * + * 使用矩阵多次叠加当前变换的方法 */ + transform( + /** 水平缩放 */ + scaleX: number, + /** 水平倾斜 */ + skewX: number, + /** 垂直倾斜 */ + skewY: number, + /** 垂直缩放 */ + scaleY: number, + /** 水平移动 */ + translateX: number, + /** 垂直移动 */ + translateY: number + ): void + /** [CanvasContext.translate(number x, number y)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.translate.html) +* +* 在插件中使用:支持 +* @deprecated 基础库版本 [2.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) 替换 +* +* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** +* +* 对当前坐标系的原点 (0, 0) 进行变换。默认的坐标系原点为页面左上角。 +* +* **示例代码** +* +* ```javascript +const ctx = wx.createCanvasContext('myCanvas') + +ctx.strokeRect(10, 10, 150, 100) +ctx.translate(20, 20) +ctx.strokeRect(10, 10, 150, 100) +ctx.translate(20, 20) +ctx.strokeRect(10, 10, 150, 100) + +ctx.draw() +``` +* +* ![](@program/dev/image/canvas/translate.png) */ + translate( + /** 水平坐标平移量 */ + x: number, + /** 竖直坐标平移量 */ + y: number + ): void + /** [Object CanvasContext.measureText(string text)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.measureText.html) + * + * 需要基础库: `1.9.90` + * + * 在插件中使用:支持 + * @deprecated 基础库版本 [2.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) 替换 + * + * @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** + * + * 测量文本尺寸信息。目前仅返回文本宽度。同步接口。 */ + measureText( + /** 要测量的文本 */ + text: string + ): TextMetrics + /** [[CanvasGradient](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasGradient.html) CanvasContext.createCircularGradient(number x, number y, number r)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.createCircularGradient.html) +* +* 在插件中使用:支持 +* @deprecated 基础库版本 [2.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) 替换 +* +* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** +* +* 创建一个圆形的渐变颜色。起点在圆心,终点在圆环。返回的`CanvasGradient`对象需要使用 [CanvasGradient.addColorStop()](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasGradient.addColorStop.html) 来指定渐变点,至少要两个。 +* +* **示例代码** +* +* ```javascript +const ctx = wx.createCanvasContext('myCanvas') + +// Create circular gradient +const grd = ctx.createCircularGradient(75, 50, 50) +grd.addColorStop(0, 'red') +grd.addColorStop(1, 'white') + +// Fill with gradient +ctx.setFillStyle(grd) +ctx.fillRect(10, 10, 150, 80) +ctx.draw() +``` +* ![](@program/dev/image/canvas/circular-gradient.png) */ + createCircularGradient( + /** 圆心的 x 坐标 */ + x: number, + /** 圆心的 y 坐标 */ + y: number, + /** 圆的半径 */ + r: number + ): CanvasGradient + /** [[CanvasGradient](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasGradient.html) CanvasContext.createLinearGradient(number x0, number y0, number x1, number y1)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.createLinearGradient.html) +* +* 在插件中使用:支持 +* @deprecated 基础库版本 [2.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) 替换 +* +* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** +* +* 创建一个线性的渐变颜色。返回的`CanvasGradient`对象需要使用 [CanvasGradient.addColorStop()](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasGradient.addColorStop.html) 来指定渐变点,至少要两个。 +* +* **示例代码** +* +* ```javascript +const ctx = wx.createCanvasContext('myCanvas') + +// Create linear gradient +const grd = ctx.createLinearGradient(0, 0, 200, 0) +grd.addColorStop(0, 'red') +grd.addColorStop(1, 'white') + +// Fill with gradient +ctx.setFillStyle(grd) +ctx.fillRect(10, 10, 150, 80) +ctx.draw() +``` +* ![](@program/dev/image/canvas/linear-gradient.png) */ + createLinearGradient( + /** 起点的 x 坐标 */ + x0: number, + /** 起点的 y 坐标 */ + y0: number, + /** 终点的 x 坐标 */ + x1: number, + /** 终点的 y 坐标 */ + y1: number + ): CanvasGradient + } + interface CanvasGradient { + /** [CanvasGradient.addColorStop(number stop, string color)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasGradient.addColorStop.html) +* +* 在插件中使用:不支持 +* @deprecated 基础库版本 [2.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) 替换 +* +* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** +* +* 添加颜色的渐变点。小于最小 stop 的部分会按最小 stop 的 color 来渲染,大于最大 stop 的部分会按最大 stop 的 color 来渲染 +* +* **示例代码** +* +* ```js +const ctx = wx.createCanvasContext('myCanvas') + +// Create circular gradient +const grd = ctx.createLinearGradient(30, 10, 120, 10) +grd.addColorStop(0, 'red') +grd.addColorStop(0.16, 'orange') +grd.addColorStop(0.33, 'yellow') +grd.addColorStop(0.5, 'green') +grd.addColorStop(0.66, 'cyan') +grd.addColorStop(0.83, 'blue') +grd.addColorStop(1, 'purple') + +// Fill with gradient +ctx.setFillStyle(grd) +ctx.fillRect(10, 10, 150, 80) +ctx.draw() +``` +* ![](@program/dev/image/canvas/color-stop.png) */ + addColorStop( + /** 表示渐变中开始与结束之间的位置,范围 0-1。 */ + stop: number, + /** 渐变点的颜色。 */ + color: string + ): void + } + interface CloseSyncError { + /** 错误信息 + * + * | 错误信息 | 说明 | + * | - | - | + * | bad file descriptor | 无效的文件描述符 | */ errMsg: string + /** 错误码 + * + * | 错误信息 | 说明 | + * | - | - | + * | bad file descriptor | 无效的文件描述符 | */ errCode: number + } + interface Console { + /** [console.debug()](https://developers.weixin.qq.com/miniprogram/dev/api/base/debug/console.debug.html) + * + * 在插件中使用:不支持 + * + * 向调试面板中打印 debug 日志 */ + debug( + /** 日志内容,可以有任意多个。 */ + ...args: any[] + ): void + /** [console.error()](https://developers.weixin.qq.com/miniprogram/dev/api/base/debug/console.error.html) + * + * 在插件中使用:不支持 + * + * 向调试面板中打印 error 日志 */ + error( + /** 日志内容,可以有任意多个。 */ + ...args: any[] + ): void + /** [console.group(string label)](https://developers.weixin.qq.com/miniprogram/dev/api/base/debug/console.group.html) + * + * 在插件中使用:不支持 + * + * 在调试面板中创建一个新的分组。随后输出的内容都会被添加一个缩进,表示该内容属于当前分组。调用 [console.groupEnd](https://developers.weixin.qq.com/miniprogram/dev/api/base/debug/console.groupEnd.html)之后分组结束。 + * + * **注意** + * + * 仅在工具中有效,在 vConsole 中为空函数实现。 */ + group( + /** 分组标记,可选。 */ + label?: string + ): void + /** [console.groupEnd()](https://developers.weixin.qq.com/miniprogram/dev/api/base/debug/console.groupEnd.html) + * + * 在插件中使用:不支持 + * + * 结束由 [console.group](https://developers.weixin.qq.com/miniprogram/dev/api/base/debug/console.group.html) 创建的分组 + * + * **注意** + * + * 仅在工具中有效,在 vConsole 中为空函数实现。 */ + groupEnd(): void + /** [console.info()](https://developers.weixin.qq.com/miniprogram/dev/api/base/debug/console.info.html) + * + * 在插件中使用:不支持 + * + * 向调试面板中打印 info 日志 */ + info( + /** 日志内容,可以有任意多个。 */ + ...args: any[] + ): void + /** [console.log()](https://developers.weixin.qq.com/miniprogram/dev/api/base/debug/console.log.html) + * + * 在插件中使用:不支持 + * + * 向调试面板中打印 log 日志 */ + log( + /** 日志内容,可以有任意多个。 */ + ...args: any[] + ): void + /** [console.warn()](https://developers.weixin.qq.com/miniprogram/dev/api/base/debug/console.warn.html) + * + * 在插件中使用:不支持 + * + * 向调试面板中打印 warn 日志 */ + warn( + /** 日志内容,可以有任意多个。 */ + ...args: any[] + ): void + } + interface DownloadTask { + /** [DownloadTask.abort()](https://developers.weixin.qq.com/miniprogram/dev/api/network/download/DownloadTask.abort.html) + * + * 需要基础库: `1.4.0` + * + * 在插件中使用:支持 + * + * 中断下载任务 */ + abort(): void + /** [DownloadTask.offHeadersReceived(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/download/DownloadTask.offHeadersReceived.html) +* +* 需要基础库: `2.1.0` +* +* 在插件中使用:支持 +* +* 移除 HTTP Response Header 事件的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +DownloadTask.onHeadersReceived(listener) +DownloadTask.offHeadersReceived(listener) // 需传入与监听时同一个的函数对象 +``` */ + offHeadersReceived( + /** onHeadersReceived 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: OffHeadersReceivedCallback + ): void + /** [DownloadTask.offProgressUpdate(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/download/DownloadTask.offProgressUpdate.html) +* +* 需要基础库: `2.1.0` +* +* 在插件中使用:支持 +* +* 移除下载进度变化事件的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +DownloadTask.onProgressUpdate(listener) +DownloadTask.offProgressUpdate(listener) // 需传入与监听时同一个的函数对象 +``` */ + offProgressUpdate( + /** onProgressUpdate 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: DownloadTaskOffProgressUpdateCallback + ): void + /** [DownloadTask.onHeadersReceived(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/download/DownloadTask.onHeadersReceived.html) + * + * 需要基础库: `2.1.0` + * + * 在插件中使用:支持 + * + * 监听 HTTP Response Header 事件。会比请求完成事件更早 */ + onHeadersReceived( + /** HTTP Response Header 事件的监听函数 */ + listener: OnHeadersReceivedCallback + ): void + /** [DownloadTask.onProgressUpdate(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/download/DownloadTask.onProgressUpdate.html) + * + * 需要基础库: `1.4.0` + * + * 在插件中使用:支持 + * + * 监听下载进度变化事件 */ + onProgressUpdate( + /** 下载进度变化事件的监听函数 */ + listener: DownloadTaskOnProgressUpdateCallback + ): void + } + interface EditorContext { + /** [EditorContext.blur(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/editor/EditorContext.blur.html) + * + * 需要基础库: `2.8.3` + * + * 在插件中使用:支持 + * + * 编辑器失焦,同时收起键盘。 */ + blur(option?: BlurOption): void + /** [EditorContext.clear(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/editor/EditorContext.clear.html) + * + * 需要基础库: `2.7.0` + * + * 在插件中使用:支持 + * + * 清空编辑器内容 */ + clear(option?: ClearOption): void + /** [EditorContext.format(string name, string value)](https://developers.weixin.qq.com/miniprogram/dev/api/media/editor/EditorContext.format.html) + * + * 需要基础库: `2.7.0` + * + * 在插件中使用:支持 + * + * 修改样式 + * + * **** + * + * ## 支持设置的样式列表 + * | name | value | verson | + * | --------------------------------------------------------- | ------------------------------- | ------ | + * | bold | | 2.7.0 | + * | italic | | 2.7.0 | + * | underline | | 2.7.0 | + * | strike | | 2.7.0 | + * | ins | | 2.7.0 | + * | script | sub / super | 2.7.0 | + * | header | H1 / H2 / h3 / H4 / h5 / H6 | 2.7.0 | + * | align | left / center / right / justify | 2.7.0 | + * | direction | rtl | 2.7.0 | + * | indent | -1 / +1 | 2.7.0 | + * | list | ordered / bullet / check | 2.7.0 | + * | color | hex color | 2.7.0 | + * | backgroundColor | hex color | 2.7.0 | + * | margin/marginTop/marginBottom/marginLeft/marginRight | css style | 2.7.0 | + * | padding/paddingTop/paddingBottom/paddingLeft/paddingRight | css style | 2.7.0 | + * | font/fontSize/fontStyle/fontVariant/fontWeight/fontFamily | css style | 2.7.0 | + * | lineHeight | css style | 2.7.0 | + * | letterSpacing | css style | 2.7.0 | + * | textDecoration | css style | 2.7.0 | + * | textIndent | css style | 2.8.0 | + * | wordWrap | css style | 2.10.2 | + * | wordBreak | css style | 2.10.2 | + * | whiteSpace | css style | 2.10.2 | + * + * 对已经应用样式的选区设置会取消样式。css style 表示 css 中规定的允许值。 */ + format( + /** 属性 */ + name: string, + /** 值 */ + value?: string + ): void + /** [EditorContext.getContents(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/editor/EditorContext.getContents.html) + * + * 需要基础库: `2.7.0` + * + * 在插件中使用:支持 + * + * 获取编辑器内容 */ + getContents(option?: GetContentsOption): void + /** [EditorContext.getSelectionText(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/editor/EditorContext.getSelectionText.html) + * + * 需要基础库: `2.10.2` + * + * 在插件中使用:支持 + * + * 获取编辑器已选区域内的纯文本内容。当编辑器失焦或未选中一段区间时,返回内容为空。 */ + getSelectionText(option?: GetSelectionTextOption): void + /** [EditorContext.insertDivider(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/editor/EditorContext.insertDivider.html) + * + * 需要基础库: `2.7.0` + * + * 在插件中使用:支持 + * + * 插入分割线 */ + insertDivider(option?: InsertDividerOption): void + /** [EditorContext.insertImage(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/editor/EditorContext.insertImage.html) +* +* 需要基础库: `2.7.0` +* +* 在插件中使用:支持 +* +* 插入图片。 +* +* 地址为临时文件时,获取的编辑器html格式内容中 标签增加属性 data-local,delta 格式内容中图片 attributes 属性增加 data-local 字段,该值为传入的临时文件地址。 +* +* 开发者可选择在提交阶段上传图片到服务器,获取到网络地址后进行替换。替换时对于html内容应替换掉 的 src 值,对于 delta 内容应替换掉 `insert { image: abc }` 值。 +* +* **示例代码** +* +* ```javascript +this.editorCtx.insertImage({ + src: 'xx', + width: '100px', + height: '50px', + extClass: className +}) +``` */ + insertImage(option: InsertImageOption): void + /** [EditorContext.insertText(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/editor/EditorContext.insertText.html) + * + * 需要基础库: `2.7.0` + * + * 在插件中使用:支持 + * + * 覆盖当前选区,设置一段文本 */ + insertText(option: InsertTextOption): void + /** [EditorContext.redo(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/editor/EditorContext.redo.html) + * + * 需要基础库: `2.7.0` + * + * 在插件中使用:支持 + * + * 恢复 */ + redo(option?: RedoOption): void + /** [EditorContext.removeFormat(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/editor/EditorContext.removeFormat.html) + * + * 需要基础库: `2.7.0` + * + * 在插件中使用:支持 + * + * 清除当前选区的样式 */ + removeFormat(option?: RemoveFormatOption): void + /** [EditorContext.scrollIntoView()](https://developers.weixin.qq.com/miniprogram/dev/api/media/editor/EditorContext.scrollIntoView.html) + * + * 需要基础库: `2.8.3` + * + * 在插件中使用:支持 + * + * 使得编辑器光标处滚动到窗口可视区域内。 */ + scrollIntoView(): void + /** [EditorContext.setContents(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/editor/EditorContext.setContents.html) + * + * 需要基础库: `2.7.0` + * + * 在插件中使用:支持 + * + * 初始化编辑器内容,html和delta同时存在时仅delta生效 */ + setContents(option: SetContentsOption): void + /** [EditorContext.undo(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/editor/EditorContext.undo.html) + * + * 需要基础库: `2.7.0` + * + * 在插件中使用:支持 + * + * 撤销 */ + undo(option?: UndoOption): void + } + interface EntryList { + /** [Array.<[PerformanceEntry](https://developers.weixin.qq.com/miniprogram/dev/api/base/performance/PerformanceEntry.html)> EntryList.getEntries()](https://developers.weixin.qq.com/miniprogram/dev/api/base/performance/EntryList.getEntries.html) + * + * 需要基础库: `2.11.0` + * + * 在插件中使用:不支持 + * + * 该方法返回当前列表中的所有性能数据 */ + getEntries(): PerformanceEntry[] + /** [Array.<[PerformanceEntry](https://developers.weixin.qq.com/miniprogram/dev/api/base/performance/PerformanceEntry.html)> EntryList.getEntriesByName(string name, string entryType)](https://developers.weixin.qq.com/miniprogram/dev/api/base/performance/EntryList.getEntriesByName.html) + * + * 需要基础库: `2.11.0` + * + * 在插件中使用:不支持 + * + * 获取当前列表中所有名称为 [name] 且类型为 [entryType] 的性能数据 */ + getEntriesByName( + name: string, + entryType?: string + ): PerformanceEntry[] + /** [Array.<[PerformanceEntry](https://developers.weixin.qq.com/miniprogram/dev/api/base/performance/PerformanceEntry.html)> EntryList.getEntriesByType(string entryType)](https://developers.weixin.qq.com/miniprogram/dev/api/base/performance/EntryList.getEntriesByType.html) + * + * 需要基础库: `2.11.0` + * + * 在插件中使用:不支持 + * + * 获取当前列表中所有类型为 [entryType] 的性能数据 */ + getEntriesByType(entryType: string): PerformanceEntry[] + } + interface EventChannel { + /** [EventChannel.emit(string eventName, any args)](https://developers.weixin.qq.com/miniprogram/dev/api/route/EventChannel.emit.html) + * + * 需要基础库: `2.7.3` + * + * 在插件中使用:支持 + * + * 触发一个事件 */ + emit( + /** 事件名称 */ + eventName: string, + /** 事件参数 */ + ...args: any + ): void + /** [EventChannel.off(string eventName, function fn)](https://developers.weixin.qq.com/miniprogram/dev/api/route/EventChannel.off.html) + * + * 需要基础库: `2.7.3` + * + * 在插件中使用:支持 + * + * 取消监听一个事件。给出第二个参数时,只取消给出的监听函数,否则取消所有监听函数 */ + off( + /** 事件名称 */ + eventName: string, + /** 事件监听函数 */ + fn: EventCallback + ): void + /** [EventChannel.on(string eventName, function fn)](https://developers.weixin.qq.com/miniprogram/dev/api/route/EventChannel.on.html) + * + * 需要基础库: `2.7.3` + * + * 在插件中使用:支持 + * + * 持续监听一个事件 */ + on( + /** 事件名称 */ + eventName: string, + /** 事件监听函数 */ + fn: EventCallback + ): void + /** [EventChannel.once(string eventName, function fn)](https://developers.weixin.qq.com/miniprogram/dev/api/route/EventChannel.once.html) + * + * 需要基础库: `2.7.3` + * + * 在插件中使用:支持 + * + * 监听一个事件一次,触发后失效 */ + once( + /** 事件名称 */ + eventName: string, + /** 事件监听函数 */ + fn: EventCallback + ): void + } + interface FileSystemManager { + /** [Array.<string> FileSystemManager.readdirSync(string dirPath)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.readdirSync.html) +* +* 在插件中使用:需要基础库 `2.19.2` +* +* [FileSystemManager.readdir](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.readdir.html) 的同步版本 +* +* **注意事项 +* - readdir接口无法访问文件系统根路径(wxfile://)。 +* 示例代码** +* +* ```js +const fs = wx.getFileSystemManager() +fs.readdir({ + dirPath: `${wx.env.USER_DATA_PATH}/example`, + success(res) { + console.log(res.files) + }, + fail(res) { + console.error(res) + } +}) + +// 同步接口 +try { + const res = fs.readdirSync(`${wx.env.USER_DATA_PATH}/example`) + console.log(res) +} catch(e) { + console.error(e) +} +``` */ + readdirSync( + /** 要读取的目录路径 (本地路径) */ + dirPath: string + ): string[] + /** [ArrayBuffer FileSystemManager.readCompressedFileSync(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.readCompressedFileSync.html) +* +* 需要基础库: `2.21.1` +* +* 在插件中使用:不支持 +* +* 同步读取指定压缩类型的本地文件内容 +* +* **示例代码** +* +* ```js +const fs = wx.getFileSystemManager() + +// 异步接口 +fs.readCompressedFile({ + filePath: '${wx.env.USER_DATA_PATH}/hello.br', + compressionAlgorithm: 'br', + success(res) { + console.log(res.data) + }, + fail(res) { + console.log('readCompressedFile fail', res) + } +}) + +// 同步接口 +try { + const data = fs.readCompressedFileSync({ + filePath: '${wx.env.USER_DATA_PATH}/hello.br', + compressionAlgorithm: 'br', + }) + console.log(data) +} catch (err) { + console.log(err) +} +``` */ + readCompressedFileSync( + option: ReadCompressedFileSyncOption + ): ArrayBuffer + /** [FileSystemManager.access(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.access.html) +* +* 在插件中使用:需要基础库 `2.19.2` +* +* 判断文件/目录是否存在 +* +* **示例代码** +* +* ```js +const fs = wx.getFileSystemManager() +// 判断文件/目录是否存在 +fs.access({ + path: `${wx.env.USER_DATA_PATH}/hello.txt`, + success(res) { + // 文件存在 + console.log(res) + }, + fail(res) { + // 文件不存在或其他错误 + console.error(res) + } +}) + +// 同步接口 +try { + fs.accessSync(`${wx.env.USER_DATA_PATH}/hello.txt`) +} catch(e) { + console.error(e) +} +``` */ + access(option: AccessOption): void + /** [FileSystemManager.accessSync(string path)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.accessSync.html) +* +* 在插件中使用:需要基础库 `2.19.2` +* +* [FileSystemManager.access](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.access.html) 的同步版本 +* +* **示例代码** +* +* ```js +const fs = wx.getFileSystemManager() +// 判断文件/目录是否存在 +fs.access({ + path: `${wx.env.USER_DATA_PATH}/hello.txt`, + success(res) { + // 文件存在 + console.log(res) + }, + fail(res) { + // 文件不存在或其他错误 + console.error(res) + } +}) + +// 同步接口 +try { + fs.accessSync(`${wx.env.USER_DATA_PATH}/hello.txt`) +} catch(e) { + console.error(e) +} +``` */ + accessSync( + /** 要判断是否存在的文件/目录路径 (本地路径) */ + path: string + ): void + /** [FileSystemManager.appendFile(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.appendFile.html) +* +* 需要基础库: `2.1.0` +* +* 在插件中使用:需要基础库 `2.19.2` +* +* 在文件结尾追加内容 +* +* **示例代码** +* +* ```js +const fs = wx.getFileSystemManager() + +fs.appendFile({ + filePath: `${wx.env.USER_DATA_PATH}/hello.txt`, + data: 'some text', + encoding: 'utf8', + success(res) { + console.log(res) + }, + fail(res) { + console.error(res) + } +}) + +// 同步接口 +try { + fs.appendFileSync(`${wx.env.USER_DATA_PATH}/hello.txt`, 'some text', 'utf8') +} catch(e) { + console.error(e) +} +``` */ + appendFile(option: AppendFileOption): void + /** [FileSystemManager.appendFileSync(string filePath, string|ArrayBuffer data, string encoding)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.appendFileSync.html) +* +* 需要基础库: `2.1.0` +* +* 在插件中使用:需要基础库 `2.19.2` +* +* [FileSystemManager.appendFile](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.appendFile.html) 的同步版本 +* +* **示例代码** +* +* ```js +const fs = wx.getFileSystemManager() + +fs.appendFile({ + filePath: `${wx.env.USER_DATA_PATH}/hello.txt`, + data: 'some text', + encoding: 'utf8', + success(res) { + console.log(res) + }, + fail(res) { + console.error(res) + } +}) + +// 同步接口 +try { + fs.appendFileSync(`${wx.env.USER_DATA_PATH}/hello.txt`, 'some text', 'utf8') +} catch(e) { + console.error(e) +} +``` */ + appendFileSync( + /** 要追加内容的文件路径 (本地路径) */ + filePath: string, + /** 要追加的文本或二进制数据 */ + data: string | ArrayBuffer, + /** 指定写入文件的字符编码 + * + * 参数 encoding 可选值: + * - 'ascii': ; + * - 'base64': ; + * - 'binary': ; + * - 'hex': ; + * - 'ucs2': 以小端序读取; + * - 'ucs-2': 以小端序读取; + * - 'utf16le': 以小端序读取; + * - 'utf-16le': 以小端序读取; + * - 'utf-8': ; + * - 'utf8': ; + * - 'latin1': ; */ + encoding?: + | 'ascii' + | 'base64' + | 'binary' + | 'hex' + | 'ucs2' + | 'ucs-2' + | 'utf16le' + | 'utf-16le' + | 'utf-8' + | 'utf8' + | 'latin1' + ): void + /** [FileSystemManager.close(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.close.html) +* +* 需要基础库: `2.16.1` +* +* 在插件中使用:需要基础库 `2.19.2` +* +* 关闭文件 +* +* **示例代码** +* +* ```js +const fs = wx.getFileSystemManager() +// 打开文件 +fs.open({ + filePath: `${wx.env.USER_DATA_PATH}/hello.txt`, + flag: 'a+', + success(res) { + // 关闭文件 + fs.close({ + fd: res.fd + }) + } +}) +``` */ + close(option: FileSystemManagerCloseOption): void + /** [FileSystemManager.copyFile(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.copyFile.html) +* +* 在插件中使用:需要基础库 `2.19.2` +* +* 复制文件 +* +* **示例代码** +* +* ```js +const fs = wx.getFileSystemManager() +fs.copyFile({ + srcPath: `${wx.env.USER_DATA_PATH}/hello.txt`, + destPath: `${wx.env.USER_DATA_PATH}/hello_copy.txt` + success(res) { + console.log(res) + }, + fail(res) { + console.error(res) + } +}) + +// 同步接口 +try { + fs.copyFileSync( + `${wx.env.USER_DATA_PATH}/hello.txt`, + `${wx.env.USER_DATA_PATH}/hello_copy.txt` + ) +} catch(e) { + console.error(e) +} +``` */ + copyFile(option: CopyFileOption): void + /** [FileSystemManager.copyFileSync(string srcPath, string destPath)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.copyFileSync.html) +* +* 在插件中使用:需要基础库 `2.19.2` +* +* [FileSystemManager.copyFile](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.copyFile.html) 的同步版本 +* +* **示例代码** +* +* ```js +const fs = wx.getFileSystemManager() +fs.copyFile({ + srcPath: `${wx.env.USER_DATA_PATH}/hello.txt`, + destPath: `${wx.env.USER_DATA_PATH}/hello_copy.txt` + success(res) { + console.log(res) + }, + fail(res) { + console.error(res) + } +}) + +// 同步接口 +try { + fs.copyFileSync( + `${wx.env.USER_DATA_PATH}/hello.txt`, + `${wx.env.USER_DATA_PATH}/hello_copy.txt` + ) +} catch(e) { + console.error(e) +} +``` */ + copyFileSync( + /** 源文件路径,支持本地路径 */ + srcPath: string, + /** 目标文件路径,支持本地路径 */ + destPath: string + ): void + /** [FileSystemManager.fstat(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.fstat.html) +* +* 需要基础库: `2.16.1` +* +* 在插件中使用:需要基础库 `2.19.2` +* +* 获取文件的状态信息 +* +* **示例代码** +* +* ```js +const fs = wx.getFileSystemManager() +// 打开文件 +fs.open({ + filePath: `${wx.env.USER_DATA_PATH}/hello.txt`, + flag: 'a+', + success(res) { + // 获取文件的状态信息 + fs.fstat({ + fd: res.fd, + success(res) { + console.log(res.stats) + } + }) + } +}) +``` */ + fstat(option: FstatOption): void + /** [FileSystemManager.ftruncate(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.ftruncate.html) +* +* 需要基础库: `2.16.1` +* +* 在插件中使用:需要基础库 `2.19.2` +* +* 对文件内容进行截断操作 +* +* **示例代码** +* +* ```js +const fs = wx.getFileSystemManager() +// 打开文件 +fs.open({ + filePath: `${wx.env.USER_DATA_PATH}/hello.txt`, + flag: 'a+', + success(res) { + // 对文件内容进行截断操作 + fs.ftruncate({ + fd: res.fd, + length: 10, // 从第10个字节开始截断文件 + success(res) { + console.log(res) + } + }) + } +}) +``` */ + ftruncate(option: FtruncateOption): void + /** [FileSystemManager.getFileInfo(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.getFileInfo.html) + * + * 在插件中使用:不支持 + * + * 获取该小程序下的 本地临时文件 或 本地缓存文件 信息 */ + getFileInfo(option: FileSystemManagerGetFileInfoOption): void + /** [FileSystemManager.getSavedFileList(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.getSavedFileList.html) + * + * 在插件中使用:不支持 + * + * 获取该小程序下已保存的本地缓存文件列表 */ + getSavedFileList(option?: FileSystemManagerGetSavedFileListOption): void + /** [FileSystemManager.mkdir(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.mkdir.html) +* +* 在插件中使用:需要基础库 `2.19.2` +* +* 创建目录 +* +* **示例代码** +* +* ```js +const fs = wx.getFileSystemManager() +fs.mkdir({ + dirPath: `${wx.env.USER_DATA_PATH}/example`, + recursive: false + success(res) { + console.log(res) + }, + fail(res) { + console.error(res) + } +}) + +// 同步接口 +try { + fs.mkdirSync(`${wx.env.USER_DATA_PATH}/example`, false) +} catch(e) { + console.error(e) +} +``` */ + mkdir(option: MkdirOption): void + /** [FileSystemManager.mkdirSync(string dirPath, boolean recursive)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.mkdirSync.html) +* +* 在插件中使用:需要基础库 `2.19.2` +* +* [FileSystemManager.mkdir](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.mkdir.html) 的同步版本 +* +* **示例代码** +* +* ```js +const fs = wx.getFileSystemManager() +fs.mkdir({ + dirPath: `${wx.env.USER_DATA_PATH}/example`, + recursive: false + success(res) { + console.log(res) + }, + fail(res) { + console.error(res) + } +}) + +// 同步接口 +try { + fs.mkdirSync(`${wx.env.USER_DATA_PATH}/example`, false) +} catch(e) { + console.error(e) +} +``` */ + mkdirSync( + /** 创建的目录路径 (本地路径) */ + dirPath: string, + /** 需要基础库: `2.3.0` + * + * 是否在递归创建该目录的上级目录后再创建该目录。如果对应的上级目录已经存在,则不创建该上级目录。如 dirPath 为 a/b/c/d 且 recursive 为 true,将创建 a 目录,再在 a 目录下创建 b 目录,以此类推直至创建 a/b/c 目录下的 d 目录。 */ + recursive?: boolean + ): void + /** [FileSystemManager.open(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.open.html) +* +* 需要基础库: `2.16.1` +* +* 在插件中使用:需要基础库 `2.19.2` +* +* 打开文件,返回文件描述符 +* +* **示例代码** +* +* ```js +const fs = wx.getFileSystemManager() +fs.open({ + filePath: `${wx.env.USER_DATA_PATH}/hello.txt`, + flag: 'a+', + success(res) { + console.log(res.fd) + } +}) +``` */ + open(option: OpenOption): void + /** [FileSystemManager.read(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.read.html) +* +* 需要基础库: `2.16.1` +* +* 在插件中使用:需要基础库 `2.19.2` +* +* 读文件 +* +* **示例代码** +* +* ```js +const fs = wx.getFileSystemManager() +const ab = new ArrayBuffer(1024) +// 打开文件 +fs.open({ + filePath: `${wx.env.USER_DATA_PATH}/hello.txt`, + flag: 'a+', + success(res) { + // 读取文件到 ArrayBuffer 中 + fs.read({ + fd: res.fd, + arrayBuffer: ab, + length: 10, + success(res) { + console.log(res) + } + }) + } +}) +``` */ + read(option: ReadOption): void + /** [FileSystemManager.readCompressedFile(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.readCompressedFile.html) +* +* 需要基础库: `2.21.1` +* +* 在插件中使用:不支持 +* +* 读取指定压缩类型的本地文件内容 +* +* **示例代码** +* +* ```js +const fs = wx.getFileSystemManager() + +// 异步接口 +fs.readCompressedFile({ + filePath: '${wx.env.USER_DATA_PATH}/hello.br', + compressionAlgorithm: 'br', + success(res) { + console.log(res.data) + }, + fail(res) { + console.log('readCompressedFile fail', res) + } +}) + +// 同步接口 +const data = fs.readCompressedFileSync({ + filePath: '${wx.env.USER_DATA_PATH}/hello.br', + compressionAlgorithm: 'br', +}) +console.log(data) +``` */ + readCompressedFile(option: ReadCompressedFileOption): void + /** [FileSystemManager.readFile(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.readFile.html) +* +* 在插件中使用:需要基础库 `2.19.2` +* +* 读取本地文件内容。单个文件大小上限为100M。 +* +* **示例代码** +* +* ```js +const fs = wx.getFileSystemManager() +fs.readFile({ + filePath: `${wx.env.USER_DATA_PATH}/hello.txt`, + encoding: 'utf8', + position: 0, + success(res) { + console.log(res.data) + }, + fail(res) { + console.error(res) + } +}) + +// 同步接口 +try { + const res = fs.readFileSync(`${wx.env.USER_DATA_PATH}/hello.txt`, 'utf8', 0) + console.log(res) +} catch(e) { + console.error(e) +} +``` */ + readFile(option: ReadFileOption): void + /** [FileSystemManager.readZipEntry(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.readZipEntry.html) +* +* 需要基础库: `2.17.3` +* +* 在插件中使用:需要基础库 `2.19.2` +* +* 读取压缩包内的文件 +* +* **示例代码** +* +* ```js +const fs = wx.getFileSystemManager() +// 读取zip内某个或多个文件 +fs.readZipEntry({ + filePath: 'wxfile://from/to.zip', + entries: [{ + path: 'some_folder/my_file.txt', // zip内文件路径 + encoding: 'utf-8', // 指定读取文件的字符编码,如果不传 encoding,则以 ArrayBuffer 格式读取文件的二进制内容 + position: 0, // 从文件指定位置开始读,如果不指定,则从文件头开始读。读取的范围应该是左闭右开区间 [position, position+length)。有效范围:[0, fileLength - 1]。单位:byte + length: 10000, // 指定文件的长度,如果不指定,则读到文件末尾。有效范围:[1, fileLength]。单位:byte + }, { + path: 'other_folder/orther_file.txt', // zip内文件路径 + }], + success(res) { + console.log(res.entries) + // res.entries === { + // 'some_folder/my_file.txt': { + // errMsg: 'readZipEntry:ok', + // data: 'xxxxxx' + // }, + // 'other_folder/orther_file.txt': { + // data: (ArrayBuffer) + // } + // } + }, + fail(res) { + console.log(res.errMsg) + }, +}) + +// 读取zip内所有文件。允许指定统一的encoding。position、length则不再允许指定,分别默认为0和文件长度 +fs.readZipEntry({ + filePath: 'wxfile://from/to.zip', + entries: 'all' + encoding: 'utf-8', // 统一指定读取文件的字符编码,如果不传 encoding,则以 ArrayBuffer 格式读取文件的二进制内容 + success(res) { + console.log(res.entries) + // res.entries === { + // 'some_folder/my_file.txt': { + // errMsg: 'readZipEntry:ok', + // data: 'xxxxxx' + // }, + // 'other_folder/orther_file.txt': { + // errMsg: 'readZipEntry:ok', + // data: 'xxxxxx' + // } + // } + }, + fail(res) { + console.log(res.errMsg) + }, +}) +``` */ + readZipEntry(option: ReadZipEntryOption): void + /** [FileSystemManager.readdir(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.readdir.html) +* +* 在插件中使用:需要基础库 `2.19.2` +* +* 读取目录内文件列表 +* +* **注意事项 +* - readdir接口无法访问文件系统根路径(wxfile://)。 +* 示例代码** +* +* ```js +const fs = wx.getFileSystemManager() +fs.readdir({ + dirPath: `${wx.env.USER_DATA_PATH}/example`, + success(res) { + console.log(res.files) + }, + fail(res) { + console.error(res) + } +}) + +// 同步接口 +try { + const res = fs.readdirSync(`${wx.env.USER_DATA_PATH}/example`) + console.log(res) +} catch(e) { + console.error(e) +} +``` */ + readdir(option: ReaddirOption): void + /** [FileSystemManager.removeSavedFile(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.removeSavedFile.html) + * + * 在插件中使用:不支持 + * + * 删除该小程序下已保存的本地缓存文件 */ + removeSavedFile(option: FileSystemManagerRemoveSavedFileOption): void + /** [FileSystemManager.rename(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.rename.html) +* +* 在插件中使用:需要基础库 `2.19.2` +* +* 重命名文件。可以把文件从 oldPath 移动到 newPath +* +* **示例代码** +* +* ```js +const fs = wx.getFileSystemManager() +fs.rename({ + oldPath: `${wx.env.USER_DATA_PATH}/hello.txt`, + newPath: `${wx.env.USER_DATA_PATH}/hello_new.txt`, + success(res) { + console.log(res) + }, + fail(res) { + console.error(res) + } +}) + +// 同步接口 +try { + const res = fs.renameSync( + `${wx.env.USER_DATA_PATH}/hello.txt`, + `${wx.env.USER_DATA_PATH}/hello_new.txt` + ) + console.log(res) +} catch(e) { + console.error(e) +} +``` */ + rename(option: RenameOption): void + /** [FileSystemManager.renameSync(string oldPath, string newPath)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.renameSync.html) +* +* 在插件中使用:需要基础库 `2.19.2` +* +* [FileSystemManager.rename](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.rename.html) 的同步版本 +* +* **示例代码** +* +* ```js +const fs = wx.getFileSystemManager() +fs.rename({ + oldPath: `${wx.env.USER_DATA_PATH}/hello.txt`, + newPath: `${wx.env.USER_DATA_PATH}/hello_new.txt`, + success(res) { + console.log(res) + }, + fail(res) { + console.error(res) + } +}) + +// 同步接口 +try { + const res = fs.renameSync( + `${wx.env.USER_DATA_PATH}/hello.txt`, + `${wx.env.USER_DATA_PATH}/hello_new.txt` + ) + console.log(res) +} catch(e) { + console.error(e) +} +``` */ + renameSync( + /** 源文件路径,支持本地路径 */ + oldPath: string, + /** 新文件路径,支持本地路径 */ + newPath: string + ): void + /** [FileSystemManager.rmdir(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.rmdir.html) +* +* 在插件中使用:需要基础库 `2.19.2` +* +* 删除目录 +* +* **示例代码** +* +* ```js +const fs = wx.getFileSystemManager() +fs.rmdir({ + dirPath: `${wx.env.USER_DATA_PATH}/example`, + recursive: false, + success(res) { + console.log(res) + }, + fail(res) { + console.error(res) + } +}) + +// 同步接口 +try { + const res = fs.rmdirSync(`${wx.env.USER_DATA_PATH}/example`, false) + console.log(res) +} catch(e) { + console.error(e) +} +``` */ + rmdir(option: RmdirOption): void + /** [FileSystemManager.rmdirSync(string dirPath, boolean recursive)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.rmdirSync.html) +* +* 在插件中使用:需要基础库 `2.19.2` +* +* [FileSystemManager.rmdir](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.rmdir.html) 的同步版本 +* +* **示例代码** +* +* ```js +const fs = wx.getFileSystemManager() +fs.rmdir({ + dirPath: `${wx.env.USER_DATA_PATH}/example`, + recursive: false, + success(res) { + console.log(res) + }, + fail(res) { + console.error(res) + } +}) + +// 同步接口 +try { + const res = fs.rmdirSync(`${wx.env.USER_DATA_PATH}/example`, false) + console.log(res) +} catch(e) { + console.error(e) +} +``` */ + rmdirSync( + /** 要删除的目录路径 (本地路径) */ + dirPath: string, + /** 需要基础库: `2.3.0` + * + * 是否递归删除目录。如果为 true,则删除该目录和该目录下的所有子目录以及文件。 */ + recursive?: boolean + ): void + /** [FileSystemManager.saveFile(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.saveFile.html) + * + * 在插件中使用:不支持 + * + * 保存临时文件到本地。此接口会移动临时文件,因此调用成功后,tempFilePath 将不可用。 */ + saveFile(option: FileSystemManagerSaveFileOption): void + /** [FileSystemManager.stat(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.stat.html) + * + * 在插件中使用:需要基础库 `2.19.2` + * + * 获取文件 Stats 对象 */ + stat(option: StatOption): void + /** [FileSystemManager.truncate(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.truncate.html) +* +* 需要基础库: `2.16.1` +* +* 在插件中使用:需要基础库 `2.19.2` +* +* 对文件内容进行截断操作 +* +* **示例代码** +* +* ```js +const fs = wx.getFileSystemManager() +fs.truncate({ + filePath: `${wx.env.USER_DATA_PATH}/hello.txt`, + length: 10, // 从第10个字节开始截断 + success(res) { + console.log(res) + } +}) +``` */ + truncate(option: TruncateOption): void + /** [FileSystemManager.unlink(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.unlink.html) +* +* 在插件中使用:需要基础库 `2.19.2` +* +* 删除文件 +* +* **示例代码** +* +* ```js +const fs = wx.getFileSystemManager() +fs.unlink({ + filePath: `${wx.env.USER_DATA_PATH}/hello.txt`, + success(res) { + console.log(res) + }, + fail(res) { + console.error(res) + } +}) + +// 同步接口 +try { + const res = fs.unlinkSync(`${wx.env.USER_DATA_PATH}/hello.txt`) + console.log(res) +} catch(e) { + console.error(e) +} +``` */ + unlink(option: UnlinkOption): void + /** [FileSystemManager.unlinkSync(string filePath)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.unlinkSync.html) +* +* 在插件中使用:需要基础库 `2.19.2` +* +* [FileSystemManager.unlink](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.unlink.html) 的同步版本 +* +* **示例代码** +* +* ```js +const fs = wx.getFileSystemManager() +fs.unlink({ + filePath: `${wx.env.USER_DATA_PATH}/hello.txt`, + success(res) { + console.log(res) + }, + fail(res) { + console.error(res) + } +}) + +// 同步接口 +try { + const res = fs.unlinkSync(`${wx.env.USER_DATA_PATH}/hello.txt`) + console.log(res) +} catch(e) { + console.error(e) +} +``` */ + unlinkSync( + /** 要删除的文件路径 (本地路径) */ + filePath: string + ): void + /** [FileSystemManager.unzip(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.unzip.html) +* +* 在插件中使用:需要基础库 `2.19.2` +* +* 解压文件 +* +* **示例代码** +* +* ```js +const fs = wx.getFileSystemManager() +fs.unzip({ + zipFilePath: `${wx.env.USER_DATA_PATH}/example.zip`, + targetPath: '${wx.env.USER_DATA_PATH}/example', + success(res) { + console.log(res) + }, + fail(res) { + console.error(res) + } +}) +``` */ + unzip(option: UnzipOption): void + /** [FileSystemManager.write(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.write.html) +* +* 需要基础库: `2.16.1` +* +* 在插件中使用:需要基础库 `2.19.2` +* +* 写入文件 +* +* **示例代码** +* +* ```js +const fs = wx.getFileSystemManager() +// 打开文件 +fs.open({ + filePath: `${wx.env.USER_DATA_PATH}/hello.txt`, + flag: 'a+', + success(res) { + // 写入文件 + fs.write({ + fd: res.fd, + data: 'some text', + success(res) { + console.log(res.bytesWritten) + } + }) + } +}) +``` */ + write(option: WriteOption): void + /** [FileSystemManager.writeFile(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.writeFile.html) +* +* 在插件中使用:需要基础库 `2.19.2` +* +* 写文件 +* +* **示例代码** +* +* ```js +const fs = wx.getFileSystemManager() +fs.writeFile({ + filePath: `${wx.env.USER_DATA_PATH}/hello.txt`, + data: 'some text or arrayBuffer', + encoding: 'utf8', + success(res) { + console.log(res) + }, + fail(res) { + console.error(res) + } +}) + +// 同步接口 +try { + const res = fs.writeFileSync( + `${wx.env.USER_DATA_PATH}/hello.txt`, + 'some text or arrayBuffer', + 'utf8' + ) + console.log(res) +} catch(e) { + console.error(e) +} +``` */ + writeFile(option: WriteFileOption): void + /** [FileSystemManager.writeFileSync(string filePath, string|ArrayBuffer data, string encoding)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.writeFileSync.html) +* +* 在插件中使用:需要基础库 `2.19.2` +* +* [FileSystemManager.writeFile](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.writeFile.html) 的同步版本 +* +* **示例代码** +* +* ```js +const fs = wx.getFileSystemManager() +fs.writeFile({ + filePath: `${wx.env.USER_DATA_PATH}/hello.txt`, + data: 'some text or arrayBuffer', + encoding: 'utf8', + success(res) { + console.log(res) + }, + fail(res) { + console.error(res) + } +}) + +// 同步接口 +try { + const res = fs.writeFileSync( + `${wx.env.USER_DATA_PATH}/hello.txt`, + 'some text or arrayBuffer', + 'utf8' + ) + console.log(res) +} catch(e) { + console.error(e) +} +``` */ + writeFileSync( + /** 要写入的文件路径 (本地路径) */ + filePath: string, + /** 要写入的文本或二进制数据 */ + data: string | ArrayBuffer, + /** 指定写入文件的字符编码 + * + * 参数 encoding 可选值: + * - 'ascii': ; + * - 'base64': ; + * - 'binary': ; + * - 'hex': ; + * - 'ucs2': 以小端序读取; + * - 'ucs-2': 以小端序读取; + * - 'utf16le': 以小端序读取; + * - 'utf-16le': 以小端序读取; + * - 'utf-8': ; + * - 'utf8': ; + * - 'latin1': ; */ + encoding?: + | 'ascii' + | 'base64' + | 'binary' + | 'hex' + | 'ucs2' + | 'ucs-2' + | 'utf16le' + | 'utf-16le' + | 'utf-8' + | 'utf8' + | 'latin1' + ): void + /** [[ReadResult](https://developers.weixin.qq.com/miniprogram/dev/api/file/ReadResult.html) FileSystemManager.readSync(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.readSync.html) +* +* 需要基础库: `2.16.1` +* +* 在插件中使用:需要基础库 `2.19.2` +* +* 读文件 +* +* **示例代码** +* +* ```js +const fs = wx.getFileSystemManager() +const ab = new ArrayBuffer(1024) +const fd = fs.openSync({ + filePath: `${wx.env.USER_DATA_PATH}/hello.txt`, + flag: 'a+' +}) +const res = fs.readSync({ + fd: fd, + arrayBuffer: ab, + length: 10 +}) +console.log(res) +``` */ + readSync(option: ReadSyncOption): ReadResult + /** [[Stats](https://developers.weixin.qq.com/miniprogram/dev/api/file/Stats.html) FileSystemManager.fstatSync(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.fstatSync.html) +* +* 需要基础库: `2.16.1` +* +* 在插件中使用:需要基础库 `2.19.2` +* +* 同步获取文件的状态信息 +* +* **示例代码** +* +* ```js +const fs = wx.getFileSystemManager() +const fd = fs.openSync({ + filePath: `${wx.env.USER_DATA_PATH}/hello.txt`, + flag: 'a+' +}) +const stats = fs.fstatSync({fd: fd}) +console.log(stats) +``` */ + fstatSync(option: FstatSyncOption): Stats + /** [[Stats](https://developers.weixin.qq.com/miniprogram/dev/api/file/Stats.html)|Array.<[Stats](https://developers.weixin.qq.com/miniprogram/dev/api/file/Stats.html)> FileSystemManager.statSync(string path, boolean recursive)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.statSync.html) + * + * 在插件中使用:需要基础库 `2.19.2` + * + * [FileSystemManager.stat](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.stat.html) 的同步版本 */ + statSync( + /** 文件/目录路径 (本地路径) */ + path: string, + /** 需要基础库: `2.3.0` + * + * 是否递归获取目录下的每个文件的 Stats 信息 */ + recursive?: boolean + ): Stats | Stats[] + /** [[WriteResult](https://developers.weixin.qq.com/miniprogram/dev/api/file/WriteResult.html) FileSystemManager.writeSync(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.writeSync.html) +* +* 需要基础库: `2.16.1` +* +* 在插件中使用:需要基础库 `2.19.2` +* +* 同步写入文件 +* +* **示例代码** +* +* ```js +const fs = wx.getFileSystemManager() +const fd = fs.openSync({ + filePath: `${wx.env.USER_DATA_PATH}/hello.txt`, + flag: 'a+' +}) +const res = fs.writeSync({ + fd: fd, + data: 'some text' +}) +console.log(res.bytesWritten) +``` */ + writeSync(option: WriteSyncOption): WriteResult + /** [string FileSystemManager.openSync(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.openSync.html) +* +* 需要基础库: `2.16.1` +* +* 在插件中使用:需要基础库 `2.19.2` +* +* 同步打开文件,返回文件描述符 +* +* **示例代码** +* +* ```js +const fs = wx.getFileSystemManager() +const fd = fs.openSync({ + filePath: `${wx.env.USER_DATA_PATH}/hello.txt`, + flag: 'a+' +}) +console.log(fd) +``` */ + openSync(option: OpenSyncOption): string + /** [string FileSystemManager.saveFileSync(string tempFilePath, string filePath)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.saveFileSync.html) + * + * 在插件中使用:不支持 + * + * [FileSystemManager.saveFile](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.saveFile.html) 的同步版本 */ + saveFileSync( + /** 临时存储文件路径 (本地路径) */ + tempFilePath: string, + /** 要存储的文件路径 (本地路径) */ + filePath?: string + ): string + /** [string|ArrayBuffer FileSystemManager.readFileSync(string filePath, string encoding, number position, number length)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.readFileSync.html) +* +* 在插件中使用:需要基础库 `2.19.2` +* +* [FileSystemManager.readFile](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.readFile.html) 的同步版本 +* +* **示例代码** +* +* ```js +const fs = wx.getFileSystemManager() +fs.readFile({ + filePath: `${wx.env.USER_DATA_PATH}/hello.txt`, + encoding: 'utf8', + position: 0, + success(res) { + console.log(res.data) + }, + fail(res) { + console.error(res) + } +}) + +// 同步接口 +try { + const res = fs.readFileSync(`${wx.env.USER_DATA_PATH}/hello.txt`, 'utf8', 0) + console.log(res) +} catch(e) { + console.error(e) +} +``` */ + readFileSync( + /** 要读取的文件的路径 (本地路径) */ + filePath: string, + /** 指定读取文件的字符编码,如果不传 encoding,则以 ArrayBuffer 格式读取文件的二进制内容 + * + * 参数 encoding 可选值: + * - 'ascii': ; + * - 'base64': ; + * - 'binary': ; + * - 'hex': ; + * - 'ucs2': 以小端序读取; + * - 'ucs-2': 以小端序读取; + * - 'utf16le': 以小端序读取; + * - 'utf-16le': 以小端序读取; + * - 'utf-8': ; + * - 'utf8': ; + * - 'latin1': ; */ + encoding?: + | 'ascii' + | 'base64' + | 'binary' + | 'hex' + | 'ucs2' + | 'ucs-2' + | 'utf16le' + | 'utf-16le' + | 'utf-8' + | 'utf8' + | 'latin1', + /** 需要基础库: `2.10.0` + * + * 从文件指定位置开始读,如果不指定,则从文件头开始读。读取的范围应该是左闭右开区间 [position, position+length)。有效范围:[0, fileLength - 1]。单位:byte */ + position?: number, + /** 需要基础库: `2.10.0` + * + * 指定文件的长度,如果不指定,则读到文件末尾。有效范围:[1, fileLength]。单位:byte */ + length?: number + ): string | ArrayBuffer + /** [undefined FileSystemManager.closeSync(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.closeSync.html) +* +* 需要基础库: `2.16.1` +* +* 在插件中使用:需要基础库 `2.19.2` +* +* 同步关闭文件 +* +* **示例代码** +* +* ```js +const fs = wx.getFileSystemManager() +const fd = fs.openSync({ + filePath: `${wx.env.USER_DATA_PATH}/hello.txt`, + flag: 'a+' +}) + +// 关闭文件 +fs.closeSync({fd: fd}) +``` */ + closeSync(option: CloseSyncOption): undefined + /** [undefined FileSystemManager.ftruncateSync(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.ftruncateSync.html) +* +* 需要基础库: `2.16.1` +* +* 在插件中使用:需要基础库 `2.19.2` +* +* 对文件内容进行截断操作 +* +* **示例代码** +* +* ```js +const fs = wx.getFileSystemManager() +const fd = fs.openSync({ + filePath: `${wx.env.USER_DATA_PATH}/hello.txt`, + flag: 'a+' +}) +fs.ftruncateSync({ + fd: fd, + length: 10 // 从第10个字节开始截断文件 +}) +``` */ + ftruncateSync(option: FtruncateSyncOption): undefined + /** [undefined FileSystemManager.truncateSync(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.truncateSync.html) +* +* 需要基础库: `2.16.1` +* +* 在插件中使用:需要基础库 `2.19.2` +* +* 对文件内容进行截断操作 (truncate 的同步版本) +* +* **示例代码** +* +* ```js +const fs = wx.getFileSystemManager() +fs.truncateSync({ + filePath: `${wx.env.USER_DATA_PATH}/hello.txt`, + length: 10, // 从第10个字节开始截断 +}) +``` */ + truncateSync(option: TruncateSyncOption): undefined + } + interface FstatSyncError { + /** 错误信息 + * + * | 错误信息 | 说明 | + * | - | - | + * | bad file descriptor | 无效的文件描述符 | + * | fail permission denied | 指定的 fd 路径没有读权限 | */ errMsg: string + /** 错误码 + * + * | 错误信息 | 说明 | + * | - | - | + * | bad file descriptor | 无效的文件描述符 | + * | fail permission denied | 指定的 fd 路径没有读权限 | */ errCode: number + } + interface FtruncateSyncError { + /** 错误信息 + * + * | 错误信息 | 说明 | + * | - | - | + * | bad file descriptor | 无效的文件描述符 | + * | fail permission denied | 指定的 fd 没有写权限 | + * | fail the maximum size of the file storage limit is exceeded | 存储空间不足 | + * | fail sdcard not mounted | android sdcard 挂载失败 | */ errMsg: string + /** 错误码 + * + * | 错误信息 | 说明 | + * | - | - | + * | bad file descriptor | 无效的文件描述符 | + * | fail permission denied | 指定的 fd 没有写权限 | + * | fail the maximum size of the file storage limit is exceeded | 存储空间不足 | + * | fail sdcard not mounted | android sdcard 挂载失败 | */ errCode: number + } + interface InnerAudioContext { + /** [InnerAudioContext.destroy()](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.destroy.html) + * + * 在插件中使用:支持 + * + * 销毁当前实例 */ + destroy(): void + /** [InnerAudioContext.offCanplay(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.offCanplay.html) +* +* 需要基础库: `1.9.0` +* +* 在插件中使用:支持 +* +* 移除音频进入可以播放状态的事件的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +InnerAudioContext.onCanplay(listener) +InnerAudioContext.offCanplay(listener) // 需传入与监听时同一个的函数对象 +``` */ + offCanplay( + /** onCanplay 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: OffCanplayCallback + ): void + /** [InnerAudioContext.offEnded(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.offEnded.html) +* +* 需要基础库: `1.9.0` +* +* 在插件中使用:支持 +* +* 移除音频自然播放至结束的事件的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +InnerAudioContext.onEnded(listener) +InnerAudioContext.offEnded(listener) // 需传入与监听时同一个的函数对象 +``` */ + offEnded( + /** onEnded 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: OffEndedCallback + ): void + /** [InnerAudioContext.offError(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.offError.html) +* +* 需要基础库: `1.9.0` +* +* 在插件中使用:支持 +* +* 移除音频播放错误事件的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +InnerAudioContext.onError(listener) +InnerAudioContext.offError(listener) // 需传入与监听时同一个的函数对象 +``` */ + offError( + /** onError 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: InnerAudioContextOffErrorCallback + ): void + /** [InnerAudioContext.offPause(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.offPause.html) +* +* 需要基础库: `1.9.0` +* +* 在插件中使用:支持 +* +* 移除音频暂停事件的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +InnerAudioContext.onPause(listener) +InnerAudioContext.offPause(listener) // 需传入与监听时同一个的函数对象 +``` */ + offPause( + /** onPause 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: OffPauseCallback + ): void + /** [InnerAudioContext.offPlay(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.offPlay.html) +* +* 需要基础库: `1.9.0` +* +* 在插件中使用:支持 +* +* 移除音频播放事件的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +InnerAudioContext.onPlay(listener) +InnerAudioContext.offPlay(listener) // 需传入与监听时同一个的函数对象 +``` */ + offPlay( + /** onPlay 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: OffPlayCallback + ): void + /** [InnerAudioContext.offSeeked(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.offSeeked.html) +* +* 需要基础库: `1.9.0` +* +* 在插件中使用:支持 +* +* 移除音频完成跳转操作的事件的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +InnerAudioContext.onSeeked(listener) +InnerAudioContext.offSeeked(listener) // 需传入与监听时同一个的函数对象 +``` */ + offSeeked( + /** onSeeked 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: OffSeekedCallback + ): void + /** [InnerAudioContext.offSeeking(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.offSeeking.html) +* +* 需要基础库: `1.9.0` +* +* 在插件中使用:支持 +* +* 移除音频进行跳转操作的事件的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +InnerAudioContext.onSeeking(listener) +InnerAudioContext.offSeeking(listener) // 需传入与监听时同一个的函数对象 +``` */ + offSeeking( + /** onSeeking 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: OffSeekingCallback + ): void + /** [InnerAudioContext.offStop(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.offStop.html) +* +* 需要基础库: `1.9.0` +* +* 在插件中使用:支持 +* +* 移除音频停止事件的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +InnerAudioContext.onStop(listener) +InnerAudioContext.offStop(listener) // 需传入与监听时同一个的函数对象 +``` */ + offStop( + /** onStop 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: OffStopCallback + ): void + /** [InnerAudioContext.offTimeUpdate(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.offTimeUpdate.html) +* +* 需要基础库: `1.9.0` +* +* 在插件中使用:支持 +* +* 移除音频播放进度更新事件的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +InnerAudioContext.onTimeUpdate(listener) +InnerAudioContext.offTimeUpdate(listener) // 需传入与监听时同一个的函数对象 +``` */ + offTimeUpdate( + /** onTimeUpdate 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: OffTimeUpdateCallback + ): void + /** [InnerAudioContext.offWaiting(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.offWaiting.html) +* +* 需要基础库: `1.9.0` +* +* 在插件中使用:支持 +* +* 移除音频加载中事件的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +InnerAudioContext.onWaiting(listener) +InnerAudioContext.offWaiting(listener) // 需传入与监听时同一个的函数对象 +``` */ + offWaiting( + /** onWaiting 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: OffWaitingCallback + ): void + /** [InnerAudioContext.onCanplay(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.onCanplay.html) + * + * 在插件中使用:支持 + * + * 监听音频进入可以播放状态的事件。但不保证后面可以流畅播放 */ + onCanplay( + /** 音频进入可以播放状态的事件的监听函数 */ + listener: OnCanplayCallback + ): void + /** [InnerAudioContext.onEnded(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.onEnded.html) + * + * 在插件中使用:支持 + * + * 监听音频自然播放至结束的事件 */ + onEnded( + /** 音频自然播放至结束的事件的监听函数 */ + listener: OnEndedCallback + ): void + /** [InnerAudioContext.onError(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.onError.html) + * + * 在插件中使用:支持 + * + * 监听音频播放错误事件 + * + * **Tips** + * + * 1. errCode=100001 时,如若 errMsg 中有 INNERCODE -11828 ,请先检查 response header 是否缺少 Content-Length + * 2. errCode=100001 时,如若 errMsg 中有 systemErrCode:200333420,请检查文件编码格式和 fileExtension 是否一致 */ + onError( + /** 音频播放错误事件的监听函数 */ + listener: InnerAudioContextOnErrorCallback + ): void + /** [InnerAudioContext.onPause(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.onPause.html) + * + * 在插件中使用:支持 + * + * 监听音频暂停事件 */ + onPause( + /** 音频暂停事件的监听函数 */ + listener: OnPauseCallback + ): void + /** [InnerAudioContext.onPlay(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.onPlay.html) + * + * 在插件中使用:支持 + * + * 监听音频播放事件 */ + onPlay( + /** 音频播放事件的监听函数 */ + listener: OnPlayCallback + ): void + /** [InnerAudioContext.onSeeked(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.onSeeked.html) + * + * 在插件中使用:支持 + * + * 监听音频完成跳转操作的事件 */ + onSeeked( + /** 音频完成跳转操作的事件的监听函数 */ + listener: OnSeekedCallback + ): void + /** [InnerAudioContext.onSeeking(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.onSeeking.html) + * + * 在插件中使用:支持 + * + * 监听音频进行跳转操作的事件 */ + onSeeking( + /** 音频进行跳转操作的事件的监听函数 */ + listener: OnSeekingCallback + ): void + /** [InnerAudioContext.onStop(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.onStop.html) + * + * 在插件中使用:支持 + * + * 监听音频停止事件 */ + onStop( + /** 音频停止事件的监听函数 */ + listener: InnerAudioContextOnStopCallback + ): void + /** [InnerAudioContext.onTimeUpdate(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.onTimeUpdate.html) + * + * 在插件中使用:支持 + * + * 监听音频播放进度更新事件 */ + onTimeUpdate( + /** 音频播放进度更新事件的监听函数 */ + listener: OnTimeUpdateCallback + ): void + /** [InnerAudioContext.onWaiting(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.onWaiting.html) + * + * 在插件中使用:支持 + * + * 监听音频加载中事件。当音频因为数据不足,需要停下来加载时会触发 */ + onWaiting( + /** 音频加载中事件的监听函数 */ + listener: OnWaitingCallback + ): void + /** [InnerAudioContext.pause()](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.pause.html) + * + * 在插件中使用:支持 + * + * 暂停。暂停后的音频再播放会从暂停处开始播放 */ + pause(): void + /** [InnerAudioContext.play()](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.play.html) + * + * 在插件中使用:支持 + * + * 播放 */ + play(): void + /** [InnerAudioContext.seek(number position)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.seek.html) + * + * 在插件中使用:支持 + * + * 跳转到指定位置 */ + seek( + /** 跳转的时间,单位 s。精确到小数点后 3 位,即支持 ms 级别精确度 */ + position: number + ): void + /** [InnerAudioContext.stop()](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.stop.html) + * + * 在插件中使用:支持 + * + * 停止。停止后的音频再播放会从头开始播放。 */ + stop(): void + } + interface IntersectionObserver { + /** [IntersectionObserver.disconnect()](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/IntersectionObserver.disconnect.html) + * + * 在插件中使用:支持 + * + * 停止监听。回调函数将不再触发 */ + disconnect(): void + /** [IntersectionObserver.observe(string targetSelector, function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/IntersectionObserver.observe.html) + * + * 在插件中使用:支持 + * + * 指定目标节点并开始监听相交状态变化情况 */ + observe( + /** 选择器 */ + targetSelector: string, + /** 监听相交状态变化的回调函数 */ + callback: IntersectionObserverObserveCallback + ): void + /** [[IntersectionObserver](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/IntersectionObserver.html) IntersectionObserver.relativeTo(string selector, Object margins)](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/IntersectionObserver.relativeTo.html) + * + * 在插件中使用:支持 + * + * 使用选择器指定一个节点,作为参照区域之一。 */ + relativeTo( + /** 选择器 */ + selector: string, + /** 用来扩展(或收缩)参照节点布局区域的边界 */ + margins?: Margins + ): IntersectionObserver + /** [[IntersectionObserver](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/IntersectionObserver.html) IntersectionObserver.relativeToViewport(Object margins)](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/IntersectionObserver.relativeToViewport.html) +* +* 在插件中使用:支持 +* +* 指定页面显示区域作为参照区域之一 +* +* **示例代码** +* +* 下面的示例代码中,如果目标节点(用选择器 .target-class 指定)进入显示区域以下 100px 时,就会触发回调函数。 +* ```javascript +Page({ + onLoad: function(){ + wx.createIntersectionObserver().relativeToViewport({bottom: 100}).observe('.target-class', (res) => { + res.intersectionRatio // 相交区域占目标节点的布局区域的比例 + res.intersectionRect // 相交区域 + res.intersectionRect.left // 相交区域的左边界坐标 + res.intersectionRect.top // 相交区域的上边界坐标 + res.intersectionRect.width // 相交区域的宽度 + res.intersectionRect.height // 相交区域的高度 + }) + } +}) +``` */ + relativeToViewport( + /** 用来扩展(或收缩)参照节点布局区域的边界 */ + margins?: Margins + ): IntersectionObserver + } + interface InterstitialAd { + /** [InterstitialAd.destroy()](https://developers.weixin.qq.com/miniprogram/dev/api/ad/InterstitialAd.destroy.html) + * + * 需要基础库: `2.8.0` + * + * 在插件中使用:不支持 + * + * 销毁插屏广告实例。 */ + destroy(): void + /** [InterstitialAd.offClose(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/ad/InterstitialAd.offClose.html) +* +* 在插件中使用:不支持 +* +* 移除插屏广告关闭事件的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +InterstitialAd.onClose(listener) +InterstitialAd.offClose(listener) // 需传入与监听时同一个的函数对象 +``` */ + offClose( + /** onClose 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: UDPSocketOffCloseCallback + ): void + /** [InterstitialAd.offError(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/ad/InterstitialAd.offError.html) +* +* 在插件中使用:不支持 +* +* 移除插屏错误事件的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +InterstitialAd.onError(listener) +InterstitialAd.offError(listener) // 需传入与监听时同一个的函数对象 +``` */ + offError( + /** onError 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: InterstitialAdOffErrorCallback + ): void + /** [InterstitialAd.offLoad(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/ad/InterstitialAd.offLoad.html) +* +* 在插件中使用:不支持 +* +* 移除插屏广告加载事件的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +InterstitialAd.onLoad(listener) +InterstitialAd.offLoad(listener) // 需传入与监听时同一个的函数对象 +``` */ + offLoad( + /** onLoad 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: OffLoadCallback + ): void + /** [InterstitialAd.onClose(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/ad/InterstitialAd.onClose.html) + * + * 在插件中使用:不支持 + * + * 监听插屏广告关闭事件。 */ + onClose( + /** 插屏广告关闭事件的监听函数 */ + listener: UDPSocketOnCloseCallback + ): void + /** [InterstitialAd.onError(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/ad/InterstitialAd.onError.html) + * + * 在插件中使用:不支持 + * + * 监听插屏错误事件。 + * + * **错误码信息与解决方案表** + * + * 错误码是通过onError获取到的错误信息。调试期间,可以通过异常返回来捕获信息。 + * 在小程序发布上线之后,如果遇到异常问题,可以在[“运维中心“](https://mp.weixin.qq.com/)里面搜寻错误日志,还可以针对异常返回加上适当的监控信息。 + * + * | 代码 | 异常情况 | 理由 | 解决方案 | + * | ------ | -------------- | --------------- | -------------------------- | + * | 1000 | 后端错误调用失败 | 该项错误不是开发者的异常情况 | 一般情况下忽略一段时间即可恢复。 | + * | 1001 | 参数错误 | 使用方法错误 | 可以前往developers.weixin.qq.com确认具体教程(小程序和小游戏分别有各自的教程,可以在顶部选项中,“设计”一栏的右侧进行切换。| + * | 1002 | 广告单元无效 | 可能是拼写错误、或者误用了其他APP的广告ID | 请重新前往mp.weixin.qq.com确认广告位ID。 | + * | 1003 | 内部错误 | 该项错误不是开发者的异常情况 | 一般情况下忽略一段时间即可恢复。| + * | 1004 | 无适合的广告 | 广告不是每一次都会出现,这次没有出现可能是由于该用户不适合浏览广告 | 属于正常情况,且开发者需要针对这种情况做形态上的兼容。 | + * | 1005 | 广告组件审核中 | 你的广告正在被审核,无法展现广告 | 请前往mp.weixin.qq.com确认审核状态,且开发者需要针对这种情况做形态上的兼容。| + * | 1006 | 广告组件被驳回 | 你的广告审核失败,无法展现广告 | 请前往mp.weixin.qq.com确认审核状态,且开发者需要针对这种情况做形态上的兼容。| + * | 1007 | 广告组件被驳回 | 你的广告能力已经被封禁,封禁期间无法展现广告 | 请前往mp.weixin.qq.com确认小程序广告封禁状态。 | + * | 1008 | 广告单元已关闭 | 该广告位的广告能力已经被关闭 | 请前往mp.weixin.qq.com重新打开对应广告位的展现。| */ + onError( + /** 插屏错误事件的监听函数 */ + listener: InterstitialAdOnErrorCallback + ): void + /** [InterstitialAd.onLoad(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/ad/InterstitialAd.onLoad.html) + * + * 在插件中使用:不支持 + * + * 监听插屏广告加载事件。 */ + onLoad( + /** 插屏广告加载事件的监听函数 */ + listener: OnLoadCallback + ): void + /** [Promise InterstitialAd.load()](https://developers.weixin.qq.com/miniprogram/dev/api/ad/InterstitialAd.load.html) + * + * 需要基础库: `2.8.0` + * + * 在插件中使用:不支持 + * + * 加载插屏广告。 */ + load(): Promise<any> + /** [Promise InterstitialAd.show()](https://developers.weixin.qq.com/miniprogram/dev/api/ad/InterstitialAd.show.html) + * + * 在插件中使用:不支持 + * + * 显示插屏广告。 + * + * **错误码信息表** + * + * 如果插屏广告显示失败,InterstitialAd.show() 方法会返回一个rejected Promise,开发者可以获取到错误码及对应的错误信息。 + * + * | 代码 | 异常情况 | 理由 | + * | ------ | -------------- | -------------------------- | + * | 2001 | 触发频率限制 | 小程序启动一定时间内不允许展示插屏广告 | + * | 2002 | 触发频率限制 | 距离小程序插屏广告或者激励视频广告上次播放时间间隔不足,不允许展示插屏广告 | + * | 2003 | 触发频率限制 | 当前正在播放激励视频广告或者插屏广告,不允许再次展示插屏广告 | + * | 2004 | 广告渲染失败 | 该项错误不是开发者的异常情况,或因小程序页面切换导致广告渲染失败 | + * | 2005 | 广告调用异常 | 插屏广告实例不允许跨页面调用 | */ + show(): Promise<any> + } + interface IsoDep { + /** [IsoDep.close(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/IsoDep.close.html) + * + * 需要基础库: `2.11.2` + * + * 在插件中使用:支持 + * + * 断开连接 */ + close(option?: NdefCloseOption): void + /** [IsoDep.connect(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/IsoDep.connect.html) + * + * 需要基础库: `2.11.2` + * + * 在插件中使用:支持 + * + * 连接 NFC 标签 */ + connect(option?: NdefConnectOption): void + /** [IsoDep.getHistoricalBytes(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/IsoDep.getHistoricalBytes.html) + * + * 需要基础库: `2.11.2` + * + * 在插件中使用:支持 + * + * 获取复位信息 */ + getHistoricalBytes(option?: GetHistoricalBytesOption): void + /** [IsoDep.getMaxTransceiveLength(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/IsoDep.getMaxTransceiveLength.html) + * + * 需要基础库: `2.11.2` + * + * 在插件中使用:支持 + * + * 获取最大传输长度 */ + getMaxTransceiveLength(option?: GetMaxTransceiveLengthOption): void + /** [IsoDep.isConnected(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/IsoDep.isConnected.html) + * + * 需要基础库: `2.11.2` + * + * 在插件中使用:支持 + * + * 检查是否已连接 */ + isConnected(option?: IsConnectedOption): void + /** [IsoDep.setTimeout(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/IsoDep.setTimeout.html) + * + * 需要基础库: `2.11.2` + * + * 在插件中使用:支持 + * + * 设置超时时间 */ + setTimeout(option: SetTimeoutOption): void + /** [IsoDep.transceive(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/IsoDep.transceive.html) + * + * 需要基础库: `2.11.2` + * + * 在插件中使用:支持 + * + * 发送数据 */ + transceive(option: TransceiveOption): void + } + interface Join1v1ChatError { + /** 错误信息 + * + * | 错误码 | 错误信息 | 说明 | + * | - | - | - | + * | -20000 | not open 1v1 Chat | 未开通双人通话 | + * | -20001 | device not support | 当前设备不支持 | + * | -20002 | on call | 正在通话中 | + * | -20003 | occupied by other miniprogram | 其它小程序正在通话中 | + * | -30000 | system error | 内部系统错误 | + * | -30001 | wechat has no camera authorization | 微信缺失相机权限 | + * | -30002 | wechat has no record authorization | 微信缺失录音权限 | + * | -30003 | miniprogram has no record authorization | 小程序缺失录音权限 | + * | -30004 | miniprogram has no camera authorization | 小程序缺失相机权限 | + * | -1 | | 当前已在房间内 | + * | -2 | | 录音设备被占用,可能是当前正在使用微信内语音通话或系统通话 | + * | -3 | | 加入会话期间退出(可能是用户主动退出,或者退后台、来电等原因),因此加入失败 | + * | -1000 | | 系统错误 | */ errMsg: string + /** 错误码 + * + * | 错误码 | 错误信息 | 说明 | + * | - | - | - | + * | -20000 | not open 1v1 Chat | 未开通双人通话 | + * | -20001 | device not support | 当前设备不支持 | + * | -20002 | on call | 正在通话中 | + * | -20003 | occupied by other miniprogram | 其它小程序正在通话中 | + * | -30000 | system error | 内部系统错误 | + * | -30001 | wechat has no camera authorization | 微信缺失相机权限 | + * | -30002 | wechat has no record authorization | 微信缺失录音权限 | + * | -30003 | miniprogram has no record authorization | 小程序缺失录音权限 | + * | -30004 | miniprogram has no camera authorization | 小程序缺失相机权限 | + * | -1 | | 当前已在房间内 | + * | -2 | | 录音设备被占用,可能是当前正在使用微信内语音通话或系统通话 | + * | -3 | | 加入会话期间退出(可能是用户主动退出,或者退后台、来电等原因),因此加入失败 | + * | -1000 | | 系统错误 | */ errCode: number + } + interface JoinVoIPChatError { + /** 错误信息 + * + * | 错误码 | 错误信息 | 说明 | + * | - | - | - | + * | -1 | 当前已在房间内 | | + * | -2 | 录音设备被占用,可能是当前正在使用微信内语音通话或系统通话 | | + * | -3 | 加入会话期间退出(可能是用户主动退出,或者退后台、来电等原因),因此加入失败 | | + * | -1000 | 系统错误 | | */ errMsg: string + /** 错误码 + * + * | 错误码 | 错误信息 | 说明 | + * | - | - | - | + * | -1 | 当前已在房间内 | | + * | -2 | 录音设备被占用,可能是当前正在使用微信内语音通话或系统通话 | | + * | -3 | 加入会话期间退出(可能是用户主动退出,或者退后台、来电等原因),因此加入失败 | | + * | -1000 | 系统错误 | | */ errCode: number + } + interface LivePlayerContext { + /** [LivePlayerContext.exitFullScreen(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/live/LivePlayerContext.exitFullScreen.html) + * + * 在插件中使用:支持 + * + * 退出全屏 */ + exitFullScreen(option?: ExitFullScreenOption): void + /** [LivePlayerContext.exitPictureInPicture(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/live/LivePlayerContext.exitPictureInPicture.html) + * + * 在插件中使用:支持 + * + * 退出小窗,该方法可在任意页面调用 */ + exitPictureInPicture(option?: ExitPictureInPictureOption): void + /** [LivePlayerContext.mute(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/live/LivePlayerContext.mute.html) + * + * 在插件中使用:支持 + * + * 静音 */ + mute(option?: MuteOption): void + /** [LivePlayerContext.pause(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/live/LivePlayerContext.pause.html) + * + * 需要基础库: `1.9.90` + * + * 在插件中使用:支持 + * + * 暂停 */ + pause(option?: PauseOption): void + /** [LivePlayerContext.play(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/live/LivePlayerContext.play.html) + * + * 在插件中使用:支持 + * + * 播放 */ + play(option?: PlayOption): void + /** [LivePlayerContext.requestFullScreen(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/live/LivePlayerContext.requestFullScreen.html) + * + * 在插件中使用:支持 + * + * 进入全屏 */ + requestFullScreen( + option: LivePlayerContextRequestFullScreenOption + ): void + /** [LivePlayerContext.requestPictureInPicture(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/live/LivePlayerContext.requestPictureInPicture.html) + * + * 需要基础库: `2.15.0` + * + * 在插件中使用:支持 + * + * 进入小窗 */ + requestPictureInPicture(option?: RequestPictureInPictureOption): void + /** [LivePlayerContext.resume(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/live/LivePlayerContext.resume.html) + * + * 需要基础库: `1.9.90` + * + * 在插件中使用:支持 + * + * 恢复 */ + resume(option?: ResumeOption): void + /** [LivePlayerContext.snapshot(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/live/LivePlayerContext.snapshot.html) + * + * 需要基础库: `2.7.1` + * + * 在插件中使用:支持 + * + * 截图 */ + snapshot(option: LivePlayerContextSnapshotOption): void + /** [LivePlayerContext.stop(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/live/LivePlayerContext.stop.html) + * + * 在插件中使用:支持 + * + * 停止 */ + stop(option?: StopOption): void + } + interface LivePusherContext { + /** [LivePusherContext.exitPictureInPicture(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/live/LivePusherContext.exitPictureInPicture.html) + * + * 需要基础库: `2.25.0` + * + * 在插件中使用:支持 + * + * 退出小窗,该方法可在任意页面调用 */ + exitPictureInPicture(option?: ExitPictureInPictureOption): void + /** [LivePusherContext.pause(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/live/LivePusherContext.pause.html) + * + * 在插件中使用:支持 + * + * 暂停推流 */ + pause(option?: PauseOption): void + /** [LivePusherContext.pauseBGM(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/live/LivePusherContext.pauseBGM.html) + * + * 需要基础库: `2.4.0` + * + * 在插件中使用:支持 + * + * 暂停背景音 */ + pauseBGM(option?: PauseBGMOption): void + /** [LivePusherContext.playBGM(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/live/LivePusherContext.playBGM.html) + * + * 需要基础库: `2.4.0` + * + * 在插件中使用:支持 + * + * 播放背景音 */ + playBGM(option: PlayBGMOption): void + /** [LivePusherContext.resume(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/live/LivePusherContext.resume.html) + * + * 在插件中使用:支持 + * + * 恢复推流 */ + resume(option?: ResumeOption): void + /** [LivePusherContext.resumeBGM(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/live/LivePusherContext.resumeBGM.html) + * + * 需要基础库: `2.4.0` + * + * 在插件中使用:支持 + * + * 恢复背景音 */ + resumeBGM(option?: ResumeBGMOption): void + /** [LivePusherContext.sendMessage(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/live/LivePusherContext.sendMessage.html) + * + * 需要基础库: `2.10.0` + * + * 在插件中使用:支持 + * + * 发送SEI消息 */ + sendMessage(option: SendMessageOption): void + /** [LivePusherContext.setBGMVolume(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/live/LivePusherContext.setBGMVolume.html) + * + * 需要基础库: `2.4.0` + * + * 在插件中使用:支持 + * + * 设置背景音音量 */ + setBGMVolume(option: SetBGMVolumeOption): void + /** [LivePusherContext.setMICVolume(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/live/LivePusherContext.setMICVolume.html) + * + * 需要基础库: `2.10.0` + * + * 在插件中使用:支持 + * + * 设置麦克风音量 */ + setMICVolume(option: SetMICVolumeOption): void + /** [LivePusherContext.snapshot(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/live/LivePusherContext.snapshot.html) + * + * 需要基础库: `1.9.90` + * + * 在插件中使用:支持 + * + * 快照 */ + snapshot(option: LivePusherContextSnapshotOption): void + /** [LivePusherContext.start(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/live/LivePusherContext.start.html) + * + * 在插件中使用:支持 + * + * 开始推流,同时开启摄像头预览 */ + start(option?: LivePusherContextStartOption): void + /** [LivePusherContext.startPreview(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/live/LivePusherContext.startPreview.html) + * + * 需要基础库: `2.7.0` + * + * 在插件中使用:支持 + * + * 开启摄像头预览 */ + startPreview(option?: StartPreviewOption): void + /** [LivePusherContext.stop(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/live/LivePusherContext.stop.html) + * + * 在插件中使用:支持 + * + * 停止推流,同时停止摄像头预览 */ + stop(option?: StopOption): void + /** [LivePusherContext.stopBGM(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/live/LivePusherContext.stopBGM.html) + * + * 需要基础库: `2.4.0` + * + * 在插件中使用:支持 + * + * 停止背景音 */ + stopBGM(option?: StopBGMOption): void + /** [LivePusherContext.stopPreview(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/live/LivePusherContext.stopPreview.html) + * + * 需要基础库: `2.7.0` + * + * 在插件中使用:支持 + * + * 关闭摄像头预览 */ + stopPreview(option?: StopPreviewOption): void + /** [LivePusherContext.switchCamera(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/live/LivePusherContext.switchCamera.html) + * + * 在插件中使用:支持 + * + * 切换前后摄像头 */ + switchCamera(option?: SwitchCameraOption): void + /** [LivePusherContext.toggleTorch(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/live/LivePusherContext.toggleTorch.html) + * + * 需要基础库: `2.1.0` + * + * 在插件中使用:支持 + * + * 切换手电筒 */ + toggleTorch(option?: ToggleTorchOption): void + } + interface LogManager { + /** [LogManager.debug()](https://developers.weixin.qq.com/miniprogram/dev/api/base/debug/LogManager.debug.html) + * + * 在插件中使用:不支持 + * + * 写 debug 日志 */ + debug( + /** 日志内容,可以有任意多个。每次调用的参数的总大小不超过100Kb */ + ...args: any[] + ): void + /** [LogManager.info()](https://developers.weixin.qq.com/miniprogram/dev/api/base/debug/LogManager.info.html) + * + * 在插件中使用:不支持 + * + * 写 info 日志 */ + info( + /** 日志内容,可以有任意多个。每次调用的参数的总大小不超过100Kb */ + ...args: any[] + ): void + /** [LogManager.log()](https://developers.weixin.qq.com/miniprogram/dev/api/base/debug/LogManager.log.html) + * + * 在插件中使用:不支持 + * + * 写 log 日志 */ + log( + /** 日志内容,可以有任意多个。每次调用的参数的总大小不超过100Kb */ + ...args: any[] + ): void + /** [LogManager.warn()](https://developers.weixin.qq.com/miniprogram/dev/api/base/debug/LogManager.warn.html) + * + * 在插件中使用:不支持 + * + * 写 warn 日志 */ + warn( + /** 日志内容,可以有任意多个。每次调用的参数的总大小不超过100Kb */ + ...args: any[] + ): void + } + interface MapContext { + /** [MapContext.addArc(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/map/MapContext.addArc.html) + * + * 需要基础库: `2.22.0` + * + * 在插件中使用:支持 + * + * 添加弧线,途经点与夹角必须设置一个。途经点必须在起终点有效坐标范围内,否则不能生成正确的弧线,同时设置夹角角度时,以夹角角度为准。夹角定义为起点到终点,与起点外切线逆时针旋转的角度。工具侧暂未支持。 */ + addArc(option: AddArcOption): void + /** [MapContext.addCustomLayer(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/map/MapContext.addCustomLayer.html) + * + * 需要基础库: `2.12.0` + * + * 在插件中使用:支持 + * + * 添加个性化图层。图层创建[参考文档](https://lbs.qq.com/dev/console/customLayer/create) */ + addCustomLayer(option: AddCustomLayerOption): void + /** [MapContext.addGroundOverlay(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/map/MapContext.addGroundOverlay.html) + * + * 需要基础库: `2.14.0` + * + * 在插件中使用:支持 + * + * 创建自定义图片图层,图片会随着地图缩放而缩放。 */ + addGroundOverlay(option: AddGroundOverlayOption): void + /** [MapContext.addMarkers(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/map/MapContext.addMarkers.html) + * + * 需要基础库: `2.13.0` + * + * 在插件中使用:支持 + * + * 添加 marker。 */ + addMarkers(option: AddMarkersOption): void + /** [MapContext.addVisualLayer(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/map/MapContext.addVisualLayer.html) + * + * 需要基础库: `2.20.1` + * + * 在插件中使用:支持 + * + * 添加可视化图层。需要刷新时,interval 可设置的最小值为 15 s。 */ + addVisualLayer(option: AddVisualLayerOption): void + /** [MapContext.fromScreenLocation(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/map/MapContext.fromScreenLocation.html) + * + * 需要基础库: `2.14.0` + * + * 在插件中使用:支持 + * + * 获取屏幕上的点对应的经纬度,坐标原点为地图左上角。 */ + fromScreenLocation(option: FromScreenLocationOption): void + /** [MapContext.getCenterLocation(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/map/MapContext.getCenterLocation.html) + * + * 在插件中使用:支持 + * + * 获取当前地图中心的经纬度。返回的是 gcj02 坐标系,可以用于 [wx.openLocation()](https://developers.weixin.qq.com/miniprogram/dev/api/location/wx.openLocation.html) */ + getCenterLocation(option: GetCenterLocationOption): void + /** [MapContext.getRegion(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/map/MapContext.getRegion.html) + * + * 需要基础库: `1.4.0` + * + * 在插件中使用:支持 + * + * 获取当前地图的视野范围 */ + getRegion(option?: GetRegionOption): void + /** [MapContext.getRotate(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/map/MapContext.getRotate.html) + * + * 需要基础库: `2.8.0` + * + * 在插件中使用:支持 + * + * 获取当前地图的旋转角 */ + getRotate(option?: GetRotateOption): void + /** [MapContext.getScale(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/map/MapContext.getScale.html) + * + * 需要基础库: `1.4.0` + * + * 在插件中使用:支持 + * + * 获取当前地图的缩放级别 */ + getScale(option?: GetScaleOption): void + /** [MapContext.getSkew(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/map/MapContext.getSkew.html) + * + * 需要基础库: `2.8.0` + * + * 在插件中使用:支持 + * + * 获取当前地图的倾斜角 */ + getSkew(option?: GetSkewOption): void + /** [MapContext.includePoints(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/map/MapContext.includePoints.html) + * + * 需要基础库: `1.2.0` + * + * 在插件中使用:支持 + * + * 缩放视野展示所有经纬度 */ + includePoints(option: IncludePointsOption): void + /** [MapContext.initMarkerCluster(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/map/MapContext.initMarkerCluster.html) + * + * 需要基础库: `2.13.0` + * + * 在插件中使用:支持 + * + * 初始化点聚合的配置,未调用时采用默认配置。 */ + initMarkerCluster(option: InitMarkerClusterOption): void + /** [MapContext.moveAlong(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/map/MapContext.moveAlong.html) + * + * 需要基础库: `2.13.0` + * + * 在插件中使用:支持 + * + * 沿指定路径移动 `marker`,用于轨迹回放等场景。动画完成时触发回调事件,若动画进行中,对同一 `marker` 再次调用 `moveAlong` 方法,前一次的动画将被打断。 */ + moveAlong(option: MoveAlongOption): void + /** [MapContext.moveToLocation(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/map/MapContext.moveToLocation.html) + * + * 需要基础库: `1.2.0` + * + * 在插件中使用:支持 + * + * 将地图中心移置当前定位点,此时需设置地图组件 show-location 为true。[2.8.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起支持将地图中心移动到指定位置。 */ + moveToLocation(option?: MoveToLocationOption): void + /** [MapContext.on(string event, function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/media/map/MapContext.on.html) +* +* 需要基础库: `2.13.0` +* +* 在插件中使用:支持 +* +* 监听地图事件。 +* +* ### markerClusterCreate +* +* 缩放或拖动导致新的聚合簇产生时触发,仅返回新创建的聚合簇信息。 +* +* #### 返回参数 +* +* | 参数 | 类型 | 说明 | +* | --------- | ------ | --------- | +* | clusters | `Array<ClusterInfo>` | 聚合簇数据 | +* +* ### markerClusterClick +* +* 聚合簇的点击事件。 +* +* #### 返回参数 +* +* | 参数 | 类型 | 说明 | +* | --------- | ------------- | --------- | +* | cluster | ClusterInfo | 聚合簇 | +* +* #### ClusterInfo 结构 +* +* | 参数 | 类型 | 说明 | +* | ---------- | -------------------- | -------------------------- | +* | clusterId | Number | 聚合簇的 id | +* | center | LatLng | 聚合簇的坐标 | +* | markerIds | `Array<Number>` | 该聚合簇内的点标记数据数组 | +* +* **示例代码** +* +* ```js + MapContext.on('markerClusterCreate', (res) => {}) + MapContext.on('markerClusterClick', (res) => {}) +``` */ + on( + /** 事件名 + * + * 参数 event 可选值: + * - 'markerClusterCreate': ; + * - 'markerClusterClick': ; */ + event: 'markerClusterCreate' | 'markerClusterClick', + /** 事件的回调函数 */ + callback: (...args: any[]) => any + ): void + /** [MapContext.openMapApp(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/map/MapContext.openMapApp.html) + * + * 需要基础库: `2.14.0` + * + * 在插件中使用:支持 + * + * 拉起地图APP选择导航。 */ + openMapApp(option: OpenMapAppOption): void + /** [MapContext.removeArc(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/map/MapContext.removeArc.html) + * + * 需要基础库: `2.22.0` + * + * 在插件中使用:支持 + * + * 删除弧线。工具侧暂未支持。 */ + removeArc(option: RemoveArcOption): void + /** [MapContext.removeCustomLayer(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/map/MapContext.removeCustomLayer.html) + * + * 需要基础库: `2.12.0` + * + * 在插件中使用:支持 + * + * 移除个性化图层。 */ + removeCustomLayer(option: RemoveCustomLayerOption): void + /** [MapContext.removeGroundOverlay(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/map/MapContext.removeGroundOverlay.html) + * + * 需要基础库: `2.14.0` + * + * 在插件中使用:支持 + * + * 移除自定义图片图层。 */ + removeGroundOverlay(option: RemoveGroundOverlayOption): void + /** [MapContext.removeMarkers(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/map/MapContext.removeMarkers.html) + * + * 需要基础库: `2.13.0` + * + * 在插件中使用:支持 + * + * 移除 marker。 */ + removeMarkers(option: RemoveMarkersOption): void + /** [MapContext.removeVisualLayer(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/map/MapContext.removeVisualLayer.html) + * + * 需要基础库: `2.20.1` + * + * 在插件中使用:支持 + * + * 移除可视化图层。 */ + removeVisualLayer(option: RemoveVisualLayerOption): void + /** [MapContext.setBoundary(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/map/MapContext.setBoundary.html) + * + * 需要基础库: `2.22.0` + * + * 在插件中使用:支持 + * + * 限制地图的显示范围。此接口同时会限制地图的最小缩放整数级别。 */ + setBoundary(option: SetBoundaryOption): void + /** [MapContext.setCenterOffset(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/map/MapContext.setCenterOffset.html) + * + * 需要基础库: `2.10.0` + * + * 在插件中使用:支持 + * + * 设置地图中心点偏移,向后向下为增长,屏幕比例范围(0.25~0.75),默认偏移为[0.5, 0.5] */ + setCenterOffset(option: SetCenterOffsetOption): void + /** [MapContext.setLocMarkerIcon(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/map/MapContext.setLocMarkerIcon.html) + * + * 需要基础库: `2.16.0` + * + * 在插件中使用:支持 + * + * 设置定位点图标,支持网络路径、本地路径、代码包路径 */ + setLocMarkerIcon(option: SetLocMarkerIconOption): void + /** [MapContext.toScreenLocation(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/map/MapContext.toScreenLocation.html) + * + * 需要基础库: `2.14.0` + * + * 在插件中使用:支持 + * + * 获取经纬度对应的屏幕坐标,坐标原点为地图左上角。 */ + toScreenLocation(option: ToScreenLocationOption): void + /** [MapContext.translateMarker(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/map/MapContext.translateMarker.html) + * + * 需要基础库: `1.2.0` + * + * 在插件中使用:支持 + * + * 平移marker,带动画。 */ + translateMarker(option: TranslateMarkerOption): void + /** [MapContext.updateGroundOverlay(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/map/MapContext.updateGroundOverlay.html) + * + * 需要基础库: `2.14.0` + * + * 在插件中使用:支持 + * + * 更新自定义图片图层。 */ + updateGroundOverlay(option: UpdateGroundOverlayOption): void + } + interface MediaAudioPlayer { + /** [Promise MediaAudioPlayer.addAudioSource([VideoDecoder](https://developers.weixin.qq.com/miniprogram/dev/api/media/video-decoder/VideoDecoder.html) source)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/MediaAudioPlayer.addAudioSource.html) + * + * 在插件中使用:支持 + * + * 添加音频源 */ + addAudioSource( + /** [VideoDecoder](https://developers.weixin.qq.com/miniprogram/dev/api/media/video-decoder/VideoDecoder.html) + * + * 视频解码器实例。作为音频源添加到音频播放器中 */ + source: VideoDecoder + ): Promise<any> + /** [Promise MediaAudioPlayer.destroy()](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/MediaAudioPlayer.destroy.html) + * + * 在插件中使用:支持 + * + * 销毁播放器 */ + destroy(): Promise<any> + /** [Promise MediaAudioPlayer.removeAudioSource([VideoDecoder](https://developers.weixin.qq.com/miniprogram/dev/api/media/video-decoder/VideoDecoder.html) source)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/MediaAudioPlayer.removeAudioSource.html) + * + * 在插件中使用:支持 + * + * 移除音频源 */ + removeAudioSource( + /** [VideoDecoder](https://developers.weixin.qq.com/miniprogram/dev/api/media/video-decoder/VideoDecoder.html) + * + * 视频解码器实例 */ + source: VideoDecoder + ): Promise<any> + /** [Promise MediaAudioPlayer.start()](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/MediaAudioPlayer.start.html) + * + * 在插件中使用:支持 + * + * 启动播放器 */ + start(): Promise<any> + /** [Promise MediaAudioPlayer.stop()](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/MediaAudioPlayer.stop.html) + * + * 在插件中使用:支持 + * + * 停止播放器 */ + stop(): Promise<any> + } + interface MediaContainer { + /** [MediaContainer.addTrack([MediaTrack](https://developers.weixin.qq.com/miniprogram/dev/api/media/video-processing/MediaTrack.html) track)](https://developers.weixin.qq.com/miniprogram/dev/api/media/video-processing/MediaContainer.addTrack.html) + * + * 需要基础库: `2.9.0` + * + * 在插件中使用:支持 + * + * 将音频或视频轨道添加到容器 */ + addTrack( + /** [MediaTrack](https://developers.weixin.qq.com/miniprogram/dev/api/media/video-processing/MediaTrack.html) + * + * 要添加的音频或视频轨道 */ + track: MediaTrack + ): void + /** [MediaContainer.destroy()](https://developers.weixin.qq.com/miniprogram/dev/api/media/video-processing/MediaContainer.destroy.html) + * + * 需要基础库: `2.9.0` + * + * 在插件中使用:支持 + * + * 将容器销毁,释放资源 */ + destroy(): void + /** [MediaContainer.export()](https://developers.weixin.qq.com/miniprogram/dev/api/media/video-processing/MediaContainer.export.html) + * + * 需要基础库: `2.9.0` + * + * 在插件中使用:支持 + * + * 将容器内的轨道合并并导出视频文件 */ + export(): void + /** [MediaContainer.extractDataSource(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/video-processing/MediaContainer.extractDataSource.html) + * + * 需要基础库: `2.9.0` + * + * 在插件中使用:支持 + * + * 将传入的视频源分离轨道。不会自动将轨道添加到待合成的容器里。 */ + extractDataSource(option: ExtractDataSourceOption): void + /** [MediaContainer.removeTrack([MediaTrack](https://developers.weixin.qq.com/miniprogram/dev/api/media/video-processing/MediaTrack.html) track)](https://developers.weixin.qq.com/miniprogram/dev/api/media/video-processing/MediaContainer.removeTrack.html) + * + * 需要基础库: `2.9.0` + * + * 在插件中使用:支持 + * + * 将音频或视频轨道从容器中移除 */ + removeTrack( + /** [MediaTrack](https://developers.weixin.qq.com/miniprogram/dev/api/media/video-processing/MediaTrack.html) + * + * 要移除的音频或视频轨道 */ + track: MediaTrack + ): void + } + interface MediaQueryObserver { + /** [MediaQueryObserver.disconnect()](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/MediaQueryObserver.disconnect.html) + * + * 在插件中使用:支持 + * + * 停止监听。回调函数将不再触发 */ + disconnect(): void + /** [MediaQueryObserver.observe(Object descriptor, function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/MediaQueryObserver.observe.html) + * + * 在插件中使用:支持 + * + * 开始监听页面 media query 变化情况 */ + observe( + /** media query 描述符 */ + descriptor: ObserveDescriptor, + /** 监听 media query 状态变化的回调函数 */ + callback: MediaQueryObserverObserveCallback + ): void + } + interface MediaRecorder { + /** [MediaRecorder.off(string eventName, function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/media/media-recorder/MediaRecorder.off.html) + * + * 需要基础库: `2.11.0` + * + * 在插件中使用:支持 + * + * 取消监听录制事件。当对应事件触发时,该回调函数不再执行。 */ + off( + /** 事件名 */ + eventName: string, + /** 事件触发时执行的回调函数 */ + callback: (...args: any[]) => any + ): void + /** [MediaRecorder.on(string eventName, function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/media/media-recorder/MediaRecorder.on.html) + * + * 需要基础库: `2.11.0` + * + * 在插件中使用:支持 + * + * 注册监听录制事件的回调函数。当对应事件触发时,回调函数会被执行。 */ + on( + /** 事件名 + * + * 参数 eventName 可选值: + * - 'start': 录制开始事件。; + * - 'stop': 录制结束事件。返回 {tempFilePath, duration, fileSize}; + * - 'pause': 录制暂停事件。; + * - 'resume': 录制继续事件。; + * - 'timeupdate': 录制时间更新事件。; */ + eventName: 'start' | 'stop' | 'pause' | 'resume' | 'timeupdate', + /** 事件触发时执行的回调函数 */ + callback: (...args: any[]) => any + ): void + /** [Promise MediaRecorder.destroy()](https://developers.weixin.qq.com/miniprogram/dev/api/media/media-recorder/MediaRecorder.destroy.html) + * + * 需要基础库: `2.11.0` + * + * 在插件中使用:支持 + * + * 销毁录制器 */ + destroy(): Promise<any> + /** [Promise MediaRecorder.pause()](https://developers.weixin.qq.com/miniprogram/dev/api/media/media-recorder/MediaRecorder.pause.html) + * + * 需要基础库: `2.11.0` + * + * 在插件中使用:支持 + * + * 暂停录制 */ + pause(): Promise<any> + /** [Promise MediaRecorder.requestFrame(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/media/media-recorder/MediaRecorder.requestFrame.html) + * + * 需要基础库: `2.11.0` + * + * 在插件中使用:支持 + * + * 请求下一帧录制,在 callback 里完成一帧渲染后开始录制当前帧 */ + requestFrame(callback: (...args: any[]) => any): Promise<any> + /** [Promise MediaRecorder.resume()](https://developers.weixin.qq.com/miniprogram/dev/api/media/media-recorder/MediaRecorder.resume.html) + * + * 需要基础库: `2.11.0` + * + * 在插件中使用:支持 + * + * 恢复录制 */ + resume(): Promise<any> + /** [Promise MediaRecorder.start()](https://developers.weixin.qq.com/miniprogram/dev/api/media/media-recorder/MediaRecorder.start.html) + * + * 需要基础库: `2.11.0` + * + * 在插件中使用:支持 + * + * 开始录制 */ + start(): Promise<any> + /** [Promise MediaRecorder.stop()](https://developers.weixin.qq.com/miniprogram/dev/api/media/media-recorder/MediaRecorder.stop.html) + * + * 需要基础库: `2.11.0` + * + * 在插件中使用:支持 + * + * 结束录制 */ + stop(): Promise<any> + } + interface MifareClassic { + /** [MifareClassic.close(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/MifareClassic.close.html) + * + * 需要基础库: `2.11.2` + * + * 在插件中使用:支持 + * + * 断开连接 */ + close(option?: NdefCloseOption): void + /** [MifareClassic.connect(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/MifareClassic.connect.html) + * + * 需要基础库: `2.11.2` + * + * 在插件中使用:支持 + * + * 连接 NFC 标签 */ + connect(option?: NdefConnectOption): void + /** [MifareClassic.getMaxTransceiveLength(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/MifareClassic.getMaxTransceiveLength.html) + * + * 需要基础库: `2.11.2` + * + * 在插件中使用:支持 + * + * 获取最大传输长度 */ + getMaxTransceiveLength(option?: GetMaxTransceiveLengthOption): void + /** [MifareClassic.isConnected(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/MifareClassic.isConnected.html) + * + * 需要基础库: `2.11.2` + * + * 在插件中使用:支持 + * + * 检查是否已连接 */ + isConnected(option?: IsConnectedOption): void + /** [MifareClassic.setTimeout(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/MifareClassic.setTimeout.html) + * + * 需要基础库: `2.11.2` + * + * 在插件中使用:支持 + * + * 设置超时时间 */ + setTimeout(option: SetTimeoutOption): void + /** [MifareClassic.transceive(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/MifareClassic.transceive.html) + * + * 需要基础库: `2.11.2` + * + * 在插件中使用:支持 + * + * 发送数据 */ + transceive(option: TransceiveOption): void + } + interface MifareUltralight { + /** [MifareUltralight.close(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/MifareUltralight.close.html) + * + * 需要基础库: `2.11.2` + * + * 在插件中使用:支持 + * + * 断开连接 */ + close(option?: NdefCloseOption): void + /** [MifareUltralight.connect(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/MifareUltralight.connect.html) + * + * 需要基础库: `2.11.2` + * + * 在插件中使用:支持 + * + * 连接 NFC 标签 */ + connect(option?: NdefConnectOption): void + /** [MifareUltralight.getMaxTransceiveLength(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/MifareUltralight.getMaxTransceiveLength.html) + * + * 需要基础库: `2.11.2` + * + * 在插件中使用:支持 + * + * 获取最大传输长度 */ + getMaxTransceiveLength(option?: GetMaxTransceiveLengthOption): void + /** [MifareUltralight.isConnected(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/MifareUltralight.isConnected.html) + * + * 需要基础库: `2.11.2` + * + * 在插件中使用:支持 + * + * 检查是否已连接 */ + isConnected(option?: IsConnectedOption): void + /** [MifareUltralight.setTimeout(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/MifareUltralight.setTimeout.html) + * + * 需要基础库: `2.11.2` + * + * 在插件中使用:支持 + * + * 设置超时时间 */ + setTimeout(option: SetTimeoutOption): void + /** [MifareUltralight.transceive(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/MifareUltralight.transceive.html) + * + * 需要基础库: `2.11.2` + * + * 在插件中使用:支持 + * + * 发送数据 */ + transceive(option: TransceiveOption): void + } + interface NFCAdapter { + /** [NFCAdapter.offDiscovered(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NFCAdapter.offDiscovered.html) +* +* 需要基础库: `2.11.2` +* +* 在插件中使用:支持 +* +* 移除 NFC Tag的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +NFCAdapter.onDiscovered(listener) +NFCAdapter.offDiscovered(listener) // 需传入与监听时同一个的函数对象 +``` */ + offDiscovered( + /** onDiscovered 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: OffDiscoveredCallback + ): void + /** [NFCAdapter.onDiscovered(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NFCAdapter.onDiscovered.html) + * + * 需要基础库: `2.11.2` + * + * 在插件中使用:支持 + * + * 监听 NFC Tag */ + onDiscovered( + /** 的监听函数 */ + listener: OnDiscoveredCallback + ): void + /** [NFCAdapter.startDiscovery(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NFCAdapter.startDiscovery.html) + * + * 需要基础库: `2.11.2` + * + * 在插件中使用:支持 */ + startDiscovery(option?: StartDiscoveryOption): void + /** [NFCAdapter.stopDiscovery(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NFCAdapter.stopDiscovery.html) + * + * 需要基础库: `2.11.2` + * + * 在插件中使用:支持 */ + stopDiscovery(option?: StopDiscoveryOption): void + /** [[IsoDep](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/IsoDep.html) NFCAdapter.getIsoDep()](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NFCAdapter.getIsoDep.html) + * + * 需要基础库: `2.11.2` + * + * 在插件中使用:支持 + * + * 获取IsoDep实例,实例支持ISO-DEP (ISO 14443-4)标准的读写 */ + getIsoDep(): IsoDep + /** [[MifareClassic](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/MifareClassic.html) NFCAdapter.getMifareClassic()](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NFCAdapter.getMifareClassic.html) + * + * 需要基础库: `2.11.2` + * + * 在插件中使用:支持 + * + * 获取MifareClassic实例,实例支持MIFARE Classic标签的读写 */ + getMifareClassic(): MifareClassic + /** [[MifareUltralight](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/MifareUltralight.html) NFCAdapter.getMifareUltralight()](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NFCAdapter.getMifareUltralight.html) + * + * 需要基础库: `2.11.2` + * + * 在插件中使用:支持 + * + * 获取MifareUltralight实例,实例支持MIFARE Ultralight标签的读写 */ + getMifareUltralight(): MifareUltralight + /** [[Ndef](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/Ndef.html) NFCAdapter.getNdef()](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NFCAdapter.getNdef.html) + * + * 需要基础库: `2.11.2` + * + * 在插件中使用:支持 + * + * 获取Ndef实例,实例支持对NDEF格式的NFC标签上的NDEF数据的读写 */ + getNdef(): Ndef + /** [[NfcA](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NfcA.html) NFCAdapter.getNfcA()](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NFCAdapter.getNfcA.html) + * + * 需要基础库: `2.11.2` + * + * 在插件中使用:支持 + * + * 获取NfcA实例,实例支持NFC-A (ISO 14443-3A)标准的读写 */ + getNfcA(): NfcA + /** [[NfcB](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NfcB.html) NFCAdapter.getNfcB()](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NFCAdapter.getNfcB.html) + * + * 需要基础库: `2.11.2` + * + * 在插件中使用:支持 + * + * 获取NfcB实例,实例支持NFC-B (ISO 14443-3B)标准的读写 */ + getNfcB(): NfcB + /** [[NfcF](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NfcF.html) NFCAdapter.getNfcF()](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NFCAdapter.getNfcF.html) + * + * 需要基础库: `2.11.2` + * + * 在插件中使用:支持 + * + * 获取NfcF实例,实例支持NFC-F (JIS 6319-4)标准的读写 */ + getNfcF(): NfcF + /** [[NfcV](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NfcV.html) NFCAdapter.getNfcV()](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NFCAdapter.getNfcV.html) + * + * 需要基础库: `2.11.2` + * + * 在插件中使用:支持 + * + * 获取NfcV实例,实例支持NFC-V (ISO 15693)标准的读写 */ + getNfcV(): NfcV + } + interface NFCError { + /** 错误信息 + * + * | 错误码 | 错误信息 | 说明 | + * | - | - | - | + * | 0 | ok | 正常 | + * | 13000 | | 当前设备不支持NFC | + * | 13001 | | 当前设备支持NFC,但系统NFC开关未开启 | + * | 13002 | | 当前设备支持NFC,但不支持HCE | + * | 13003 | | AID列表参数格式错误 | + * | 13004 | | 未设置微信为默认NFC支付应用 | + * | 13005 | | 返回的指令不合法 | + * | 13006 | | 注册AID失败 | */ errMsg: string + /** 错误码 + * + * | 错误码 | 错误信息 | 说明 | + * | - | - | - | + * | 0 | ok | 正常 | + * | 13000 | | 当前设备不支持NFC | + * | 13001 | | 当前设备支持NFC,但系统NFC开关未开启 | + * | 13002 | | 当前设备支持NFC,但不支持HCE | + * | 13003 | | AID列表参数格式错误 | + * | 13004 | | 未设置微信为默认NFC支付应用 | + * | 13005 | | 返回的指令不合法 | + * | 13006 | | 注册AID失败 | */ errCode: number + } + interface Ndef { + /** [Ndef.close(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/Ndef.close.html) + * + * 需要基础库: `2.11.2` + * + * 在插件中使用:支持 + * + * 断开连接 */ + close(option?: NdefCloseOption): void + /** [Ndef.connect(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/Ndef.connect.html) + * + * 需要基础库: `2.11.2` + * + * 在插件中使用:支持 + * + * 连接 NFC 标签 */ + connect(option?: NdefConnectOption): void + /** [Ndef.isConnected(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/Ndef.isConnected.html) + * + * 需要基础库: `2.11.2` + * + * 在插件中使用:支持 + * + * 检查是否已连接 */ + isConnected(option?: IsConnectedOption): void + /** [Ndef.offNdefMessage(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/Ndef.offNdefMessage.html) + * + * 需要基础库: `2.11.2` + * + * 在插件中使用:支持 + * + * 取消监听 Ndef 消息 */ + offNdefMessage(callback: (...args: any[]) => any): void + /** [Ndef.onNdefMessage(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/Ndef.onNdefMessage.html) + * + * 需要基础库: `2.11.2` + * + * 在插件中使用:支持 + * + * 监听 Ndef 消息 */ + onNdefMessage(callback: (...args: any[]) => any): void + /** [Ndef.setTimeout(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/Ndef.setTimeout.html) + * + * 需要基础库: `2.11.2` + * + * 在插件中使用:支持 + * + * 设置超时时间 */ + setTimeout(option: SetTimeoutOption): void + /** [Ndef.writeNdefMessage(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/Ndef.writeNdefMessage.html) + * + * 需要基础库: `2.11.2` + * + * 在插件中使用:支持 + * + * 重写 Ndef 标签内容 */ + writeNdefMessage(option: WriteNdefMessageOption): void + } + interface NfcA { + /** [NfcA.close(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NfcA.close.html) + * + * 需要基础库: `2.11.2` + * + * 在插件中使用:支持 + * + * 断开连接 */ + close(option?: NdefCloseOption): void + /** [NfcA.connect(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NfcA.connect.html) + * + * 需要基础库: `2.11.2` + * + * 在插件中使用:支持 + * + * 连接 NFC 标签 */ + connect(option?: NdefConnectOption): void + /** [NfcA.getAtqa(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NfcA.getAtqa.html) + * + * 需要基础库: `2.11.2` + * + * 在插件中使用:支持 + * + * 获取ATQA信息 */ + getAtqa(option?: GetAtqaOption): void + /** [NfcA.getMaxTransceiveLength(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NfcA.getMaxTransceiveLength.html) + * + * 需要基础库: `2.11.2` + * + * 在插件中使用:支持 + * + * 获取最大传输长度 */ + getMaxTransceiveLength(option?: GetMaxTransceiveLengthOption): void + /** [NfcA.getSak(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NfcA.getSak.html) + * + * 需要基础库: `2.11.2` + * + * 在插件中使用:支持 + * + * 获取SAK信息 */ + getSak(option?: GetSakOption): void + /** [NfcA.isConnected(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NfcA.isConnected.html) + * + * 需要基础库: `2.11.2` + * + * 在插件中使用:支持 + * + * 检查是否已连接 */ + isConnected(option?: IsConnectedOption): void + /** [NfcA.setTimeout(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NfcA.setTimeout.html) + * + * 需要基础库: `2.11.2` + * + * 在插件中使用:支持 + * + * 设置超时时间 */ + setTimeout(option: SetTimeoutOption): void + /** [NfcA.transceive(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NfcA.transceive.html) + * + * 需要基础库: `2.11.2` + * + * 在插件中使用:支持 + * + * 发送数据 */ + transceive(option: TransceiveOption): void + } + interface NfcB { + /** [NfcB.close(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NfcB.close.html) + * + * 需要基础库: `2.11.2` + * + * 在插件中使用:支持 + * + * 断开连接 */ + close(option?: NdefCloseOption): void + /** [NfcB.connect(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NfcB.connect.html) + * + * 需要基础库: `2.11.2` + * + * 在插件中使用:支持 + * + * 连接 NFC 标签 */ + connect(option?: NdefConnectOption): void + /** [NfcB.getMaxTransceiveLength(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NfcB.getMaxTransceiveLength.html) + * + * 需要基础库: `2.11.2` + * + * 在插件中使用:支持 + * + * 获取最大传输长度 */ + getMaxTransceiveLength(option?: GetMaxTransceiveLengthOption): void + /** [NfcB.isConnected(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NfcB.isConnected.html) + * + * 需要基础库: `2.11.2` + * + * 在插件中使用:支持 + * + * 检查是否已连接 */ + isConnected(option?: IsConnectedOption): void + /** [NfcB.setTimeout(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NfcB.setTimeout.html) + * + * 需要基础库: `2.11.2` + * + * 在插件中使用:支持 + * + * 设置超时时间 */ + setTimeout(option: SetTimeoutOption): void + /** [NfcB.transceive(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NfcB.transceive.html) + * + * 需要基础库: `2.11.2` + * + * 在插件中使用:支持 + * + * 发送数据 */ + transceive(option: TransceiveOption): void + } + interface NfcF { + /** [NfcF.close(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NfcF.close.html) + * + * 需要基础库: `2.11.2` + * + * 在插件中使用:支持 + * + * 断开连接 */ + close(option?: NdefCloseOption): void + /** [NfcF.connect(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NfcF.connect.html) + * + * 需要基础库: `2.11.2` + * + * 在插件中使用:支持 + * + * 连接 NFC 标签 */ + connect(option?: NdefConnectOption): void + /** [NfcF.getMaxTransceiveLength(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NfcF.getMaxTransceiveLength.html) + * + * 需要基础库: `2.11.2` + * + * 在插件中使用:支持 + * + * 获取最大传输长度 */ + getMaxTransceiveLength(option?: GetMaxTransceiveLengthOption): void + /** [NfcF.isConnected(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NfcF.isConnected.html) + * + * 需要基础库: `2.11.2` + * + * 在插件中使用:支持 + * + * 检查是否已连接 */ + isConnected(option?: IsConnectedOption): void + /** [NfcF.setTimeout(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NfcF.setTimeout.html) + * + * 需要基础库: `2.11.2` + * + * 在插件中使用:支持 + * + * 设置超时时间 */ + setTimeout(option: SetTimeoutOption): void + /** [NfcF.transceive(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NfcF.transceive.html) + * + * 需要基础库: `2.11.2` + * + * 在插件中使用:支持 + * + * 发送数据 */ + transceive(option: TransceiveOption): void + } + interface NfcV { + /** [NfcV.close(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NfcV.close.html) + * + * 需要基础库: `2.11.2` + * + * 在插件中使用:支持 + * + * 断开连接 */ + close(option?: NdefCloseOption): void + /** [NfcV.connect(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NfcV.connect.html) + * + * 需要基础库: `2.11.2` + * + * 在插件中使用:支持 + * + * 连接 NFC 标签 */ + connect(option?: NdefConnectOption): void + /** [NfcV.getMaxTransceiveLength(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NfcV.getMaxTransceiveLength.html) + * + * 需要基础库: `2.11.2` + * + * 在插件中使用:支持 + * + * 获取最大传输长度 */ + getMaxTransceiveLength(option?: GetMaxTransceiveLengthOption): void + /** [NfcV.isConnected(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NfcV.isConnected.html) + * + * 需要基础库: `2.11.2` + * + * 在插件中使用:支持 + * + * 检查是否已连接 */ + isConnected(option?: IsConnectedOption): void + /** [NfcV.setTimeout(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NfcV.setTimeout.html) + * + * 需要基础库: `2.11.2` + * + * 在插件中使用:支持 + * + * 设置超时时间 */ + setTimeout(option: SetTimeoutOption): void + /** [NfcV.transceive(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NfcV.transceive.html) + * + * 需要基础库: `2.11.2` + * + * 在插件中使用:支持 + * + * 发送数据 */ + transceive(option: TransceiveOption): void + } + interface Nfcrwerror { + /** 错误信息 + * + * | 错误码 | 错误信息 | 说明 | + * | - | - | - | + * | 13000 | 设备不支持NFC | | + * | 13001 | 系统NFC开关未打开 | | + * | 13010 | 未知错误 | | + * | 13019 | user is not authorized | 用户未授权 | + * | 13011 | invalid parameter | 参数无效 | + * | 13012 | parse NdefMessage failed | 将参数解析为NdefMessage失败 | + * | 13021 | NFC discovery already started | 已经开始NFC扫描 | + * | 13018 | NFC discovery has not started | 尝试在未开始NFC扫描时停止NFC扫描 | + * | 13022 | Tech already connected | 标签已经连接 | + * | 13023 | Tech has not connected | 尝试在未连接标签时断开连接 | + * | 13013 | NFC tag has not been discovered | 未扫描到NFC标签 | + * | 13014 | invalid tech | 无效的标签技术 | + * | 13015 | unavailable tech | 从标签上获取对应技术失败 | + * | 13024 | function not support | 当前标签技术不支持该功能 | + * | 13017 | system internal error | 相关读写操作失败 | + * | 13016 | connect fail | 连接失败 | */ errMsg: string + /** 错误码 + * + * | 错误码 | 错误信息 | 说明 | + * | - | - | - | + * | 13000 | 设备不支持NFC | | + * | 13001 | 系统NFC开关未打开 | | + * | 13010 | 未知错误 | | + * | 13019 | user is not authorized | 用户未授权 | + * | 13011 | invalid parameter | 参数无效 | + * | 13012 | parse NdefMessage failed | 将参数解析为NdefMessage失败 | + * | 13021 | NFC discovery already started | 已经开始NFC扫描 | + * | 13018 | NFC discovery has not started | 尝试在未开始NFC扫描时停止NFC扫描 | + * | 13022 | Tech already connected | 标签已经连接 | + * | 13023 | Tech has not connected | 尝试在未连接标签时断开连接 | + * | 13013 | NFC tag has not been discovered | 未扫描到NFC标签 | + * | 13014 | invalid tech | 无效的标签技术 | + * | 13015 | unavailable tech | 从标签上获取对应技术失败 | + * | 13024 | function not support | 当前标签技术不支持该功能 | + * | 13017 | system internal error | 相关读写操作失败 | + * | 13016 | connect fail | 连接失败 | */ errCode: number + } + interface NodesRef { + /** [[SelectorQuery](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/SelectorQuery.html) NodesRef.boundingClientRect(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/NodesRef.boundingClientRect.html) +* +* 在插件中使用:支持 +* +* 添加节点的布局位置的查询请求。相对于显示区域,以像素为单位。其功能类似于 DOM 的 `getBoundingClientRect`。返回 `NodesRef` 对应的 `SelectorQuery`。 +* +* **示例代码** +* +* ```js +Page({ + getRect () { + wx.createSelectorQuery().select('#the-id').boundingClientRect(function(rect){ + rect.id // 节点的ID + rect.dataset // 节点的dataset + rect.left // 节点的左边界坐标 + rect.right // 节点的右边界坐标 + rect.top // 节点的上边界坐标 + rect.bottom // 节点的下边界坐标 + rect.width // 节点的宽度 + rect.height // 节点的高度 + }).exec() + }, + getAllRects () { + wx.createSelectorQuery().selectAll('.a-class').boundingClientRect(function(rects){ + rects.forEach(function(rect){ + rect.id // 节点的ID + rect.dataset // 节点的dataset + rect.left // 节点的左边界坐标 + rect.right // 节点的右边界坐标 + rect.top // 节点的上边界坐标 + rect.bottom // 节点的下边界坐标 + rect.width // 节点的宽度 + rect.height // 节点的高度 + }) + }).exec() + } +}) +``` */ + boundingClientRect( + /** 回调函数,在执行 `SelectorQuery.exec` 方法后,节点信息会在 `callback` 中返回。 */ + callback?: BoundingClientRectCallback + ): SelectorQuery + /** [[SelectorQuery](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/SelectorQuery.html) NodesRef.context(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/NodesRef.context.html) +* +* 需要基础库: `2.4.2` +* +* 在插件中使用:支持 +* +* 添加节点的 Context 对象查询请求。目前支持 [VideoContext](https://developers.weixin.qq.com/miniprogram/dev/api/media/video/VideoContext.html)、[CanvasContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.html)、[LivePlayerContext](https://developers.weixin.qq.com/miniprogram/dev/api/media/live/LivePlayerContext.html)、[EditorContext](https://developers.weixin.qq.com/miniprogram/dev/api/media/editor/EditorContext.html)和 [MapContext](https://developers.weixin.qq.com/miniprogram/dev/api/media/map/MapContext.html) 的获取。 +* +* **示例代码** +* +* ```js +Page({ + getContext () { + wx.createSelectorQuery().select('.the-video-class').context(function(res){ + console.log(res.context) // 节点对应的 Context 对象。如:选中的节点是 <video> 组件,那么此处即返回 VideoContext 对象 + }).exec() + } +}) +``` */ + context( + /** 回调函数,在执行 `SelectorQuery.exec` 方法后,返回节点信息。 */ + callback?: ContextCallback + ): SelectorQuery + /** [[SelectorQuery](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/SelectorQuery.html) NodesRef.fields(Object fields, function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/NodesRef.fields.html) +* +* 在插件中使用:支持 +* +* 获取节点的相关信息。需要获取的字段在fields中指定。返回值是 `nodesRef` 对应的 `selectorQuery` +* +* **注意** +* +* computedStyle 的优先级高于 size,当同时在 computedStyle 里指定了 width/height 和传入了 size: true,则优先返回 computedStyle 获取到的 width/height。 +* +* **示例代码** +* +* ```js +Page({ + getFields () { + wx.createSelectorQuery().select('#the-id').fields({ + dataset: true, + size: true, + scrollOffset: true, + properties: ['scrollX', 'scrollY'], + computedStyle: ['margin', 'backgroundColor'], + context: true, + }, function (res) { + res.dataset // 节点的dataset + res.width // 节点的宽度 + res.height // 节点的高度 + res.scrollLeft // 节点的水平滚动位置 + res.scrollTop // 节点的竖直滚动位置 + res.scrollX // 节点 scroll-x 属性的当前值 + res.scrollY // 节点 scroll-y 属性的当前值 + // 此处返回指定要返回的样式名 + res.margin + res.backgroundColor + res.context // 节点对应的 Context 对象 + }).exec() + } +}) +``` */ + fields( + fields: Fields, + /** 回调函数 */ + callback?: FieldsCallback + ): SelectorQuery + /** [[SelectorQuery](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/SelectorQuery.html) NodesRef.node(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/NodesRef.node.html) +* +* 需要基础库: `2.7.0` +* +* 在插件中使用:支持 +* +* 获取 Node 节点实例。目前支持 [Canvas](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/Canvas.html) 和 [ScrollViewContext](https://developers.weixin.qq.com/miniprogram/dev/api/ui/scroll/ScrollViewContext.html) 的获取。 +* +* **示例代码** +* +* ```js +Page({ + getNode() { + wx.createSelectorQuery().select('.canvas').node(function(res){ + console.log(res.node) // 节点对应的 Canvas 实例。 + }).exec() + } +}) +``` */ + node( + /** 回调函数,在执行 `SelectorQuery.exec` 方法后,返回节点信息。 */ + callback?: NodeCallback + ): SelectorQuery + /** [[SelectorQuery](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/SelectorQuery.html) NodesRef.scrollOffset(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/NodesRef.scrollOffset.html) +* +* 在插件中使用:支持 +* +* 添加节点的滚动位置查询请求。以像素为单位。节点必须是 `scroll-view` 或者 `viewport`,返回 `NodesRef` 对应的 `SelectorQuery`。 +* +* **示例代码** +* +* ```js +Page({ + getScrollOffset () { + wx.createSelectorQuery().selectViewport().scrollOffset(function(res){ + res.id // 节点的ID + res.dataset // 节点的dataset + res.scrollLeft // 节点的水平滚动位置 + res.scrollTop // 节点的竖直滚动位置 + }).exec() + } +}) +``` */ + scrollOffset( + /** 回调函数,在执行 `SelectorQuery.exec` 方法后,节点信息会在 `callback` 中返回。 */ + callback?: ScrollOffsetCallback + ): SelectorQuery + } + interface OffscreenCanvas { + /** [[Image](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/Image.html) OffscreenCanvas.createImage()](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/OffscreenCanvas.createImage.html) + * + * 需要基础库: `2.7.3` + * + * 在插件中使用:需要基础库 `2.16.1` + * + * 创建一个图片对象。支持在 2D Canvas 和 WebGL Canvas 下使用, 但不支持混用 2D 和 WebGL 的方法。 + * + * **** + * + * 注意不允许混用 webgl 和 2d 画布创建的图片对象,使用时请注意尽量使用 canvas 自身的 `createImage` 创建图片对象。 */ + createImage(): Image + /** [[RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) OffscreenCanvas.getContext(string contextType)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/OffscreenCanvas.getContext.html) + * + * 需要基础库: `2.7.0` + * + * 在插件中使用:需要基础库 `2.16.1` + * + * 该方法返回 OffscreenCanvas 的绘图上下文 + * + * **** + * + * 注意不允许混用 webgl 和 2d 绘图上下文,传入的 contextType 必须要与 `wx.createOffscreenCanvas` 传入的 type 类型一致。 */ + getContext( + /** 绘图上下文类型,需要与 createOffscreenCanvas 时传入的 type 一致 + * + * 参数 contextType 可选值: + * - 'webgl': webgl类型上下文; + * - '2d': 2d类型上下文; */ + contextType: 'webgl' | '2d' + ): any + } + interface OpenSyncError { + /** 错误信息 + * + * | 错误信息 | 说明 | + * | - | - | + * | fail no such file or directory "${filePath}" | 上级目录不存在 | */ errMsg: string + /** 错误码 + * + * | 错误信息 | 说明 | + * | - | - | + * | fail no such file or directory "${filePath}" | 上级目录不存在 | */ errCode: number + } + interface Performance { + /** [Array.<[PerformanceEntry](https://developers.weixin.qq.com/miniprogram/dev/api/base/performance/PerformanceEntry.html)> Performance.getEntries()](https://developers.weixin.qq.com/miniprogram/dev/api/base/performance/Performance.getEntries.html) + * + * 需要基础库: `2.11.0` + * + * 在插件中使用:不支持 + * + * 该方法返回当前缓冲区中的所有性能数据 */ + getEntries(): PerformanceEntry[] + /** [Array.<[PerformanceEntry](https://developers.weixin.qq.com/miniprogram/dev/api/base/performance/PerformanceEntry.html)> Performance.getEntriesByName(string name, string entryType)](https://developers.weixin.qq.com/miniprogram/dev/api/base/performance/Performance.getEntriesByName.html) + * + * 需要基础库: `2.11.0` + * + * 在插件中使用:不支持 + * + * 获取当前缓冲区中所有名称为 [name] 且类型为 [entryType] 的性能数据 */ + getEntriesByName( + /** 名称 */ + name: string, + /** 类型 */ + entryType?: string + ): PerformanceEntry[] + /** [Array.<[PerformanceEntry](https://developers.weixin.qq.com/miniprogram/dev/api/base/performance/PerformanceEntry.html)> Performance.getEntriesByType(string entryType)](https://developers.weixin.qq.com/miniprogram/dev/api/base/performance/Performance.getEntriesByType.html) + * + * 需要基础库: `2.11.0` + * + * 在插件中使用:不支持 + * + * 获取当前缓冲区中所有类型为 [entryType] 的性能数据 */ + getEntriesByType( + /** 类型 */ + entryType: string + ): PerformanceEntry[] + /** [Performance.setBufferSize(number size)](https://developers.weixin.qq.com/miniprogram/dev/api/base/performance/Performance.setBufferSize.html) + * + * 需要基础库: `2.11.0` + * + * 在插件中使用:不支持 + * + * 设置缓冲区大小,默认缓冲 30 条性能数据 */ + setBufferSize(size: number): void + /** [[PerformanceObserver](https://developers.weixin.qq.com/miniprogram/dev/api/base/performance/PerformanceObserver.html) Performance.createObserver(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/base/performance/Performance.createObserver.html) + * + * 需要基础库: `2.11.0` + * + * 在插件中使用:不支持 + * + * 创建全局性能事件监听器 */ + createObserver( + /** 回调函数 */ + callback: (...args: any[]) => any + ): PerformanceObserver + } + interface PerformanceObserver { + /** [PerformanceObserver.disconnect()](https://developers.weixin.qq.com/miniprogram/dev/api/base/performance/PerformanceObserver.disconnect.html) + * + * 需要基础库: `2.11.0` + * + * 在插件中使用:不支持 + * + * 停止监听 */ + disconnect(): void + /** [PerformanceObserver.observe(Object options)](https://developers.weixin.qq.com/miniprogram/dev/api/base/performance/PerformanceObserver.observe.html) + * + * 需要基础库: `2.11.0` + * + * 在插件中使用:不支持 + * + * 开始监听 */ + observe( + /** 设置 type 监听单个类型的指标,设置 entryTypes 监听多个类型指标。 */ + options: ObserveOption + ): void + } + interface ReadCompressedFileSyncError { + /** 错误信息 + * + * | 错误信息 | 说明 | + * | - | - | + * | fail decompress fail | 指定的 compressionAlgorithm 与文件实际压缩格式不符 | + * | fail no such file or directory, open ${filePath} | 指定的 filePath 所在目录不存在 | + * | fail permission denied, open ${dirPath} | 指定的 filePath 路径没有读权限 | */ errMsg: string + /** 错误码 + * + * | 错误信息 | 说明 | + * | - | - | + * | fail decompress fail | 指定的 compressionAlgorithm 与文件实际压缩格式不符 | + * | fail no such file or directory, open ${filePath} | 指定的 filePath 所在目录不存在 | + * | fail permission denied, open ${dirPath} | 指定的 filePath 路径没有读权限 | */ errCode: number + } + interface ReadSyncError { + /** 错误信息 + * + * | 错误信息 | 说明 | + * | - | - | + * | bad file descriptor | 无效的文件描述符 | + * | fail permission denied | 指定的 fd 路径没有读权限 | + * | fail the value of "offset" is out of range | 传入的 offset 不合法 | + * | fail the value of "length" is out of range | 传入的 length 不合法 | + * | fail sdcard not mounted | android sdcard 挂载失败 | */ errMsg: string + /** 错误码 + * + * | 错误信息 | 说明 | + * | - | - | + * | bad file descriptor | 无效的文件描述符 | + * | fail permission denied | 指定的 fd 路径没有读权限 | + * | fail the value of "offset" is out of range | 传入的 offset 不合法 | + * | fail the value of "length" is out of range | 传入的 length 不合法 | + * | fail sdcard not mounted | android sdcard 挂载失败 | */ errCode: number + } + interface RealtimeLogManager { + /** [Object RealtimeLogManager.getCurrentState()](https://developers.weixin.qq.com/miniprogram/dev/api/base/debug/RealtimeLogManager.getCurrentState.html) + * + * 需要基础库: `2.19.4` + * + * 在插件中使用:不支持 + * + * 实时日志会将一定时间间隔内缓存的日志聚合上报,如果该时间内缓存的内容超出限制,则会被丢弃。此方法可以获取当前缓存剩余空间。 + * + * > 注意:基础库内部在对日志进行上报时会补充一些结构化数据,如果遇到上报溢出的情况也会补充警告日志,所以此方法获取到的当前占用信息会比预期的大一些。 */ + getCurrentState(): CurrentState + /** [RealtimeLogManager.addFilterMsg(string msg)](https://developers.weixin.qq.com/miniprogram/dev/api/base/debug/RealtimeLogManager.addFilterMsg.html) + * + * 需要基础库: `2.8.1` + * + * 在插件中使用:不支持 + * + * 添加过滤关键字,暂不支持在插件使用 */ + addFilterMsg( + /** 是setFilterMsg的添加接口。用于设置多个过滤关键字。 */ + msg: string + ): void + /** [RealtimeLogManager.error()](https://developers.weixin.qq.com/miniprogram/dev/api/base/debug/RealtimeLogManager.error.html) + * + * 需要基础库: `2.7.1` + * + * 在插件中使用:不支持 + * + * 写 error 日志,暂不支持在插件使用 */ + error( + /** 日志内容,可以有任意多个。每次调用的参数的总大小不超过5Kb */ + ...args: any[] + ): void + /** [RealtimeLogManager.in(Page pageInstance)](https://developers.weixin.qq.com/miniprogram/dev/api/base/debug/RealtimeLogManager.in.html) + * + * 需要基础库: `2.9.1` + * + * 在插件中使用:不支持 + * + * 设置实时日志page参数所在的页面,暂不支持在插件使用 */ + in( + /** page实例 */ + pageInstance: Page.TrivialInstance + ): void + /** [RealtimeLogManager.info()](https://developers.weixin.qq.com/miniprogram/dev/api/base/debug/RealtimeLogManager.info.html) + * + * 需要基础库: `2.7.1` + * + * 在插件中使用:不支持 + * + * 写 info 日志,暂不支持在插件使用 */ + info( + /** 日志内容,可以有任意多个。每次调用的参数的总大小不超过5Kb */ + ...args: any[] + ): void + /** [RealtimeLogManager.setFilterMsg(string msg)](https://developers.weixin.qq.com/miniprogram/dev/api/base/debug/RealtimeLogManager.setFilterMsg.html) + * + * 需要基础库: `2.7.3` + * + * 在插件中使用:不支持 + * + * 设置过滤关键字,暂不支持在插件使用 */ + setFilterMsg( + /** 过滤关键字,最多不超过1Kb,可以在小程序管理后台根据设置的内容搜索得到对应的日志。 */ + msg: string + ): void + /** [RealtimeLogManager.warn()](https://developers.weixin.qq.com/miniprogram/dev/api/base/debug/RealtimeLogManager.warn.html) + * + * 需要基础库: `2.7.1` + * + * 在插件中使用:不支持 + * + * 写 warn 日志,暂不支持在插件使用 */ + warn( + /** 日志内容,可以有任意多个。每次调用的参数的总大小不超过5Kb */ + ...args: any[] + ): void + /** [[RealtimeTagLogManager](https://developers.weixin.qq.com/miniprogram/dev/api/base/debug/RealtimeTagLogManager.html) RealtimeLogManager.tag(string tagName)](https://developers.weixin.qq.com/miniprogram/dev/api/base/debug/RealtimeLogManager.tag.html) + * + * 需要基础库: `2.16.0` + * + * 在插件中使用:需要基础库 `2.16.0` + * + * 获取给定标签的日志管理器实例,目前只支持在插件使用 */ + tag( + /** 标签名 */ + tagName: string + ): RealtimeTagLogManager + } + interface RealtimeTagLogManager { + /** [RealtimeTagLogManager.addFilterMsg(string msg)](https://developers.weixin.qq.com/miniprogram/dev/api/base/debug/RealtimeTagLogManager.addFilterMsg.html) + * + * 需要基础库: `2.16.0` + * + * 在插件中使用:需要基础库 `2.16.0` + * + * 添加过滤关键字 */ + addFilterMsg( + /** 是setFilterMsg的添加接口。用于设置多个过滤关键字。 */ + msg: string + ): void + /** [RealtimeTagLogManager.error(string key, Object|Array.<any>|number|string value)](https://developers.weixin.qq.com/miniprogram/dev/api/base/debug/RealtimeTagLogManager.error.html) + * + * 需要基础库: `2.16.0` + * + * 在插件中使用:需要基础库 `2.16.0` + * + * 写 error 日志 */ + error( + /** 日志的 key */ + key: string, + /** 日志的值,每次调用的参数的总大小不超过5Kb */ + value: IAnyObject | any[] | number | string + ): void + /** [RealtimeTagLogManager.info(string key, Object|Array.<any>|number|string value)](https://developers.weixin.qq.com/miniprogram/dev/api/base/debug/RealtimeTagLogManager.info.html) + * + * 需要基础库: `2.16.0` + * + * 在插件中使用:需要基础库 `2.16.0` + * + * 写 info 日志 */ + info( + /** 日志的 key */ + key: string, + /** 日志的值,每次调用的参数的总大小不超过5Kb */ + value: IAnyObject | any[] | number | string + ): void + /** [RealtimeTagLogManager.setFilterMsg(string msg)](https://developers.weixin.qq.com/miniprogram/dev/api/base/debug/RealtimeTagLogManager.setFilterMsg.html) + * + * 需要基础库: `2.16.0` + * + * 在插件中使用:需要基础库 `2.16.0` + * + * 设置过滤关键字 */ + setFilterMsg( + /** 过滤关键字,最多不超过1Kb,可以在小程序管理后台根据设置的内容搜索得到对应的日志。 */ + msg: string + ): void + /** [RealtimeTagLogManager.warn(string key, Object|Array.<any>|number|string value)](https://developers.weixin.qq.com/miniprogram/dev/api/base/debug/RealtimeTagLogManager.warn.html) + * + * 需要基础库: `2.16.0` + * + * 在插件中使用:需要基础库 `2.16.0` + * + * 写 warn 日志 */ + warn( + /** 日志的 key */ + key: string, + /** 日志的值,每次调用的参数的总大小不超过5Kb */ + value: IAnyObject | any[] | number | string + ): void + } + interface RecorderManager { + /** [RecorderManager.onError(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/recorder/RecorderManager.onError.html) + * + * 在插件中使用:支持 + * + * 监听录音错误事件 */ + onError( + /** 录音错误事件的监听函数 */ + listener: UDPSocketOnErrorCallback + ): void + /** [RecorderManager.onFrameRecorded(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/recorder/RecorderManager.onFrameRecorded.html) + * + * 在插件中使用:支持 + * + * 监听已录制完指定帧大小的文件事件。如果设置了 frameSize,则会回调此事件。 */ + onFrameRecorded( + /** 已录制完指定帧大小的文件事件的监听函数 */ + listener: OnFrameRecordedCallback + ): void + /** [RecorderManager.onInterruptionBegin(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/recorder/RecorderManager.onInterruptionBegin.html) + * + * 需要基础库: `2.3.0` + * + * 在插件中使用:支持 + * + * 监听录音因为受到系统占用而被中断开始事件。以下场景会触发此事件:微信语音聊天、微信视频聊天。此事件触发后,录音会被暂停。pause 事件在此事件后触发 */ + onInterruptionBegin( + /** 录音因为受到系统占用而被中断开始事件的监听函数 */ + listener: OnInterruptionBeginCallback + ): void + /** [RecorderManager.onInterruptionEnd(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/recorder/RecorderManager.onInterruptionEnd.html) + * + * 需要基础库: `2.3.0` + * + * 在插件中使用:支持 + * + * 监听录音中断结束事件。在收到 interruptionBegin 事件之后,小程序内所有录音会暂停,收到此事件之后才可再次录音成功。 */ + onInterruptionEnd( + /** 录音中断结束事件的监听函数 */ + listener: OnInterruptionEndCallback + ): void + /** [RecorderManager.onPause(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/recorder/RecorderManager.onPause.html) + * + * 在插件中使用:支持 + * + * 监听录音暂停事件 */ + onPause( + /** 录音暂停事件的监听函数 */ + listener: OnPauseCallback + ): void + /** [RecorderManager.onResume(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/recorder/RecorderManager.onResume.html) + * + * 在插件中使用:支持 + * + * 监听录音继续事件 */ + onResume( + /** 录音继续事件的监听函数 */ + listener: OnResumeCallback + ): void + /** [RecorderManager.onStart(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/recorder/RecorderManager.onStart.html) + * + * 在插件中使用:支持 + * + * 监听录音开始事件 */ + onStart( + /** 录音开始事件的监听函数 */ + listener: OnStartCallback + ): void + /** [RecorderManager.onStop(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/recorder/RecorderManager.onStop.html) + * + * 在插件中使用:支持 + * + * 监听录音结束事件 */ + onStop( + /** 录音结束事件的监听函数 */ + listener: RecorderManagerOnStopCallback + ): void + /** [RecorderManager.pause()](https://developers.weixin.qq.com/miniprogram/dev/api/media/recorder/RecorderManager.pause.html) + * + * 在插件中使用:支持 + * + * 暂停录音 */ + pause(): void + /** [RecorderManager.resume()](https://developers.weixin.qq.com/miniprogram/dev/api/media/recorder/RecorderManager.resume.html) + * + * 在插件中使用:支持 + * + * 继续录音 */ + resume(): void + /** [RecorderManager.start(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/recorder/RecorderManager.start.html) + * + * 在插件中使用:支持 + * + * 开始录音 + * + * **采样率与编码码率限制** + * + * 每种采样率有对应的编码码率范围有效值,设置不合法的采样率或编码码率会导致录音失败,具体对应关系如下表。 + * + * | 采样率 | 编码码率 | + * | ------ | -------------- | + * | 8000 | 16000 ~ 48000 | + * | 11025 | 16000 ~ 48000 | + * | 12000 | 24000 ~ 64000 | + * | 16000 | 24000 ~ 96000 | + * | 22050 | 32000 ~ 128000 | + * | 24000 | 32000 ~ 128000 | + * | 32000 | 48000 ~ 192000 | + * | 44100 | 64000 ~ 320000 | + * | 48000 | 64000 ~ 320000 | */ + start(option: RecorderManagerStartOption): void + /** [RecorderManager.stop()](https://developers.weixin.qq.com/miniprogram/dev/api/media/recorder/RecorderManager.stop.html) + * + * 在插件中使用:支持 + * + * 停止录音 */ + stop(): void + } + interface RequestTask { + /** [RequestTask.abort()](https://developers.weixin.qq.com/miniprogram/dev/api/network/request/RequestTask.abort.html) + * + * 需要基础库: `1.4.0` + * + * 在插件中使用:支持 + * + * 中断请求任务 */ + abort(): void + /** [RequestTask.offChunkReceived(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/request/RequestTask.offChunkReceived.html) +* +* 需要基础库: `2.20.1` +* +* 在插件中使用:支持 +* +* 移除 Transfer-Encoding Chunk Received 事件的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +RequestTask.onChunkReceived(listener) +RequestTask.offChunkReceived(listener) // 需传入与监听时同一个的函数对象 +``` */ + offChunkReceived( + /** onChunkReceived 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: OffChunkReceivedCallback + ): void + /** [RequestTask.offHeadersReceived(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/request/RequestTask.offHeadersReceived.html) +* +* 需要基础库: `2.1.0` +* +* 在插件中使用:支持 +* +* 移除 HTTP Response Header 事件的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +RequestTask.onHeadersReceived(listener) +RequestTask.offHeadersReceived(listener) // 需传入与监听时同一个的函数对象 +``` */ + offHeadersReceived( + /** onHeadersReceived 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: OffHeadersReceivedCallback + ): void + /** [RequestTask.onChunkReceived(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/request/RequestTask.onChunkReceived.html) + * + * 需要基础库: `2.20.1` + * + * 在插件中使用:支持 + * + * 监听 Transfer-Encoding Chunk Received 事件。当接收到新的chunk时触发。 */ + onChunkReceived( + /** Transfer-Encoding Chunk Received 事件的监听函数 */ + listener: OnChunkReceivedCallback + ): void + /** [RequestTask.onHeadersReceived(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/request/RequestTask.onHeadersReceived.html) + * + * 需要基础库: `2.1.0` + * + * 在插件中使用:支持 + * + * 监听 HTTP Response Header 事件。会比请求完成事件更早 */ + onHeadersReceived( + /** HTTP Response Header 事件的监听函数 */ + listener: OnHeadersReceivedCallback + ): void + } + interface RewardedVideoAd { + /** [Promise RewardedVideoAd.load()](https://developers.weixin.qq.com/miniprogram/dev/api/ad/RewardedVideoAd.load.html) + * + * 在插件中使用:不支持 + * + * 加载激励视频广告。 */ + load(): Promise<any> + /** [Promise RewardedVideoAd.show()](https://developers.weixin.qq.com/miniprogram/dev/api/ad/RewardedVideoAd.show.html) + * + * 在插件中使用:不支持 + * + * 显示激励视频广告。激励视频广告将从屏幕下方推入。 */ + show(): Promise<any> + /** [RewardedVideoAd.destroy()](https://developers.weixin.qq.com/miniprogram/dev/api/ad/RewardedVideoAd.destroy.html) + * + * 需要基础库: `2.8.0` + * + * 在插件中使用:不支持 + * + * 销毁激励视频广告实例。 */ + destroy(): void + /** [RewardedVideoAd.offClose(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/ad/RewardedVideoAd.offClose.html) +* +* 在插件中使用:不支持 +* +* 移除用户点击 `关闭广告` 按钮的事件的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +RewardedVideoAd.onClose(listener) +RewardedVideoAd.offClose(listener) // 需传入与监听时同一个的函数对象 +``` */ + offClose( + /** onClose 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: RewardedVideoAdOffCloseCallback + ): void + /** [RewardedVideoAd.offError(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/ad/RewardedVideoAd.offError.html) +* +* 在插件中使用:不支持 +* +* 移除激励视频错误事件的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +RewardedVideoAd.onError(listener) +RewardedVideoAd.offError(listener) // 需传入与监听时同一个的函数对象 +``` */ + offError( + /** onError 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: RewardedVideoAdOffErrorCallback + ): void + /** [RewardedVideoAd.offLoad(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/ad/RewardedVideoAd.offLoad.html) +* +* 在插件中使用:不支持 +* +* 移除激励视频广告加载事件的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +RewardedVideoAd.onLoad(listener) +RewardedVideoAd.offLoad(listener) // 需传入与监听时同一个的函数对象 +``` */ + offLoad( + /** onLoad 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: OffLoadCallback + ): void + /** [RewardedVideoAd.onClose(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/ad/RewardedVideoAd.onClose.html) + * + * 在插件中使用:不支持 + * + * 监听用户点击 `关闭广告` 按钮的事件。 */ + onClose( + /** 用户点击 `关闭广告` 按钮的事件的监听函数 */ + listener: RewardedVideoAdOnCloseCallback + ): void + /** [RewardedVideoAd.onError(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/ad/RewardedVideoAd.onError.html) + * + * 在插件中使用:不支持 + * + * 监听激励视频错误事件。 + * + * **错误码信息与解决方案表** + * + * 错误码是通过onError获取到的错误信息。调试期间,可以通过异常返回来捕获信息。 + * 在小程序发布上线之后,如果遇到异常问题,可以在[“运维中心“](https://mp.weixin.qq.com/)里面搜寻错误日志,还可以针对异常返回加上适当的监控信息。 + * + * | 代码 | 异常情况 | 理由 | 解决方案 | + * | ------ | -------------- | --------------- | -------------------------- | + * | 1000 | 后端错误调用失败 | 该项错误不是开发者的异常情况 | 一般情况下忽略一段时间即可恢复。 | + * | 1001 | 参数错误 | 使用方法错误 | 可以前往developers.weixin.qq.com确认具体教程(小程序和小游戏分别有各自的教程,可以在顶部选项中,“设计”一栏的右侧进行切换。| + * | 1002 | 广告单元无效 | 可能是拼写错误、或者误用了其他APP的广告ID | 请重新前往mp.weixin.qq.com确认广告位ID。 | + * | 1003 | 内部错误 | 该项错误不是开发者的异常情况 | 一般情况下忽略一段时间即可恢复。| + * | 1004 | 无适合的广告 | 广告不是每一次都会出现,这次没有出现可能是由于该用户不适合浏览广告 | 属于正常情况,且开发者需要针对这种情况做形态上的兼容。 | + * | 1005 | 广告组件审核中 | 你的广告正在被审核,无法展现广告 | 请前往mp.weixin.qq.com确认审核状态,且开发者需要针对这种情况做形态上的兼容。| + * | 1006 | 广告组件被驳回 | 你的广告审核失败,无法展现广告 | 请前往mp.weixin.qq.com确认审核状态,且开发者需要针对这种情况做形态上的兼容。| + * | 1007 | 广告组件被驳回 | 你的广告能力已经被封禁,封禁期间无法展现广告 | 请前往mp.weixin.qq.com确认小程序广告封禁状态。 | + * | 1008 | 广告单元已关闭 | 该广告位的广告能力已经被关闭 | 请前往mp.weixin.qq.com重新打开对应广告位的展现。| */ + onError( + /** 激励视频错误事件的监听函数 */ + listener: RewardedVideoAdOnErrorCallback + ): void + /** [RewardedVideoAd.onLoad(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/ad/RewardedVideoAd.onLoad.html) + * + * 在插件中使用:不支持 + * + * 监听激励视频广告加载事件。 */ + onLoad( + /** 激励视频广告加载事件的监听函数 */ + listener: OnLoadCallback + ): void + } + interface ScrollViewContext { + /** [ScrollViewContext.scrollIntoView(string selector)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/scroll/ScrollViewContext.scrollIntoView.html) + * + * 需要基础库: `2.14.4` + * + * 在插件中使用:支持 + * + * 滚动至指定位置 */ + scrollIntoView( + /** 元素选择器 */ + selector: string + ): void + /** [ScrollViewContext.scrollTo(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/scroll/ScrollViewContext.scrollTo.html) + * + * 需要基础库: `2.14.4` + * + * 在插件中使用:支持 + * + * 滚动至指定位置 */ + scrollTo(option: ScrollToOption): void + } + interface SelectorQuery { + /** [[NodesRef](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/NodesRef.html) SelectorQuery.exec(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/SelectorQuery.exec.html) + * + * 在插件中使用:支持 + * + * 执行所有的请求。请求结果按请求次序构成数组,在callback的第一个参数中返回。 */ + exec( + /** 回调函数 */ + callback?: (...args: any[]) => any + ): NodesRef + /** [[NodesRef](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/NodesRef.html) SelectorQuery.select(string selector)](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/SelectorQuery.select.html) + * + * 在插件中使用:支持 + * + * 在当前页面下选择第一个匹配选择器 `selector` 的节点。返回一个 `NodesRef` 对象实例,可以用于获取节点信息。 + * + * **selector 语法** + * + * selector类似于 CSS 的选择器,但仅支持下列语法。 + * + * - ID选择器:#the-id + * - class选择器(可以连续指定多个):.a-class.another-class + * - 子元素选择器:.the-parent > .the-child + * - 后代选择器:.the-ancestor .the-descendant + * - 跨自定义组件的后代选择器:.the-ancestor >>> .the-descendant + * - 多选择器的并集:#a-node, .some-other-nodes */ + select( + /** 选择器 */ + selector: string + ): NodesRef + /** [[NodesRef](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/NodesRef.html) SelectorQuery.selectAll(string selector)](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/SelectorQuery.selectAll.html) + * + * 在插件中使用:支持 + * + * 在当前页面下选择匹配选择器 selector 的所有节点。 + * + * **selector 语法** + * + * selector类似于 CSS 的选择器,但仅支持下列语法。 + * + * - ID选择器:#the-id + * - class选择器(可以连续指定多个):.a-class.another-class + * - 子元素选择器:.the-parent > .the-child + * - 后代选择器:.the-ancestor .the-descendant + * - 跨自定义组件的后代选择器:.the-ancestor >>> .the-descendant + * - 多选择器的并集:#a-node, .some-other-nodes */ + selectAll( + /** 选择器 */ + selector: string + ): NodesRef + /** [[NodesRef](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/NodesRef.html) SelectorQuery.selectViewport()](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/SelectorQuery.selectViewport.html) + * + * 在插件中使用:支持 + * + * 选择显示区域。可用于获取显示区域的尺寸、滚动位置等信息。 */ + selectViewport(): NodesRef + /** [[SelectorQuery](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/SelectorQuery.html) SelectorQuery.in(Component component)](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/SelectorQuery.in.html) +* +* 需要基础库: `1.6.0` +* +* 在插件中使用:支持 +* +* 将选择器的选取范围更改为自定义组件 `component` 内。(初始时,选择器仅选取页面范围的节点,不会选取任何自定义组件中的节点)。 +* +* **示例代码** +* +* ```js +Component({ + queryMultipleNodes (){ + const query = wx.createSelectorQuery().in(this) + query.select('#the-id').boundingClientRect(function(res){ + res.top // 这个组件内 #the-id 节点的上边界坐标 + }).exec() + } +}) +``` */ + in( + /** 自定义组件实例 */ + component: Component.TrivialInstance | Page.TrivialInstance + ): SelectorQuery + } + interface SocketTask { + /** [SocketTask.close(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/network/websocket/SocketTask.close.html) + * + * 在插件中使用:支持 + * + * 关闭 WebSocket 连接 */ + close(option: SocketTaskCloseOption): void + /** [SocketTask.onClose(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/websocket/SocketTask.onClose.html) + * + * 在插件中使用:支持 + * + * 监听 WebSocket 连接关闭事件 */ + onClose( + /** WebSocket 连接关闭事件的监听函数 */ + listener: SocketTaskOnCloseCallback + ): void + /** [SocketTask.onError(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/websocket/SocketTask.onError.html) + * + * 在插件中使用:支持 + * + * 监听 WebSocket 错误事件 */ + onError( + /** WebSocket 错误事件的监听函数 */ + listener: UDPSocketOnErrorCallback + ): void + /** [SocketTask.onMessage(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/websocket/SocketTask.onMessage.html) + * + * 在插件中使用:支持 + * + * 监听 WebSocket 接受到服务器的消息事件 */ + onMessage( + /** WebSocket 接受到服务器的消息事件的监听函数 */ + listener: SocketTaskOnMessageCallback + ): void + /** [SocketTask.onOpen(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/websocket/SocketTask.onOpen.html) + * + * 在插件中使用:支持 + * + * 监听 WebSocket 连接打开事件 */ + onOpen( + /** WebSocket 连接打开事件的监听函数 */ + listener: OnOpenCallback + ): void + /** [SocketTask.send(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/network/websocket/SocketTask.send.html) + * + * 在插件中使用:支持 + * + * 通过 WebSocket 连接发送数据 */ + send(option: SocketTaskSendOption): void + } + interface Stats { + /** [boolean Stats.isDirectory()](https://developers.weixin.qq.com/miniprogram/dev/api/file/Stats.isDirectory.html) + * + * 在插件中使用:需要基础库 `2.19.2` + * + * 判断当前文件是否一个目录 */ + isDirectory(): boolean + /** [boolean Stats.isFile()](https://developers.weixin.qq.com/miniprogram/dev/api/file/Stats.isFile.html) + * + * 在插件中使用:需要基础库 `2.19.2` + * + * 判断当前文件是否一个普通文件 */ + isFile(): boolean + } + interface TCPSocket { + /** [TCPSocket.bindWifi(Object options)](https://developers.weixin.qq.com/miniprogram/dev/api/network/tcp/TCPSocket.bindWifi.html) + * + * 需要基础库: `2.25.0` + * + * 在插件中使用:不支持 + * + * 将 TCP Socket 绑定到当前 wifi 网络,成功后会触发 onBindWifi 事件(仅安卓支持) */ + bindWifi(options: BindWifiOption): void + /** [TCPSocket.close()](https://developers.weixin.qq.com/miniprogram/dev/api/network/tcp/TCPSocket.close.html) + * + * 在插件中使用:不支持 + * + * 关闭连接 */ + close(): void + /** [TCPSocket.connect(Object options)](https://developers.weixin.qq.com/miniprogram/dev/api/network/tcp/TCPSocket.connect.html) + * + * 在插件中使用:不支持 + * + * 在给定的套接字上启动连接 */ + connect(options: TCPSocketConnectOption): void + /** [TCPSocket.offBindWifi(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/tcp/TCPSocket.offBindWifi.html) +* +* 需要基础库: `2.25.0` +* +* 在插件中使用:不支持 +* +* 移除当一个 socket 绑定当前 wifi 网络成功时触发该事件的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +TCPSocket.onBindWifi(listener) +TCPSocket.offBindWifi(listener) // 需传入与监听时同一个的函数对象 +``` */ + offBindWifi( + /** onBindWifi 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: OffBindWifiCallback + ): void + /** [TCPSocket.offClose(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/tcp/TCPSocket.offClose.html) +* +* 在插件中使用:不支持 +* +* 移除一旦 socket 完全关闭就发出该事件的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +TCPSocket.onClose(listener) +TCPSocket.offClose(listener) // 需传入与监听时同一个的函数对象 +``` */ + offClose( + /** onClose 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: UDPSocketOffCloseCallback + ): void + /** [TCPSocket.offConnect(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/tcp/TCPSocket.offConnect.html) +* +* 在插件中使用:不支持 +* +* 移除当一个 socket 连接成功建立的时候触发该事件的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +TCPSocket.onConnect(listener) +TCPSocket.offConnect(listener) // 需传入与监听时同一个的函数对象 +``` */ + offConnect( + /** onConnect 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: OffConnectCallback + ): void + /** [TCPSocket.offError(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/tcp/TCPSocket.offError.html) +* +* 在插件中使用:不支持 +* +* 移除当错误发生时触发的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +TCPSocket.onError(listener) +TCPSocket.offError(listener) // 需传入与监听时同一个的函数对象 +``` */ + offError( + /** onError 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: UDPSocketOffErrorCallback + ): void + /** [TCPSocket.offMessage(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/tcp/TCPSocket.offMessage.html) +* +* 在插件中使用:不支持 +* +* 移除当接收到数据的时触发该事件的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +TCPSocket.onMessage(listener) +TCPSocket.offMessage(listener) // 需传入与监听时同一个的函数对象 +``` */ + offMessage( + /** onMessage 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: TCPSocketOffMessageCallback + ): void + /** [TCPSocket.onBindWifi(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/tcp/TCPSocket.onBindWifi.html) + * + * 需要基础库: `2.25.0` + * + * 在插件中使用:不支持 + * + * 监听当一个 socket 绑定当前 wifi 网络成功时触发该事件 */ + onBindWifi( + /** 当一个 socket 绑定当前 wifi 网络成功时触发该事件的监听函数 */ + listener: OnBindWifiCallback + ): void + /** [TCPSocket.onClose(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/tcp/TCPSocket.onClose.html) + * + * 在插件中使用:不支持 + * + * 监听一旦 socket 完全关闭就发出该事件 */ + onClose( + /** 一旦 socket 完全关闭就发出该事件的监听函数 */ + listener: UDPSocketOnCloseCallback + ): void + /** [TCPSocket.onConnect(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/tcp/TCPSocket.onConnect.html) + * + * 在插件中使用:不支持 + * + * 监听当一个 socket 连接成功建立的时候触发该事件 */ + onConnect( + /** 当一个 socket 连接成功建立的时候触发该事件的监听函数 */ + listener: OnConnectCallback + ): void + /** [TCPSocket.onError(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/tcp/TCPSocket.onError.html) + * + * 在插件中使用:不支持 + * + * 监听当错误发生时触发 */ + onError( + /** 的监听函数 */ + listener: UDPSocketOnErrorCallback + ): void + /** [TCPSocket.onMessage(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/tcp/TCPSocket.onMessage.html) + * + * 在插件中使用:不支持 + * + * 监听当接收到数据的时触发该事件 */ + onMessage( + /** 当接收到数据的时触发该事件的监听函数 */ + listener: TCPSocketOnMessageCallback + ): void + /** [TCPSocket.write(string|ArrayBuffer data)](https://developers.weixin.qq.com/miniprogram/dev/api/network/tcp/TCPSocket.write.html) + * + * 在插件中使用:不支持 + * + * 在 socket 上发送数据 */ + write( + /** 要发送的数据 */ + data: string | ArrayBuffer + ): void + } + interface TruncateSyncError { + /** 错误信息 + * + * | 错误信息 | 说明 | + * | - | - | + * | fail no such file or directory, open ${filePath} | 指定的 filePath 所在目录不存在 | + * | fail illegal operation on a directory, open "${filePath}" | 指定的 filePath 是一个已经存在的目录 | + * | fail permission denied, open ${dirPath} | 指定的 filePath 路径没有写权限 | + * | fail the maximum size of the file storage limit is exceeded | 存储空间不足 | + * | fail sdcard not mounted | android sdcard 挂载失败 | */ errMsg: string + /** 错误码 + * + * | 错误信息 | 说明 | + * | - | - | + * | fail no such file or directory, open ${filePath} | 指定的 filePath 所在目录不存在 | + * | fail illegal operation on a directory, open "${filePath}" | 指定的 filePath 是一个已经存在的目录 | + * | fail permission denied, open ${dirPath} | 指定的 filePath 路径没有写权限 | + * | fail the maximum size of the file storage limit is exceeded | 存储空间不足 | + * | fail sdcard not mounted | android sdcard 挂载失败 | */ errCode: number + } + interface UDPSocket { + /** [UDPSocket.close()](https://developers.weixin.qq.com/miniprogram/dev/api/network/udp/UDPSocket.close.html) + * + * 在插件中使用:需要基础库 `2.11.1` + * + * 关闭 UDP Socket 实例,相当于销毁。 在关闭之后,UDP Socket 实例不能再发送消息,每次调用 `UDPSocket.send` 将会触发错误事件,并且 message 事件回调函数也不会再也执行。在 `UDPSocket` 实例被创建后将被 Native 强引用,保证其不被 GC。在 `UDPSocket.close` 后将解除对其的强引用,让 UDPSocket 实例遵从 GC。 */ + close(): void + /** [UDPSocket.connect(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/network/udp/UDPSocket.connect.html) + * + * 需要基础库: `2.15.0` + * + * 在插件中使用:需要基础库 `2.11.1` + * + * 预先连接到指定的 IP 和 port,需要配合 write 方法一起使用 */ + connect(option: UDPSocketConnectOption): void + /** [UDPSocket.offClose(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/udp/UDPSocket.offClose.html) +* +* 在插件中使用:需要基础库 `2.11.1` +* +* 移除关闭事件的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +UDPSocket.onClose(listener) +UDPSocket.offClose(listener) // 需传入与监听时同一个的函数对象 +``` */ + offClose( + /** onClose 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: UDPSocketOffCloseCallback + ): void + /** [UDPSocket.offError(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/udp/UDPSocket.offError.html) +* +* 在插件中使用:需要基础库 `2.11.1` +* +* 移除错误事件的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +UDPSocket.onError(listener) +UDPSocket.offError(listener) // 需传入与监听时同一个的函数对象 +``` */ + offError( + /** onError 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: UDPSocketOffErrorCallback + ): void + /** [UDPSocket.offListening(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/udp/UDPSocket.offListening.html) +* +* 在插件中使用:需要基础库 `2.11.1` +* +* 移除开始监听数据包消息的事件的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +UDPSocket.onListening(listener) +UDPSocket.offListening(listener) // 需传入与监听时同一个的函数对象 +``` */ + offListening( + /** onListening 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: OffListeningCallback + ): void + /** [UDPSocket.offMessage(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/udp/UDPSocket.offMessage.html) +* +* 在插件中使用:需要基础库 `2.11.1` +* +* 移除收到消息的事件的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +UDPSocket.onMessage(listener) +UDPSocket.offMessage(listener) // 需传入与监听时同一个的函数对象 +``` */ + offMessage( + /** onMessage 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: UDPSocketOffMessageCallback + ): void + /** [UDPSocket.onClose(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/udp/UDPSocket.onClose.html) + * + * 在插件中使用:需要基础库 `2.11.1` + * + * 监听关闭事件 */ + onClose( + /** 关闭事件的监听函数 */ + listener: UDPSocketOnCloseCallback + ): void + /** [UDPSocket.onError(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/udp/UDPSocket.onError.html) + * + * 在插件中使用:需要基础库 `2.11.1` + * + * 监听错误事件 */ + onError( + /** 错误事件的监听函数 */ + listener: UDPSocketOnErrorCallback + ): void + /** [UDPSocket.onListening(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/udp/UDPSocket.onListening.html) + * + * 在插件中使用:需要基础库 `2.11.1` + * + * 监听开始监听数据包消息的事件 */ + onListening( + /** 开始监听数据包消息的事件的监听函数 */ + listener: OnListeningCallback + ): void + /** [UDPSocket.onMessage(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/udp/UDPSocket.onMessage.html) + * + * 在插件中使用:需要基础库 `2.11.1` + * + * 监听收到消息的事件 */ + onMessage( + /** 收到消息的事件的监听函数 */ + listener: UDPSocketOnMessageCallback + ): void + /** [UDPSocket.send(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/network/udp/UDPSocket.send.html) + * + * 在插件中使用:需要基础库 `2.11.1` + * + * 向指定的 IP 和 port 发送消息。基础库 2.9.0 起支持广播 (指定地址为 255.255.255.255)。 */ + send(option: UDPSocketSendOption): void + /** [UDPSocket.setTTL(number ttl)](https://developers.weixin.qq.com/miniprogram/dev/api/network/udp/UDPSocket.setTTL.html) + * + * 需要基础库: `2.18.0` + * + * 在插件中使用:支持 + * + * 设置 IP_TTL 套接字选项,用于设置一个 IP 数据包传输时允许的最大跳步数 */ + setTTL( + /** ttl 参数可以是 0 到 255 之间 */ + ttl: number + ): void + /** [UDPSocket.write()](https://developers.weixin.qq.com/miniprogram/dev/api/network/udp/UDPSocket.write.html) + * + * 需要基础库: `2.15.0` + * + * 在插件中使用:需要基础库 `2.11.1` + * + * 用法与 send 方法相同,如果没有预先调用 connect 则与 send 无差异(注意即使调用了 connect 也需要在本接口填入地址和端口参数) */ + write(): void + /** [number UDPSocket.bind(number port)](https://developers.weixin.qq.com/miniprogram/dev/api/network/udp/UDPSocket.bind.html) + * + * 在插件中使用:需要基础库 `2.11.1` + * + * 绑定一个系统随机分配的可用端口,或绑定一个指定的端口号 */ + bind( + /** 需要基础库: `2.9.0` + * + * 指定要绑定的端口号,不传则返回系统随机分配的可用端口 */ + port?: number + ): number + } + interface UpdateManager { + /** [UpdateManager.applyUpdate()](https://developers.weixin.qq.com/miniprogram/dev/api/base/update/UpdateManager.applyUpdate.html) + * + * 在插件中使用:不支持 + * + * 强制小程序重启并使用新版本。在小程序新版本下载完成后(即收到 `onUpdateReady` 回调)调用。 + * + * **示例代码** + * + * [示例代码](https://developers.weixin.qq.com/miniprogram/dev/api/base/update/UpdateManager.html#示例代码) */ + applyUpdate(): void + /** [UpdateManager.onCheckForUpdate(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/base/update/UpdateManager.onCheckForUpdate.html) + * + * 在插件中使用:不支持 + * + * 监听向微信后台请求检查更新结果事件。微信在小程序每次启动(包括热启动)时自动检查更新,不需由开发者主动触发。 + * + * **示例代码** + * + * [示例代码](https://developers.weixin.qq.com/miniprogram/dev/api/base/update/UpdateManager.html#示例代码) */ + onCheckForUpdate( + /** 向微信后台请求检查更新结果事件的监听函数 */ + listener: OnCheckForUpdateCallback + ): void + /** [UpdateManager.onUpdateFailed(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/base/update/UpdateManager.onUpdateFailed.html) + * + * 在插件中使用:不支持 + * + * 监听小程序更新失败事件。小程序有新版本,客户端主动触发下载(无需开发者触发),下载失败(可能是网络原因等)后回调 + * + * **示例代码** + * + * [示例代码](https://developers.weixin.qq.com/miniprogram/dev/api/base/update/UpdateManager.html#示例代码) */ + onUpdateFailed( + /** 小程序更新失败事件的监听函数 */ + listener: OnUpdateFailedCallback + ): void + /** [UpdateManager.onUpdateReady(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/base/update/UpdateManager.onUpdateReady.html) + * + * 在插件中使用:不支持 + * + * 监听小程序有版本更新事件。客户端主动触发下载(无需开发者触发),下载成功后回调 + * + * **示例代码** + * + * [示例代码](https://developers.weixin.qq.com/miniprogram/dev/api/base/update/UpdateManager.html#示例代码) */ + onUpdateReady( + /** 小程序有版本更新事件的监听函数 */ + listener: OnUpdateReadyCallback + ): void + } + interface UploadTask { + /** [UploadTask.abort()](https://developers.weixin.qq.com/miniprogram/dev/api/network/upload/UploadTask.abort.html) + * + * 需要基础库: `1.4.0` + * + * 在插件中使用:支持 + * + * 中断上传任务 */ + abort(): void + /** [UploadTask.offHeadersReceived(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/upload/UploadTask.offHeadersReceived.html) +* +* 需要基础库: `2.1.0` +* +* 在插件中使用:支持 +* +* 移除 HTTP Response Header 事件的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +UploadTask.onHeadersReceived(listener) +UploadTask.offHeadersReceived(listener) // 需传入与监听时同一个的函数对象 +``` */ + offHeadersReceived( + /** onHeadersReceived 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: OffHeadersReceivedCallback + ): void + /** [UploadTask.offProgressUpdate(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/upload/UploadTask.offProgressUpdate.html) +* +* 需要基础库: `2.1.0` +* +* 在插件中使用:支持 +* +* 移除上传进度变化事件的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +UploadTask.onProgressUpdate(listener) +UploadTask.offProgressUpdate(listener) // 需传入与监听时同一个的函数对象 +``` */ + offProgressUpdate( + /** onProgressUpdate 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: UploadTaskOffProgressUpdateCallback + ): void + /** [UploadTask.onHeadersReceived(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/upload/UploadTask.onHeadersReceived.html) + * + * 需要基础库: `2.1.0` + * + * 在插件中使用:支持 + * + * 监听 HTTP Response Header 事件。会比请求完成事件更早 */ + onHeadersReceived( + /** HTTP Response Header 事件的监听函数 */ + listener: OnHeadersReceivedCallback + ): void + /** [UploadTask.onProgressUpdate(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/upload/UploadTask.onProgressUpdate.html) + * + * 需要基础库: `1.4.0` + * + * 在插件中使用:支持 + * + * 监听上传进度变化事件 */ + onProgressUpdate( + /** 上传进度变化事件的监听函数 */ + listener: UploadTaskOnProgressUpdateCallback + ): void + } + interface UserCryptoManager { + /** [UserCryptoManager.getLatestUserKey(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/base/crypto/UserCryptoManager.getLatestUserKey.html) +* +* 需要基础库: `2.17.3` +* +* 在插件中使用:不支持 +* +* 获取最新的用户加密密钥 +* +* **示例代码** +* +* ```js +const userCryptoManager = wx.getUserCryptoManager() +userCryptoManager.getLatestUserKey({ + success: res => { + const {encryptKey, iv, version, expireTime} = res + console.log(encryptKey, iv, version, expireTime) + } +}) +``` */ + getLatestUserKey(option?: GetLatestUserKeyOption): void + /** [UserCryptoManager.getRandomValues(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/base/crypto/UserCryptoManager.getRandomValues.html) +* +* 需要基础库: `2.17.3` +* +* 在插件中使用:不支持 +* +* 获取密码学安全随机数 +* +* **示例代码** +* +* ```js +wx.getRandomValues({ + length: 6 // 生成 6 个字节长度的随机数, + success: res => { + console.log(wx.arrayBufferToBase64(res.randomValues)) // 转换为 base64 字符串后打印 + } +}) +``` */ + getRandomValues(option: GetRandomValuesOption): void + } + interface VKCamera { + /** [Float32Array VKCamera.getProjectionMatrix(number near, number far)](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/VKCamera.getProjectionMatrix.html) + * + * 需要基础库: `2.20.0` + * + * 在插件中使用:需要基础库 `2.20.0` + * + * 获取投影矩阵 */ + getProjectionMatrix( + /** 近视点 */ + near: number, + /** 远视点 */ + far: number + ): Float32Array + } + interface VKFrame { + /** [ArrayBuffer VKFrame.getCameraBuffer(number width, number height)](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/VKFrame.getCameraBuffer.html) + * + * 需要基础库: `2.24.0` + * + * 在插件中使用:不支持 + * + * 获取当前帧 rgba buffer。目前仅iOS端支持。按 aspect-fill 规则裁剪,此接口要求在创建 VKSession 对象时必须传入 gl 参数。此接口仅建议拿来做帧分析使用,上屏请使用 getCameraTexture 来代替。 */ + getCameraBuffer( + /** 宽度,受系统限制,必须是 16 的整数倍 */ + width: number, + /** 高度 */ + height: number + ): ArrayBuffer + /** [Float32Array VKFrame.getDisplayTransform()](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/VKFrame.getDisplayTransform.html) + * + * 需要基础库: `2.20.0` + * + * 在插件中使用:需要基础库 `2.20.0` + * + * 获取纹理调整矩阵。默认获取到的纹理是未经裁剪调整的纹理,此矩阵可用于在着色器中根据帧对象尺寸对纹理进行裁剪。 */ + getDisplayTransform(): Float32Array + /** [Object VKFrame.getCameraTexture(WebGLRenderingContext gl)](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/VKFrame.getCameraTexture.html) + * + * 需要基础库: `2.20.0` + * + * 在插件中使用:需要基础库 `2.20.0` + * + * 获取当前帧纹理,目前只支持 YUV 纹理。 */ + getCameraTexture( + /** 画布 */ + gl: WebGLRenderingContext + ): YUVTextureRes + } + interface VKSession { + /** [Array.<Object> VKSession.getAllMarker()](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/VKSession.getAllMarker.html) + * + * 需要基础库: `2.24.5` + * + * 在插件中使用:需要基础库 `2.24.5` + * + * 获取所有 marker,要求调 [wx.createVKSession](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/wx.createVKSession.html) 时传入的 track.marker 为 true */ + getAllMarker(): VKMarker[] + /** [Array.<Object> VKSession.getAllOSDMarker()](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/VKSession.getAllOSDMarker.html) + * + * 需要基础库: `2.24.5` + * + * 在插件中使用:需要基础库 `2.24.5` + * + * 获取所有 OSD marker,要求调 [wx.createVKSession](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/wx.createVKSession.html) 时传入的 track.OSD 为 true */ + getAllOSDMarker(): VKMarker[] + /** [Array.<Object> VKSession.hitTest(number x, number y, Object reset)](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/VKSession.hitTest.html) + * + * 需要基础库: `2.20.0` + * + * 在插件中使用:需要基础库 `2.20.0` + * + * 触摸检测,v1 版本只支持单平面(即 hitTest 生成一次平面后,后续 hitTest 均不会再生成平面,而是以之前生成的平面为基础进行检测)。如果需要重新识别其他平面,可以在调用此方法时将 reset 参数置为 true。 */ + hitTest( + /** 相对视窗的横坐标,取值范围为 [0, 1],0 为左边缘,1 为右边缘 */ + x: number, + /** 相对视窗的纵坐标,取值范围为 [0, 1],0 为上边缘,1 为下边缘 */ + y: number, + /** 是否需要重新识别其他平面,v2 版本不再需要此参数 */ + reset: IAnyObject + ): HitTestRes[] + /** [VKSession.cancelAnimationFrame(number requestID)](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/VKSession.cancelAnimationFrame.html) + * + * 需要基础库: `2.20.0` + * + * 在插件中使用:需要基础库 `2.20.0` + * + * 取消由 requestAnimationFrame 添加到计划中的动画帧请求。 */ + cancelAnimationFrame(requestID: number): void + /** [VKSession.destroy()](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/VKSession.destroy.html) + * + * 需要基础库: `2.20.0` + * + * 在插件中使用:需要基础库 `2.20.0` + * + * 销毁会话。 */ + destroy(): void + /** [VKSession.detectFace(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/VKSession.detectFace.html) + * + * 需要基础库: `2.25.0` + * + * 在插件中使用:需要基础库 `2.25.0` + * + * 静态图像人脸关键点检测。当 wx.createVKSession 参数传入 {track: {face: {mode: 2} } } 时可用。用法详情[指南文档](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/visionkit/face.html)。安卓微信8.0.25开始支持,iOS微信8.0.24开始支持。 */ + detectFace(option: DetectFaceOption): void + /** [VKSession.off(string eventName, function fn)](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/VKSession.off.html) + * + * 需要基础库: `2.20.0` + * + * 在插件中使用:需要基础库 `2.20.0` + * + * 取消监听会话事件。 */ + off( + /** 事件名称 */ + eventName: string, + /** 事件监听函数 */ + fn: (...args: any[]) => any + ): void + /** [VKSession.on(string eventName, function fn)](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/VKSession.on.html) + * + * 需要基础库: `2.20.0` + * + * 在插件中使用:需要基础库 `2.20.0` + * + * 监听会话事件。 */ + on( + /** 事件名称 + * + * 参数 eventName 可选值: + * - 'resize': 相机尺寸变化事件,回调参数为相机尺寸; + * - 'addAnchors': 增加 anchor 事件,回调参数为 [VKPlaneAnchor](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/VKPlaneAnchor.html)/[VKMarkerAnchor](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/VKMarkerAnchor.html)/[VKOSDAnchor](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/VKOSDAnchor.html) 列表(只有v2版本支持); + * - 'updateAnchors': 更新 anchor 事件,回调参数为 [VKPlaneAnchor](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/VKPlaneAnchor.html)/[VKMarkerAnchor](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/VKMarkerAnchor.html)/[VKOSDAnchor](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/VKOSDAnchor.html) 列表(只有v2版本支持) 或 [VKFaceAnchor](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/VKFaceAnchor.html) 列表(v1、v2都支持); + * - 'removeAnchors': 删除 anchor 事件,回调参数为 [VKPlaneAnchor](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/VKPlaneAnchor.html)/[VKMarkerAnchor](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/VKMarkerAnchor.html)/[VKOSDAnchor](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/VKOSDAnchor.html) 列表(只有v2版本支持) 或 [VKFaceAnchor](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/VKFaceAnchor.html) 列表(v1、v2都支持); */ + eventName: + | 'resize' + | 'addAnchors' + | 'updateAnchors' + | 'removeAnchors', + /** 事件监听函数 */ + fn: (...args: any[]) => any + ): void + /** [VKSession.removeMarker(number markerId)](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/VKSession.removeMarker.html) + * + * 需要基础库: `2.24.5` + * + * 在插件中使用:需要基础库 `2.24.5` + * + * 删除一个 marker,要求调 [wx.createVKSession](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/wx.createVKSession.html) 时传入的 track.marker 为 true */ + removeMarker( + /** marker id */ + markerId: number + ): void + /** [VKSession.removeOSDMarker(number markerId)](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/VKSession.removeOSDMarker.html) + * + * 需要基础库: `2.24.5` + * + * 在插件中使用:需要基础库 `2.24.5` + * + * 删除一个 OSD marker,要求调 [wx.createVKSession](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/wx.createVKSession.html) 时传入的 track.OSD 为 true */ + removeOSDMarker( + /** marker id */ + markerId: number + ): void + /** [VKSession.start(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/VKSession.start.html) + * + * 需要基础库: `2.20.0` + * + * 在插件中使用:需要基础库 `2.20.0` + * + * 开启会话。 */ + start( + /** 开启会话回调 */ + callback: VKSessionStartCallback + ): void + /** [VKSession.stop()](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/VKSession.stop.html) + * + * 需要基础库: `2.20.0` + * + * 在插件中使用:需要基础库 `2.20.0` + * + * 停止会话。 */ + stop(): void + /** [VKSession.updateOSDThreshold(number threshold)](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/VKSession.updateOSDThreshold.html) + * + * 需要基础库: `2.24.5` + * + * 在插件中使用:需要基础库 `2.24.5` + * + * 更新 OSD 识别精确度,要求调 [wx.createVKSession](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/wx.createVKSession.html) 时传入的 track.OSD 为 true */ + updateOSDThreshold( + /** 阈值 */ + threshold: number + ): void + /** [[VKFrame](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/VKFrame.html) VKSession.getVKFrame(number width, number height)](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/VKSession.getVKFrame.html) + * + * 需要基础库: `2.20.0` + * + * 在插件中使用:需要基础库 `2.20.0` + * + * 获取帧对象,每调用一次都会触发一次帧分析过程。 */ + getVKFrame( + /** 宽度 */ + width: number, + /** 高度 */ + height: number + ): VKFrame + /** [number VKSession.addMarker(string path)](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/VKSession.addMarker.html) + * + * 需要基础库: `2.24.5` + * + * 在插件中使用:需要基础库 `2.24.5` + * + * 添加一个 marker,要求调 [wx.createVKSession](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/wx.createVKSession.html) 时传入的 track.marker 为 true + * + * **使用提示** + * + * 注意事项: + * 1. 使用 addMarker 接口之前,需要在 createVKSession 的时候声明开启 marker 跟踪。即 wx.createVKSession({ track: { marker: true } }) + * 2. 可以添加多个 marker 图片,但不能重复添加相同的 marker 图片。 + * + * 对传入的图片有如下要求: + * 1. 格式:jpg/png 格式三通道彩图或者 1 通道灰度图 + * 2. 分辨率:尺寸在 480x480 ~ 1920x1920 之间,建议为 1080 分辨率 + * 3. 宽高比:在 1:1 ~ 16:9 之间,要求尽量方正,避免狭长的图片 + * 4. 质量:目标图像为平面模型,需要占画面主体,避免大面积留白,建议用扫描件 + * + * 示例: + * + * <img width="500px" src="https://res.wx.qq.com/op_res/sJPS5gttY4yQq-CmG9crrtaOpjb6Yc6mDhJKdUmrIpmtbWBMfAUAFavtKT6-tEZIh-8zT8tfBJBtvH048ge5Vw" alt="image.png" /> + * + * 建议: + * + * 1. 图片具有丰富的细节 + * 2. 避免重复单一的纹理,例如: + * + * <img width="500px" src="https://res.wx.qq.com/op_res/VfNcS-M6nPWWXq_CJ483Dq3iLsNXMvLiM6Wb5ZHOrVVGR2u5ixbQlbiSSuNHzVcMQQY5V0dvnlyOGihUIbyTvA" alt="image.png" /> + * <br> + * <img width="500px" src="https://res.wx.qq.com/op_res/VfNcS-M6nPWWXq_CJ483Dq-_lR2j4eOi23IOJ2LHFQY_PWufbx3s3uROgLi_flJMHQA8DNvlebs9UwumozPlXg" alt="image.png" /> + * <br> + * <img width="500px" src="https://res.wx.qq.com/op_res/VfNcS-M6nPWWXq_CJ483Dr9IaSPF18UPnz4KrbAhGW9pIb8oWxzHgmClGIRZK59N4gUnJh69yoQW1TFGqce8ew" alt="image.png" /> + * <br> + * + * 3. 避免使用柔和平滑边缘的纹理及大量渐变图像,例如: + * + * <img width="500px" src="https://res.wx.qq.com/op_res/rg0BkiSl-LPBybgJtcQCq6DPj88qSVwHFZiumbE0IMq9ibzbnhjewzUSa-n5_VgF_lF9g07FFHHYyrY14KTSfA" alt="image.png" /> + * + * 4. 避免模糊,建议采用高清、高对比度图像作为识别对象 + * 5. 建议图像有均匀的特征(角点)分布,正确示例: + * + * <img width="500px" src="https://res.wx.qq.com/op_res/sJPS5gttY4yQq-CmG9crrrBRWB_Cw2aFXAn1KY0YtfjnQ7WNt854gA8H2zfmZUztlFcJbdEHouBGs63hUO4Mxg" alt="image.png" /> + * + * 避免角点较少、中间大量空白、没有特征及角点的图像,错误示例: + * + * <img width="500px" src="https://res.wx.qq.com/op_res/rg0BkiSl-LPBybgJtcQCqzjY2LY-ylRjFS7TVD-cZsEE8TTB-xzR2YiWKhWyWg1bgpbRqQq-4l6OWPDii4S3Xg" alt="image.png" /> */ + addMarker( + /** 图片路径,目前只支持本地用户图片 */ + path: string + ): number + /** [number VKSession.addOSDMarker(string path)](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/VKSession.addOSDMarker.html) + * + * 需要基础库: `2.24.5` + * + * 在插件中使用:需要基础库 `2.24.5` + * + * 添加一个 OSD marker(one-shot detection marker),要求调 [wx.createVKSession](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/wx.createVKSession.html) 时传入的 track.OSD 为 true + * + * **使用提示** + * + * 注意事项: + * 1. 使用 addOSDMarker 接口之前,需要在 createVKSession 的时候声明开启 OSD 跟踪。即 wx.createVKSession({ track: { OSD: true } }) + * 2. 可以添加多个 OSDMarker 图片,但不能重复添加相同的 OSDMarker 图片。 + * + * 对传入的图片有如下要求: + * 1. 格式:jpg 格式彩色图片 + * 2. 分辨率:尺寸不低于 240x240 + * 3. 宽高比:在 1:1 ~ 16:9 之间,要求尽量方正,避免狭长的图片 + * 4. 质量:目标物体需要占画面主体,避免大面积留白,避免大面积文字,不能含其他物体。 + * + * 示例: + * + * <img width="500px" src="https://res.wx.qq.com/op_res/rg0BkiSl-LPBybgJtcQCq_Mq0ReXEA5nOzDIvnYYPttmwxn0V1e_yI6UUgkNT6K6aOQj2QRba5IHQglHULkrKg" alt="image.png" /> + * <br> + * <img width="500px" src="https://res.wx.qq.com/op_res/rg0BkiSl-LPBybgJtcQCqwiRcyGk9oenkCpd3vAHWSTSZPPJcgIrPzcpwnSpmk_9bMiCqUdS8Ds789Rjhy0CtA" alt="image.png" /> + * <br> + * <img width="500px" src="https://res.wx.qq.com/op_res/rg0BkiSl-LPBybgJtcQCqx8fYUYypBmFmB1_zX-APH06j1oMZDz7K0CE2To_982NDOB5fmM4Y2Rrr1uQF6J4gg" alt="image.png" /> + * <br> + * + * 建议: + * + * 1. 具有丰富的细节,避免纯色且形状特点不鲜明的物体,例如: + * + * <img width="500px" src="https://res.wx.qq.com/op_res/rg0BkiSl-LPBybgJtcQCq-6WwSZKlNbN-if0NCag-Dm6AmNJeBFi5dvR-bRZINlZmuA9G1e4wpngvhlr2z6CXQ" alt="image.png" /> + * + * 2. 避免模糊,最好采用高清图片 */ + addOSDMarker( + /** 图片路径,目前只支持本地用户图片 */ + path: string + ): number + /** [number VKSession.requestAnimationFrame(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/VKSession.requestAnimationFrame.html) + * + * 需要基础库: `2.20.0` + * + * 在插件中使用:需要基础库 `2.20.0` + * + * 在下次进行重绘时执行。 */ + requestAnimationFrame( + /** 执行的 callback */ + callback: (...args: any[]) => any + ): number + } + interface VideoContext { + /** [VideoContext.exitBackgroundPlayback()](https://developers.weixin.qq.com/miniprogram/dev/api/media/video/VideoContext.exitBackgroundPlayback.html) + * + * 需要基础库: `2.14.3` + * + * 在插件中使用:支持 + * + * 退出后台音频播放模式。 */ + exitBackgroundPlayback(): void + /** [VideoContext.exitFullScreen()](https://developers.weixin.qq.com/miniprogram/dev/api/media/video/VideoContext.exitFullScreen.html) + * + * 需要基础库: `1.4.0` + * + * 在插件中使用:支持 + * + * 退出全屏 */ + exitFullScreen(): void + /** [VideoContext.exitPictureInPicture(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/video/VideoContext.exitPictureInPicture.html) + * + * 在插件中使用:支持 + * + * 退出小窗,该方法可在任意页面调用 */ + exitPictureInPicture(option?: ExitPictureInPictureOption): void + /** [VideoContext.hideStatusBar()](https://developers.weixin.qq.com/miniprogram/dev/api/media/video/VideoContext.hideStatusBar.html) + * + * 需要基础库: `2.1.0` + * + * 在插件中使用:支持 + * + * 隐藏状态栏,仅在iOS全屏下有效 */ + hideStatusBar(): void + /** [VideoContext.pause()](https://developers.weixin.qq.com/miniprogram/dev/api/media/video/VideoContext.pause.html) + * + * 在插件中使用:支持 + * + * 暂停视频 */ + pause(): void + /** [VideoContext.play()](https://developers.weixin.qq.com/miniprogram/dev/api/media/video/VideoContext.play.html) + * + * 在插件中使用:支持 + * + * 播放视频 */ + play(): void + /** [VideoContext.playbackRate(number rate)](https://developers.weixin.qq.com/miniprogram/dev/api/media/video/VideoContext.playbackRate.html) + * + * 需要基础库: `1.4.0` + * + * 在插件中使用:支持 + * + * 设置倍速播放 */ + playbackRate( + /** 倍率,支持 0.5/0.8/1.0/1.25/1.5,2.6.3 起支持 2.0 倍速 */ + rate: number + ): void + /** [VideoContext.requestBackgroundPlayback()](https://developers.weixin.qq.com/miniprogram/dev/api/media/video/VideoContext.requestBackgroundPlayback.html) + * + * 需要基础库: `2.14.3` + * + * 在插件中使用:支持 + * + * 进入后台音频播放模式。 */ + requestBackgroundPlayback(): void + /** [VideoContext.requestFullScreen(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/video/VideoContext.requestFullScreen.html) + * + * 需要基础库: `1.4.0` + * + * 在插件中使用:支持 + * + * 进入全屏。若有自定义内容需在全屏时展示,需将内容节点放置到 video 节点内。 */ + requestFullScreen(option: VideoContextRequestFullScreenOption): void + /** [VideoContext.seek(number position)](https://developers.weixin.qq.com/miniprogram/dev/api/media/video/VideoContext.seek.html) + * + * 在插件中使用:支持 + * + * 跳转到指定位置 */ + seek( + /** 跳转到的位置,单位 s */ + position: number + ): void + /** [VideoContext.sendDanmu(Object data)](https://developers.weixin.qq.com/miniprogram/dev/api/media/video/VideoContext.sendDanmu.html) + * + * 在插件中使用:支持 + * + * 发送弹幕 */ + sendDanmu( + /** 弹幕内容 */ + data: Danmu + ): void + /** [VideoContext.showStatusBar()](https://developers.weixin.qq.com/miniprogram/dev/api/media/video/VideoContext.showStatusBar.html) + * + * 需要基础库: `2.1.0` + * + * 在插件中使用:支持 + * + * 显示状态栏,仅在iOS全屏下有效 */ + showStatusBar(): void + /** [VideoContext.stop()](https://developers.weixin.qq.com/miniprogram/dev/api/media/video/VideoContext.stop.html) + * + * 需要基础库: `1.7.0` + * + * 在插件中使用:支持 + * + * 停止视频 */ + stop(): void + } + interface VideoDecoder { + /** [Object VideoDecoder.getFrameData()](https://developers.weixin.qq.com/miniprogram/dev/api/media/video-decoder/VideoDecoder.getFrameData.html) + * + * 需要基础库: `2.11.0` + * + * 在插件中使用:支持 + * + * 获取下一帧的解码数据 */ + getFrameData(): FrameDataOptions + /** [Promise VideoDecoder.remove()](https://developers.weixin.qq.com/miniprogram/dev/api/media/video-decoder/VideoDecoder.remove.html) + * + * 需要基础库: `2.11.0` + * + * 在插件中使用:支持 + * + * 移除解码器 */ + remove(): Promise<any> + /** [Promise VideoDecoder.seek(number position)](https://developers.weixin.qq.com/miniprogram/dev/api/media/video-decoder/VideoDecoder.seek.html) + * + * 需要基础库: `2.11.0` + * + * 在插件中使用:支持 + * + * 跳到某个时间点解码 */ + seek( + /** 跳转的解码位置,单位 ms */ + position: number + ): Promise<any> + /** [Promise VideoDecoder.start(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/video-decoder/VideoDecoder.start.html) + * + * 需要基础库: `2.11.0` + * + * 在插件中使用:支持 + * + * 开始解码 */ + start(option: VideoDecoderStartOption): Promise<any> + /** [Promise VideoDecoder.stop()](https://developers.weixin.qq.com/miniprogram/dev/api/media/video-decoder/VideoDecoder.stop.html) + * + * 需要基础库: `2.11.0` + * + * 在插件中使用:支持 + * + * 停止解码 */ + stop(): Promise<any> + /** [VideoDecoder.off(string eventName, function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/media/video-decoder/VideoDecoder.off.html) + * + * 需要基础库: `2.11.0` + * + * 在插件中使用:支持 + * + * 取消监听录制事件。当对应事件触发时,该回调函数不再执行 */ + off( + /** 事件名 */ + eventName: string, + /** 事件触发时执行的回调函数 */ + callback: (...args: any[]) => any + ): void + /** [VideoDecoder.on(string eventName, function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/media/video-decoder/VideoDecoder.on.html) + * + * 需要基础库: `2.11.0` + * + * 在插件中使用:支持 + * + * 注册监听录制事件的回调函数。当对应事件触发时,回调函数会被执行 */ + on( + /** 事件名 + * + * 参数 eventName 可选值: + * - 'start': 开始事件。返回 {width, height}; + * - 'stop': 结束事件。; + * - 'seek': seek 完成事件。; + * - 'bufferchange': 缓冲区变化事件。; + * - 'ended': 解码结束事件。; */ + eventName: 'start' | 'stop' | 'seek' | 'bufferchange' | 'ended', + /** 事件触发时执行的回调函数 */ + callback: (...args: any[]) => any + ): void + } + interface WebAudioContext { + /** [AnalyserNode WebAudioContext.createAnalyser()](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/WebAudioContext.createAnalyser.html) + * + * 需要基础库: `2.22.0` + * + * 在插件中使用:不支持 + * + * 创建一个 AnalyserNode 。可以用来获取音频时间和频率数据,以及实现数据可视化。 */ + createAnalyser(): AnalyserNode + /** [BiquadFilterNode WebAudioContext.createBiquadFilter()](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/WebAudioContext.createBiquadFilter.html) + * + * 在插件中使用:不支持 + * + * 创建一个BiquadFilterNode */ + createBiquadFilter(): BiquadFilterNode + /** [BufferSourceNode WebAudioContext.createBufferSource()](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/WebAudioContext.createBufferSource.html) + * + * 在插件中使用:不支持 + * + * 创建一个BufferSourceNode实例,通过AudioBuffer对象来播放音频数据。 */ + createBufferSource(): BufferSourceNode + /** [ChannelMergerNode WebAudioContext.createChannelMerger(number numberOfInputs)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/WebAudioContext.createChannelMerger.html) + * + * 在插件中使用:不支持 + * + * 创建一个ChannelMergerNode */ + createChannelMerger( + /** 输出流中需要保持的输入流的个数 */ + numberOfInputs: number + ): ChannelMergerNode + /** [ChannelSplitterNode WebAudioContext.createChannelSplitter(number numberOfOutputs)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/WebAudioContext.createChannelSplitter.html) + * + * 在插件中使用:不支持 + * + * 创建一个ChannelSplitterNode */ + createChannelSplitter( + /** 要分别输出的输入音频流中的通道数 */ + numberOfOutputs: number + ): ChannelSplitterNode + /** [ConstantSourceNode WebAudioContext.createConstantSource()](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/WebAudioContext.createConstantSource.html) + * + * 在插件中使用:不支持 + * + * 创建一个ConstantSourceNode */ + createConstantSource(): ConstantSourceNode + /** [DelayNode WebAudioContext.createDelay(number maxDelayTime)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/WebAudioContext.createDelay.html) + * + * 在插件中使用:不支持 + * + * 创建一个DelayNode */ + createDelay( + /** 最大延迟时间 */ + maxDelayTime: number + ): DelayNode + /** [DynamicsCompressorNode WebAudioContext.createDynamicsCompressor()](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/WebAudioContext.createDynamicsCompressor.html) + * + * 在插件中使用:不支持 + * + * 创建一个DynamicsCompressorNode */ + createDynamicsCompressor(): DynamicsCompressorNode + /** [GainNode WebAudioContext.createGain()](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/WebAudioContext.createGain.html) + * + * 在插件中使用:不支持 + * + * 创建一个GainNode */ + createGain(): GainNode + /** [IIRFilterNode WebAudioContext.createIIRFilter(Array.<number> feedforward, Array.<number> feedback)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/WebAudioContext.createIIRFilter.html) + * + * 在插件中使用:不支持 + * + * 创建一个IIRFilterNode */ + createIIRFilter( + /** 一个浮点值数组,指定IIR滤波器传递函数的前馈(分子)系数。 */ + feedforward: number[], + /** 一个浮点值数组,指定IIR滤波器传递函数的反馈(分母)系数。 */ + feedback: number[] + ): IIRFilterNode + /** [OscillatorNode WebAudioContext.createOscillator()](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/WebAudioContext.createOscillator.html) + * + * 在插件中使用:不支持 + * + * 创建一个OscillatorNode */ + createOscillator(): OscillatorNode + /** [PannerNode WebAudioContext.createPanner()](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/WebAudioContext.createPanner.html) + * + * 在插件中使用:不支持 + * + * 创建一个PannerNode */ + createPanner(): PannerNode + /** [PeriodicWaveNode WebAudioContext.createPeriodicWave(Float32Array real, Float32Array imag, object constraints)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/WebAudioContext.createPeriodicWave.html) +* +* 在插件中使用:不支持 +* +* 创建一个PeriodicWaveNode +* +* **注意** +* +* `real`和`imag`数组必须拥有一样的长度,否则抛出错误 +* ```js +const real = new Float32Array(2) +const imag = new Float32Array(2) +real[0] = 0 +imag[0] = 0 +real[1] = 1 +imag[1] = 0 + +const waveNode = audioContext.createPeriodicWave(real, imag, {disableNormalization: true}) +``` */ + createPeriodicWave( + /** 一组余弦项(传统上是A项) */ + real: Float32Array, + /** 一组余弦项(传统上是A项) */ + imag: Float32Array, + /** 一个字典对象,它指定是否应该禁用规范化(默认启用规范化) */ + constraints: Constraints + ): PeriodicWaveNode + /** [Promise WebAudioContext.close()](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/WebAudioContext.close.html) +* +* 在插件中使用:不支持 +* +* 关闭WebAudioContext +* +* **注意事项** +* +* 同步关闭对应的WebAudio上下文。close后会立即释放当前上下文的资源,<b>不要在close后再次访问state属性。</b> +* ```js +const audioCtx = wx.createWebAudioContext() +audioCtx.close().then(() => { + console.log(audioCtx.state) // bad case:不应该在close后再访问state +}) +``` */ + close(): Promise<any> + /** [Promise WebAudioContext.resume()](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/WebAudioContext.resume.html) + * + * 在插件中使用:不支持 + * + * 同步恢复已经被暂停的WebAudioContext上下文 */ + resume(): Promise<any> + /** [Promise WebAudioContext.suspend()](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/WebAudioContext.suspend.html) + * + * 在插件中使用:不支持 + * + * 同步暂停WebAudioContext上下文 */ + suspend(): Promise<any> + /** [ScriptProcessorNode WebAudioContext.createScriptProcessor(number bufferSize, number numberOfInputChannels, number numberOfOutputChannels)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/WebAudioContext.createScriptProcessor.html) + * + * 在插件中使用:不支持 + * + * 创建一个ScriptProcessorNode */ + createScriptProcessor( + /** 缓冲区大小,以样本帧为单位 */ + bufferSize: number, + /** 用于指定输入node的声道的数量 */ + numberOfInputChannels: number, + /** 用于指定输出node的声道的数量 */ + numberOfOutputChannels: number + ): ScriptProcessorNode + /** [WaveShaperNode WebAudioContext.createWaveShaper()](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/WebAudioContext.createWaveShaper.html) + * + * 在插件中使用:不支持 + * + * 创建一个WaveShaperNode */ + createWaveShaper(): WaveShaperNode + /** [[AudioBuffer](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/AudioBuffer.html) WebAudioContext.createBuffer(number numOfChannels, number length, number sampleRate)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/WebAudioContext.createBuffer.html) + * + * 在插件中使用:不支持 + * + * 创建一个AudioBuffer,代表着一段驻留在内存中的短音频 */ + createBuffer( + /** 定义了 buffer 中包含的声频通道数量的整数 */ + numOfChannels: number, + /** 代表 buffer 中的样本帧数的整数 */ + length: number, + /** 线性音频样本的采样率,即每一秒包含的关键帧的个数 */ + sampleRate: number + ): AudioBuffer + /** [[AudioBuffer](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/AudioBuffer.html) WebAudioContext.decodeAudioData()](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/WebAudioContext.decodeAudioData.html) + * + * 在插件中使用:不支持 + * + * 异步解码一段资源为AudioBuffer。 */ + decodeAudioData(): AudioBuffer + } + interface WifiError { + /** 错误信息 + * + * | 错误码 | 错误信息 | 说明 | + * | - | - | - | + * | 0 | ok | 正常 | + * | 12000 | not init | 未先调用 `startWifi` 接口 | + * | 12001 | system not support | 当前系统不支持相关能力 | + * | 12002 | password error Wi-Fi | 密码错误 | + * | 12003 | connection timeout | 连接超时, 仅 Android 支持 | + * | 12004 | duplicate request | 重复连接 Wi-Fi | + * | 12005 | wifi not turned on | Android 特有,未打开 Wi-Fi 开关 | + * | 12006 | gps not turned on | Android 特有,未打开 GPS 定位开关 | + * | 12007 | user denied | 用户拒绝授权链接 Wi-Fi | + * | 12008 | invalid SSID | 无效 SSID | + * | 12009 | system config err | 系统运营商配置拒绝连接 Wi-Fi | + * | 12010 | system internal error | 系统其他错误,需要在 errmsg 打印具体的错误原因 | + * | 12011 | weapp in background | 应用在后台无法配置 Wi-Fi | + * | 12013 | wifi config may be expired | 系统保存的 Wi-Fi 配置过期,建议忘记 Wi-Fi 后重试,仅 Android 支持 | + * | 12014 | invalid WEP / WPA password | iOS 特有,无效的 WEP / WPA 密码 | */ errMsg: string + /** 错误码 + * + * | 错误码 | 错误信息 | 说明 | + * | - | - | - | + * | 0 | ok | 正常 | + * | 12000 | not init | 未先调用 `startWifi` 接口 | + * | 12001 | system not support | 当前系统不支持相关能力 | + * | 12002 | password error Wi-Fi | 密码错误 | + * | 12003 | connection timeout | 连接超时, 仅 Android 支持 | + * | 12004 | duplicate request | 重复连接 Wi-Fi | + * | 12005 | wifi not turned on | Android 特有,未打开 Wi-Fi 开关 | + * | 12006 | gps not turned on | Android 特有,未打开 GPS 定位开关 | + * | 12007 | user denied | 用户拒绝授权链接 Wi-Fi | + * | 12008 | invalid SSID | 无效 SSID | + * | 12009 | system config err | 系统运营商配置拒绝连接 Wi-Fi | + * | 12010 | system internal error | 系统其他错误,需要在 errmsg 打印具体的错误原因 | + * | 12011 | weapp in background | 应用在后台无法配置 Wi-Fi | + * | 12013 | wifi config may be expired | 系统保存的 Wi-Fi 配置过期,建议忘记 Wi-Fi 后重试,仅 Android 支持 | + * | 12014 | invalid WEP / WPA password | iOS 特有,无效的 WEP / WPA 密码 | */ errCode: number + } + interface Worker { + /** [ArrayBuffer Worker.getCameraFrameData()](https://developers.weixin.qq.com/miniprogram/dev/api/worker/Worker.getCameraFrameData.html) +* +* 需要基础库: `2.25.1` +* +* 在插件中使用:不支持 +* +* 获取摄像头当前帧图像,返回ArrayBuffer数据。仅限在 worker 线程中使用。 +* +* **示例代码** +* +* ```js +// app.js +const worker = wx.createWorker('workers/index.js', { + useExperimentalWorker: true +}) + +const cameraContext = wx.createCameraContext() +const cameraFrameListener = cameraContext.onCameraFrame(function() {}) +cameraFrameListener.start({ + worker: worker +}) +``` +* +* ```js +// workers/index.js +const data = worker.getCameraFrameData() +console.log(data) +``` */ + getCameraFrameData(): ArrayBuffer + /** [Worker.onMessage(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/worker/Worker.onMessage.html) + * + * 在插件中使用:不支持 + * + * 监听主线程/Worker 线程向当前线程发送的消息的事件。 */ + onMessage( + /** 主线程/Worker 线程向当前线程发送的消息的事件的监听函数 */ + listener: WorkerOnMessageCallback + ): void + /** [Worker.onProcessKilled(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/worker/Worker.onProcessKilled.html) + * + * 在插件中使用:不支持 + * + * 监听 worker线程被系统回收事件(当iOS系统资源紧张时,worker线程存在被系统回收的可能,开发者可监听此事件并重新创建一个worker)。仅限在主线程 worker 对象上调用。 */ + onProcessKilled( + /** worker线程被系统回收事件的监听函数 */ + listener: OnProcessKilledCallback + ): void + /** [Worker.postMessage(Object message)](https://developers.weixin.qq.com/miniprogram/dev/api/worker/Worker.postMessage.html) +* +* 在插件中使用:不支持 +* +* 向主线程/Worker 线程发送的消息。 +* +* **示例代码** +* +* worker 线程中 +* ```js +worker.postMessage({ + msg: 'hello from worker' +}) +``` +* +* 主线程中 +* ```js +const worker = wx.createWorker('workers/request/index.js') + +worker.postMessage({ + msg: 'hello from main' +}) +``` +* +* **提醒** +* +* 在基础库版本2.20.2之前,postMessage仅支持传递可序列化的key-value对象。 +* 在基础库2.20.2之后,postMessage支持传递任意类型的数据。 */ + postMessage( + /** 需要发送的消息。 */ + message: IAnyObject + ): void + /** [Worker.terminate()](https://developers.weixin.qq.com/miniprogram/dev/api/worker/Worker.terminate.html) + * + * 在插件中使用:不支持 + * + * 结束当前 Worker 线程。仅限在主线程 worker 对象上调用。 */ + terminate(): void + } + interface WriteSyncError { + /** 错误信息 + * + * | 错误信息 | 说明 | + * | - | - | + * | bad file descriptor | 无效的文件描述符 | + * | fail permission denied | 指定的 fd 路径没有写权限 | + * | fail sdcard not mounted | android sdcard 挂载失败 | */ errMsg: string + /** 错误码 + * + * | 错误信息 | 说明 | + * | - | - | + * | bad file descriptor | 无效的文件描述符 | + * | fail permission denied | 指定的 fd 路径没有写权限 | + * | fail sdcard not mounted | android sdcard 挂载失败 | */ errCode: number + } + interface Wx { + /** [Array.<any> wx.batchGetStorageSync(Array.<string> keyList)](https://developers.weixin.qq.com/miniprogram/dev/api/storage/wx.batchGetStorageSync.html) +* +* 需要基础库: `2.25.0` +* +* 在插件中使用:不支持 +* +* 从本地缓存中同步批量获取指定 key 的内容。 +* +* **示例代码** +* +* ```js +try { + var valueList = wx.batchGetStorageSync(['key']) + if (valueList) { + // Do something with return value + } +} catch (e) { + // Do something when catch error +} +``` +* +* **** +* +* 对于多个key的读取, 批量读取在性能上优于多次getStorageSync读取 */ + batchGetStorageSync( + /** 本地缓存中指定的 key 数组 */ + keyList: string[] + ): any[] + /** [ArrayBuffer wx.base64ToArrayBuffer(string base64)](https://developers.weixin.qq.com/miniprogram/dev/api/base/wx.base64ToArrayBuffer.html) + * + * 需要基础库: `1.1.0` + * + * 在插件中使用:支持 + * @deprecated 基础库版本 [2.4.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃 + * + * 将 Base64 字符串转成 ArrayBuffer 对象 */ + base64ToArrayBuffer( + /** 要转化成 ArrayBuffer 对象的 Base64 字符串 */ + base64: string + ): ArrayBuffer + /** [Object wx.getAccountInfoSync()](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/account-info/wx.getAccountInfoSync.html) +* +* 需要基础库: `2.2.2` +* +* 在插件中使用:需要基础库 `2.2.2` +* +* 获取当前帐号信息。线上小程序版本号仅支持在正式版小程序中获取,开发版和体验版中无法获取。 +* +* **示例代码** +* +* ```js +const accountInfo = wx.getAccountInfoSync(); +console.log(accountInfo.miniProgram.appId) // 小程序 appId +console.log(accountInfo.plugin.appId) // 插件 appId +console.log(accountInfo.plugin.version) // 插件版本号, 'a.b.c' 这样的形式 +``` */ + getAccountInfoSync(): AccountInfo + /** [Object wx.getAppAuthorizeSetting()](https://developers.weixin.qq.com/miniprogram/dev/api/base/system/wx.getAppAuthorizeSetting.html) +* +* 需要基础库: `2.20.1` +* +* 在插件中使用:需要基础库 `2.21.3` +* +* 获取微信APP授权设置 +* +* **示例代码** +* +* ```js +const appAuthorizeSetting = wx.getAppAuthorizeSetting() + +console.log(appAuthorizeSetting.albumAuthorized) +console.log(appAuthorizeSetting.bluetoothAuthorized) +console.log(appAuthorizeSetting.cameraAuthorized) +console.log(appAuthorizeSetting.locationAuthorized) +console.log(appAuthorizeSetting.locationReducedAccuracy) +console.log(appAuthorizeSetting.microphoneAuthorized) +console.log(appAuthorizeSetting.notificationAlertAuthorized) +console.log(appAuthorizeSetting.notificationAuthorized) +console.log(appAuthorizeSetting.notificationBadgeAuthorized) +console.log(appAuthorizeSetting.notificationSoundAuthorized) +console.log(appAuthorizeSetting.phoneCalendarAuthorized) +``` +* +* **返回值说明** +* +* `'authorized'` 表示已经获得授权,无需再次请求授权; +* `'denied'` 表示请求授权被拒绝,无法再次请求授权;(此情况需要引导用户[打开系统设置](https://developers.weixin.qq.com/miniprogram/dev/api/base/system/wx.openAppAuthorizeSetting.html),在设置页中打开权限) +* `'non determined'` 表示尚未请求授权,会在微信下一次调用系统相应权限时请求;(仅 iOS 会出现。此种情况下引导用户打开系统设置,不展示开关) */ + getAppAuthorizeSetting(): AppAuthorizeSetting + /** [Object wx.getAppBaseInfo()](https://developers.weixin.qq.com/miniprogram/dev/api/base/system/wx.getAppBaseInfo.html) +* +* 需要基础库: `2.20.1` +* +* 在插件中使用:需要基础库 `2.21.3` +* +* 获取微信APP基础信息 +* +* **示例代码** +* +* ```js +const appBaseInfo = wx.getAppBaseInfo() + +console.log(appBaseInfo.SDKVersion) +console.log(appBaseInfo.enableDebug) +console.log(appBaseInfo.host) +console.log(appBaseInfo.language) +console.log(appBaseInfo.version) +console.log(appBaseInfo.theme) +``` */ + getAppBaseInfo(): AppBaseInfo + /** [Object wx.getBatteryInfoSync()](https://developers.weixin.qq.com/miniprogram/dev/api/device/battery/wx.getBatteryInfoSync.html) + * + * 在插件中使用:需要基础库 `2.15.0` + * + * [wx.getBatteryInfo](https://developers.weixin.qq.com/miniprogram/dev/api/device/battery/wx.getBatteryInfo.html) 的同步版本 */ + getBatteryInfoSync(): GetBatteryInfoSyncResult + /** [Object wx.getDeviceInfo()](https://developers.weixin.qq.com/miniprogram/dev/api/base/system/wx.getDeviceInfo.html) +* +* 需要基础库: `2.20.1` +* +* 在插件中使用:需要基础库 `2.21.3` +* +* 获取设备基础信息 +* +* **示例代码** +* +* ```js +const deviceInfo = wx.getDeviceInfo() + +console.log(deviceInfo.abi) +console.log(deviceInfo.benchmarkLevel) +console.log(deviceInfo.brand) +console.log(deviceInfo.model) +console.log(deviceInfo.platform) +console.log(deviceInfo.system) +``` */ + getDeviceInfo(): DeviceInfo + /** [Object wx.getEnterOptionsSync()](https://developers.weixin.qq.com/miniprogram/dev/api/base/app/life-cycle/wx.getEnterOptionsSync.html) + * + * 需要基础库: `2.9.4` + * + * 在插件中使用:需要基础库 `2.9.4` + * + * 获取本次小程序启动时的参数。如果当前是冷启动,则返回值与 [`App.onLaunch`](https://developers.weixin.qq.com/miniprogram/dev/reference/api/App.html#onLaunch-Object-object) 的回调参数一致;如果当前是热启动,则返回值与 [`App.onShow`](https://developers.weixin.qq.com/miniprogram/dev/reference/api/App.html#onShow-Object-object) 一致。 + * + * **返回有效 referrerInfo 的场景** + * + * | 场景值 | 场景 | appId含义 | + * | ------ | ------------------------------- | ---------- | + * | 1020 | 公众号 profile 页相关小程序列表 | 来源公众号 | + * | 1035 | 公众号自定义菜单 | 来源公众号 | + * | 1036 | App 分享消息卡片 | 来源App | + * | 1037 | 小程序打开小程序 | 来源小程序 | + * | 1038 | 从另一个小程序返回 | 来源小程序 | + * | 1043 | 公众号模板消息 | 来源公众号 | + * + * **不同 apiCategory 场景下的 API 限制** + * + * `X` 表示 API 被限制无法使用;不在表格中的 API 不限制。 + * + * | | default | nativeFunctionalized | browseOnly | embedded | + * |-|-|-|-|-| + * |navigateToMiniProgram | | `X` | `X` | | + * |openSetting | | | `X` | | + * |<button open-type="share"> | | `X` | `X` | `X` | + * |<button open-type="feedback"> | | | `X` | | + * |<button open-type="open-setting">| | | `X` | | + * |openEmbeddedMiniProgram | | `X` | `X` | `X` | + * + * **注意** + * + * 部分版本在无 `referrerInfo` 的时候会返回 `undefined`,建议使用 `options.referrerInfo && options.referrerInfo.appId` 进行判断。 */ + getEnterOptionsSync(): LaunchOptionsApp + /** [Object wx.getExptInfoSync(Array.<string> keys)](https://developers.weixin.qq.com/miniprogram/dev/api/data-analysis/wx.getExptInfoSync.html) + * + * 需要基础库: `2.17.0` + * + * 在插件中使用:不支持 + * + * 给定实验参数数组,获取对应的实验参数值 + * + * **提示** + * + * 假设实验参数有 `color`, `size` + * 调用 wx.getExptInfoSync() 会返回 `{color:'#fff',size:20}` 类似的结果 + * 而 wx.getExptInfoSync(['color']) 则只会返回 `{color:'#fff'}` */ + getExptInfoSync( + /** 实验参数数组,不填则获取所有实验参数 */ + keys?: string[] + ): IAnyObject + /** [Object wx.getExtConfigSync()](https://developers.weixin.qq.com/miniprogram/dev/api/ext/wx.getExtConfigSync.html) +* +* 需要基础库: `1.1.0` +* +* 在插件中使用:不支持 +* +* [wx.getExtConfig](https://developers.weixin.qq.com/miniprogram/dev/api/ext/wx.getExtConfig.html) 的同步版本。 +* +* **Tips** +* +* 1. 本接口暂时无法通过 [wx.canIUse](https://developers.weixin.qq.com/miniprogram/dev/api/base/wx.canIUse.html) 判断是否兼容,开发者需要自行判断 [wx.getExtConfigSync](https://developers.weixin.qq.com/miniprogram/dev/api/ext/wx.getExtConfigSync.html) 是否存在来兼容 +* +* **** +* +* ```js +let extConfig = wx.getExtConfigSync? wx.getExtConfigSync(): {} +console.log(extConfig) +``` */ + getExtConfigSync(): IAnyObject + /** [Object wx.getLaunchOptionsSync()](https://developers.weixin.qq.com/miniprogram/dev/api/base/app/life-cycle/wx.getLaunchOptionsSync.html) + * + * 需要基础库: `2.1.2` + * + * 在插件中使用:需要基础库 `2.9.4` + * + * 获取小程序启动时的参数。与 [`App.onLaunch`](https://developers.weixin.qq.com/miniprogram/dev/reference/api/App.html#onlaunchobject-object) 的回调参数一致。 + * + * **返回有效 referrerInfo 的场景** + * + * | 场景值 | 场景 | appId含义 | + * | ------ | ------------------------------- | ---------- | + * | 1020 | 公众号 profile 页相关小程序列表 | 来源公众号 | + * | 1035 | 公众号自定义菜单 | 来源公众号 | + * | 1036 | App 分享消息卡片 | 来源App | + * | 1037 | 小程序打开小程序 | 来源小程序 | + * | 1038 | 从另一个小程序返回 | 来源小程序 | + * | 1043 | 公众号模板消息 | 来源公众号 | + * | 1069 | 移动应用 | 来源App | + * + * **不同 apiCategory 场景下的 API 限制** + * + * `X` 表示 API 被限制无法使用;不在表格中的 API 不限制。 + * + * | | default | nativeFunctionalized | browseOnly | embedded | + * |-|-|-|-|-| + * |navigateToMiniProgram | | `X` | `X` | | + * |openSetting | | | `X` | | + * |<button open-type="share"> | | `X` | `X` | `X` | + * |<button open-type="feedback"> | | | `X` | | + * |<button open-type="open-setting">| | | `X` | | + * |openEmbeddedMiniProgram | | `X` | `X` | `X` | + * + * **注意** + * + * 部分版本在无`referrerInfo`的时候会返回 `undefined`,建议使用 `options.referrerInfo && options.referrerInfo.appId` 进行判断。 */ + getLaunchOptionsSync(): LaunchOptionsApp + /** [Object wx.getMenuButtonBoundingClientRect()](https://developers.weixin.qq.com/miniprogram/dev/api/ui/menu/wx.getMenuButtonBoundingClientRect.html) +* +* 需要基础库: `2.1.0` +* +* 在插件中使用:需要基础库 `2.15.0` +* +* 获取菜单按钮(右上角胶囊按钮)的布局位置信息。坐标信息以屏幕左上角为原点。 +* +* **示例代码** +* +* ```js +const res = wx.getMenuButtonBoundingClientRect() + +console.log(res.width) +console.log(res.height) +console.log(res.top) +console.log(res.right) +console.log(res.bottom) +console.log(res.left) +``` */ + getMenuButtonBoundingClientRect(): ClientRect + /** [Object wx.getStorageInfoSync()](https://developers.weixin.qq.com/miniprogram/dev/api/storage/wx.getStorageInfoSync.html) +* +* 在插件中使用:不支持 +* +* [wx.getStorageInfo](https://developers.weixin.qq.com/miniprogram/dev/api/storage/wx.getStorageInfo.html) 的同步版本 +* +* **示例代码** +* +* ```js +wx.getStorageInfo({ + success (res) { + console.log(res.keys) + console.log(res.currentSize) + console.log(res.limitSize) + } +}) +``` +* +* ```js +try { + const res = wx.getStorageInfoSync() + console.log(res.keys) + console.log(res.currentSize) + console.log(res.limitSize) +} catch (e) { + // Do something when catch error +} +``` */ + getStorageInfoSync(): GetStorageInfoSyncOption + /** [Object wx.getSystemInfoSync()](https://developers.weixin.qq.com/miniprogram/dev/api/base/system/wx.getSystemInfoSync.html) +* +* 在插件中使用:需要基础库 `1.9.6` +* +* [wx.getSystemInfo](https://developers.weixin.qq.com/miniprogram/dev/api/base/system/wx.getSystemInfo.html) 的同步版本 +* +* **示例代码** +* +* [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/WkUCgXmS7mqO) +* +* ```js +wx.getSystemInfo({ + success (res) { + console.log(res.model) + console.log(res.pixelRatio) + console.log(res.windowWidth) + console.log(res.windowHeight) + console.log(res.language) + console.log(res.version) + console.log(res.platform) + } +}) +``` +* +* ```js +try { + const res = wx.getSystemInfoSync() + console.log(res.model) + console.log(res.pixelRatio) + console.log(res.windowWidth) + console.log(res.windowHeight) + console.log(res.language) + console.log(res.version) + console.log(res.platform) +} catch (e) { + // Do something when catch error +} +``` */ + getSystemInfoSync(): SystemInfo + /** [Object wx.getSystemSetting()](https://developers.weixin.qq.com/miniprogram/dev/api/base/system/wx.getSystemSetting.html) +* +* 需要基础库: `2.20.1` +* +* 在插件中使用:需要基础库 `2.21.3` +* +* 获取设备设置 +* +* **示例代码** +* +* ```js +const systemSetting = wx.getSystemSetting() + +console.log(systemSetting.bluetoothEnabled) +console.log(systemSetting.deviceOrientation) +console.log(systemSetting.locationEnabled) +console.log(systemSetting.wifiEnabled) +``` */ + getSystemSetting(): SystemSetting + /** [Object wx.getWindowInfo()](https://developers.weixin.qq.com/miniprogram/dev/api/base/system/wx.getWindowInfo.html) +* +* 需要基础库: `2.20.1` +* +* 在插件中使用:需要基础库 `2.21.3` +* +* 获取窗口信息 +* +* **示例代码** +* +* ```js +const windowInfo = wx.getWindowInfo() + +console.log(windowInfo.pixelRatio) +console.log(windowInfo.screenWidth) +console.log(windowInfo.screenHeight) +console.log(windowInfo.windowWidth) +console.log(windowInfo.windowHeight) +console.log(windowInfo.statusBarHeight) +console.log(windowInfo.safeArea) +console.log(windowInfo.screenTop) +``` */ + getWindowInfo(): WindowInfo + /** [[Animation](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.html) wx.createAnimation(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/wx.createAnimation.html) + * + * 在插件中使用:需要基础库 `1.9.6` + * + * 创建一个动画实例 [animation](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.html)。调用实例的方法来描述动画。最后通过动画实例的 export 方法导出动画数据传递给组件的 animation 属性。 */ + createAnimation(option: StepOption): Animation + /** [[AudioContext](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/AudioContext.html) wx.createAudioContext(string id, Object this)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/wx.createAudioContext.html) + * + * 在插件中使用:需要基础库 `1.9.6` + * @deprecated 基础库版本 [1.6.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [wx.createInnerAudioContext](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/wx.createInnerAudioContext.html) 替换 + * + * 创建 [audio](https://developers.weixin.qq.com/miniprogram/dev/component/audio.html) 上下文 [AudioContext](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/AudioContext.html) 对象。 */ + createAudioContext( + /** [audio](https://developers.weixin.qq.com/miniprogram/dev/component/audio.html) 组件的 id */ + id: string, + /** 在自定义组件下,当前组件实例的this,以操作组件内 [audio](https://developers.weixin.qq.com/miniprogram/dev/component/audio.html) 组件 */ + component?: Component.TrivialInstance | Page.TrivialInstance + ): AudioContext + /** [[BackgroundAudioManager](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/BackgroundAudioManager.html) wx.getBackgroundAudioManager()](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/wx.getBackgroundAudioManager.html) + * + * 需要基础库: `1.2.0` + * + * 在插件中使用:需要基础库 `1.9.6` + * + * 获取**全局唯一**的背景音频管理器。 + * 小程序切入后台,如果音频处于播放状态,可以继续播放。但是后台状态不能通过调用API操纵音频的播放状态。 + * + * 从微信客户端6.7.2版本开始,若需要在小程序切后台后继续播放音频,需要在 [app.json](https://developers.weixin.qq.com/miniprogram/dev/reference/configuration/app.html) 中配置 `requiredBackgroundModes` 属性。开发版和体验版上可以直接生效,正式版还需通过审核。 */ + getBackgroundAudioManager(): BackgroundAudioManager + /** [[CacheManager](https://developers.weixin.qq.com/miniprogram/dev/api/storage/cachemanager/CacheManager.html) wx.createCacheManager(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/storage/cachemanager/wx.createCacheManager.html) +* +* 需要基础库: `2.24.0` +* +* 在插件中使用:不支持 +* +* 创建缓存管理器 +* +* **示例代码** +* +* <a href="https://github.com/wechat-miniprogram/miniprogram-offline-demo" target="_blank">查看完整示例代码</a> +* +* ```js +const cacheManager = createCacheManager() +cacheManager.addRule(/https:\/\/(?:.*)/ig) // 表示所有 https 请求都匹配 + +cacheManager.on('request', evt => { + // 在弱网时接收到 wx.request 请求 + return new Promise((resolve, reject) => { + const matchRes = cm.match(evt) + if (matchRes && matchRes.data) { + // 有缓存,返回 + resolve(matchRes.data) + } else { + // 没缓存,抛错 + reject({ errMsg: 'no cache' }) + } + }) +}) +``` */ + createCacheManager(option: CreateCacheManagerOption): CacheManager + /** [[CameraContext](https://developers.weixin.qq.com/miniprogram/dev/api/media/camera/CameraContext.html) wx.createCameraContext()](https://developers.weixin.qq.com/miniprogram/dev/api/media/camera/wx.createCameraContext.html) + * + * 需要基础库: `1.6.0` + * + * 在插件中使用:需要基础库 `1.9.6` + * + * 创建 [camera](https://developers.weixin.qq.com/miniprogram/dev/component/camera.html) 上下文 [CameraContext](https://developers.weixin.qq.com/miniprogram/dev/api/media/camera/CameraContext.html) 对象。 */ + createCameraContext(): CameraContext + /** [[CanvasContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.html) wx.createCanvasContext(string canvasId, Object this)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/wx.createCanvasContext.html) + * + * 在插件中使用:需要基础库 `1.9.6` + * @deprecated 基础库版本 [2.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [Canvas](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/Canvas.html) 替换 + * + * 创建 canvas 的绘图上下文 [CanvasContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.html) 对象 */ + createCanvasContext( + /** 要获取上下文的 [canvas](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 组件 canvas-id 属性 */ + canvasId: string, + /** 在自定义组件下,当前组件实例的this,表示在这个自定义组件下查找拥有 canvas-id 的 [canvas](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) ,如果省略则不在任何自定义组件内查找 */ + component?: Component.TrivialInstance | Page.TrivialInstance + ): CanvasContext + /** [[DownloadTask](https://developers.weixin.qq.com/miniprogram/dev/api/network/download/DownloadTask.html) wx.downloadFile(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/network/download/wx.downloadFile.html) +* +* 在插件中使用:需要基础库 `1.9.6` +* +* 下载文件资源到本地。客户端直接发起一个 HTTPS GET 请求,返回文件的本地临时路径 (本地路径),单次下载允许的最大文件为 200MB。使用前请注意阅读[相关说明](https://developers.weixin.qq.com/miniprogram/dev/framework/ability/network.html)。 +* +* 注意:请在服务端响应的 header 中指定合理的 `Content-Type` 字段,以保证客户端正确处理文件类型。 +* +* **示例代码** +* +* ```js +wx.downloadFile({ + url: 'https://example.com/audio/123', //仅为示例,并非真实的资源 + success (res) { + // 只要服务器有响应数据,就会把响应内容写入文件并进入 success 回调,业务需要自行判断是否下载到了想要的内容 + if (res.statusCode === 200) { + wx.playVoice({ + filePath: res.tempFilePath + }) + } + } +}) +``` */ + downloadFile(option: DownloadFileOption): DownloadTask + /** [[FileSystemManager](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.html) wx.getFileSystemManager()](https://developers.weixin.qq.com/miniprogram/dev/api/file/wx.getFileSystemManager.html) + * + * 需要基础库: `1.9.9` + * + * 在插件中使用:需要基础库 `2.19.2` + * + * 获取全局唯一的文件管理器 */ + getFileSystemManager(): FileSystemManager + /** [[InnerAudioContext](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.html) wx.createInnerAudioContext(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/wx.createInnerAudioContext.html) +* +* 需要基础库: `1.6.0` +* +* 在插件中使用:需要基础库 `1.9.6` +* +* 创建内部 [audio](https://developers.weixin.qq.com/miniprogram/dev/component/audio.html) 上下文 [InnerAudioContext](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.html) 对象。 +* +* **示例代码** +* +* ```js +const innerAudioContext = wx.createInnerAudioContext({ + useWebAudioImplement: false // 是否使用 WebAudio 作为底层音频驱动,默认关闭。对于短音频、播放频繁的音频建议开启此选项,开启后将获得更优的性能表现。由于开启此选项后也会带来一定的内存增长,因此对于长音频建议关闭此选项 +}) +innerAudioContext.src = 'http://ws.stream.qqmusic.qq.com/M500001VfvsJ21xFqb.mp3?guid=ffffffff82def4af4b12b3cd9337d5e7&uin=346897220&vkey=6292F51E1E384E061FF02C31F716658E5C81F5594D561F2E88B854E81CAAB7806D5E4F103E55D33C16F3FAC506D1AB172DE8600B37E43FAD&fromtag=46' + +innerAudioContext.play() // 播放 + +innerAudioContext.pause() // 暂停 + +innerAudioContext.stop() // 停止 +``` */ + createInnerAudioContext( + option?: CreateInnerAudioContextOption + ): InnerAudioContext + /** [[IntersectionObserver](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/IntersectionObserver.html) wx.createIntersectionObserver(Object component, Object options)](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/wx.createIntersectionObserver.html) + * + * 需要基础库: `1.9.3` + * + * 在插件中使用:需要基础库 `1.9.6` + * + * 创建并返回一个 IntersectionObserver 对象实例。在自定义组件或包含自定义组件的页面中,应使用 `this.createIntersectionObserver([options])` 来代替。 + * + * **示例代码** + * + * [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/LAbMxkmI7F2A) */ + createIntersectionObserver( + /** 自定义组件实例 */ + component: IAnyObject, + /** 选项 */ + options?: CreateIntersectionObserverOption + ): IntersectionObserver + /** [[InterstitialAd](https://developers.weixin.qq.com/miniprogram/dev/api/ad/InterstitialAd.html) wx.createInterstitialAd(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ad/wx.createInterstitialAd.html) + * + * 需要基础库: `2.6.0` + * + * 在插件中使用:需要基础库 `2.8.1` + * + * 创建插屏广告组件。请通过 [wx.getSystemInfoSync()](https://developers.weixin.qq.com/miniprogram/dev/api/base/system/wx.getSystemInfoSync.html) 返回对象的 SDKVersion 判断基础库版本号后再使用该 API。每次调用该方法创建插屏广告都会返回一个全新的实例(小程序端的插屏广告实例不允许跨页面使用)。 */ + createInterstitialAd(option: CreateInterstitialAdOption): InterstitialAd + /** [[LivePlayerContext](https://developers.weixin.qq.com/miniprogram/dev/api/media/live/LivePlayerContext.html) wx.createLivePlayerContext(string id, Object this)](https://developers.weixin.qq.com/miniprogram/dev/api/media/live/wx.createLivePlayerContext.html) + * + * 需要基础库: `1.7.0` + * + * 在插件中使用:需要基础库 `1.9.6` + * + * 创建 [live-player](https://developers.weixin.qq.com/miniprogram/dev/component/live-player.html) 上下文 [LivePlayerContext](https://developers.weixin.qq.com/miniprogram/dev/api/media/live/LivePlayerContext.html) 对象。建议使用 [wx.createSelectorQuery](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/wx.createSelectorQuery.html) 获取 context 对象。 */ + createLivePlayerContext( + /** [live-player](https://developers.weixin.qq.com/miniprogram/dev/component/live-player.html) 组件的 id */ + id: string, + /** 在自定义组件下,当前组件实例的this,以操作组件内 [live-player](https://developers.weixin.qq.com/miniprogram/dev/component/live-player.html) 组件 */ + component?: Component.TrivialInstance | Page.TrivialInstance + ): LivePlayerContext + /** [[LivePusherContext](https://developers.weixin.qq.com/miniprogram/dev/api/media/live/LivePusherContext.html) wx.createLivePusherContext()](https://developers.weixin.qq.com/miniprogram/dev/api/media/live/wx.createLivePusherContext.html) + * + * 需要基础库: `1.7.0` + * + * 在插件中使用:需要基础库 `1.9.6` + * + * 创建 [live-pusher](https://developers.weixin.qq.com/miniprogram/dev/component/live-pusher.html) 上下文 [LivePusherContext](https://developers.weixin.qq.com/miniprogram/dev/api/media/live/LivePusherContext.html) 对象。 */ + createLivePusherContext(): LivePusherContext + /** [[LogManager](https://developers.weixin.qq.com/miniprogram/dev/api/base/debug/LogManager.html) wx.getLogManager(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/base/debug/wx.getLogManager.html) +* +* 需要基础库: `2.1.0` +* +* 在插件中使用:不支持 +* +* 获取日志管理器对象。 +* +* **示例代码** +* +* ```js +const logger = wx.getLogManager({level: 1}) +logger.log({str: 'hello world'}, 'basic log', 100, [1, 2, 3]) +logger.info({str: 'hello world'}, 'info log', 100, [1, 2, 3]) +logger.debug({str: 'hello world'}, 'debug log', 100, [1, 2, 3]) +logger.warn({str: 'hello world'}, 'warn log', 100, [1, 2, 3]) +``` */ + getLogManager(option: GetLogManagerOption): LogManager + /** [[MapContext](https://developers.weixin.qq.com/miniprogram/dev/api/media/map/MapContext.html) wx.createMapContext(string mapId, Object this)](https://developers.weixin.qq.com/miniprogram/dev/api/media/map/wx.createMapContext.html) + * + * 在插件中使用:需要基础库 `1.9.6` + * + * 创建 [map](https://developers.weixin.qq.com/miniprogram/dev/component/map.html) 上下文 [MapContext](https://developers.weixin.qq.com/miniprogram/dev/api/media/map/MapContext.html) 对象。建议使用 [wx.createSelectorQuery](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/wx.createSelectorQuery.html) 获取 context 对象。 */ + createMapContext( + /** [map](https://developers.weixin.qq.com/miniprogram/dev/component/map.html) 组件的 id */ + mapId: string, + /** 在自定义组件下,当前组件实例的this,以操作组件内 [map](https://developers.weixin.qq.com/miniprogram/dev/component/map.html) 组件 */ + component?: Component.TrivialInstance | Page.TrivialInstance + ): MapContext + /** [[MediaAudioPlayer](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/MediaAudioPlayer.html) wx.createMediaAudioPlayer()](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/wx.createMediaAudioPlayer.html) +* +* 需要基础库: `2.13.0` +* +* 在插件中使用:支持 +* +* 创建媒体音频播放器对象 [MediaAudioPlayer](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/MediaAudioPlayer.html) 对象,可用于播放视频解码器 [VideoDecoder](https://developers.weixin.qq.com/miniprogram/dev/api/media/video-decoder/VideoDecoder.html) 输出的音频。 +* +* **示例代码** +* +* ```js + // 创建视频解码器,具体参数见 createVideoDecoder 文档 + const videoDecoder = wx.createVideoDecoder() + // 创建媒体音频播放器 + const mediaAudioPlayer = wx.createMediaAudioPlayer() + // 启动视频解码器 + videoDecoder.start() + // 启动播放器 + mediaAudioPlayer.start().then(() => { + // 添加播放器音频来源 + mediaAudioPlayer.addAudioSource(videoDecoder).then(res => { + videoDecoder.getFrameData() // 建议在 requestAnimationFrame 里获取每一帧视频数据 + console.log(res) + }) + + // 移除播放器音频来源 + mediaAudioPlayer.removeAudioSource(videoDecoder).then() + // 停止播放器 + mediaAudioPlayer.stop().then() + // 销毁播放器 + mediaAudioPlayer.destroy().then() + // 设置播放器音量 + mediaAudioPlayer.volume = 0.5 + }) +``` +* +* **完整demo(小游戏)** +* +* - https://developers.weixin.qq.com/s/SF2duHmb7MjI */ + createMediaAudioPlayer(): MediaAudioPlayer + /** [[MediaContainer](https://developers.weixin.qq.com/miniprogram/dev/api/media/video-processing/MediaContainer.html) wx.createMediaContainer()](https://developers.weixin.qq.com/miniprogram/dev/api/media/video-processing/wx.createMediaContainer.html) + * + * 需要基础库: `2.9.0` + * + * 在插件中使用:需要基础库 `2.10.0` + * + * 创建音视频处理容器,最终可将容器中的轨道合成一个视频 */ + createMediaContainer(): MediaContainer + /** [[MediaRecorder](https://developers.weixin.qq.com/miniprogram/dev/api/media/media-recorder/MediaRecorder.html) wx.createMediaRecorder(Object canvas, Object options)](https://developers.weixin.qq.com/miniprogram/dev/api/media/media-recorder/wx.createMediaRecorder.html) +* +* 需要基础库: `2.11.0` +* +* 在插件中使用:需要基础库 `2.11.0` +* +* 创建 WebGL 画面录制器,可逐帧录制在 WebGL 上渲染的画面并导出视频文件 +* +* **示例代码** +* +* [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/MCz3kPmC7zpa) +* +* **低版本异步接口兼容** +* +* 对基础库 2.16.1 版本前的 mediaRecorder,所有的接口都没有返回 Promise 对象,若需要兼容低版本,则可采用如下方式的写法: +* ```javascript +// 启动 mediaRecorder +await new Promise(resolve => { + recorder.on('start', resolve) + recorder.start() +}) + +// 逐帧绘制 +while (frames--) { + await new Promise(resolve => recorder.requestFrame(resolve)) + render() +} + +// 绘制完成,生成视频 +const {tempFilePath} = await new Promise(resolve => { + recorder.on('stop', resolve) + recorder.stop() +}) +``` */ + createMediaRecorder( + /** WebGL 对象,通过 [SelectorQuery](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/SelectorQuery.html) 获取到的 node 对象或通过 [wx.createOffscreenCanvas](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/wx.createOffscreenCanvas.html) 创建的离屏 WebGL Canvas 对象 */ + canvas: IAnyObject, + options: CreateMediaRecorderOption + ): MediaRecorder + /** [[NFCAdapter](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NFCAdapter.html) wx.getNFCAdapter()](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/wx.getNFCAdapter.html) + * + * 需要基础库: `2.11.2` + * + * 在插件中使用:需要基础库 `2.11.2` + * + * 获取 NFC 实例 + * + * **示例代码** + * + * [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/1WsbDwmb75ig) */ + getNFCAdapter(): NFCAdapter + /** [[OffscreenCanvas](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/OffscreenCanvas.html) wx.createOffscreenCanvas(object object, number width, number height, Object this)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/wx.createOffscreenCanvas.html) + * + * 需要基础库: `2.16.1` + * + * 在插件中使用:需要基础库 `2.16.1` + * + * 创建离屏 canvas 实例 + * + * **离屏 Canvas 类型不可混用** + * + * 由于 webgl canvas 和 2d canvas 的底层实现方式不同,因此必须要在调用 `wx.createOffscreenCanvas` 时提前指定类型。 + * + * 指定类型后,离屏 canvas `getContext(type)` 调用不允许混用,如不能对 webgl canvas 调用 `getContext('2d')`。 + * + * 同样的,不同类型 canvas 调用 `createImage` 创建的图片对象也不支持混用,使用时请注意尽量使用 canvas 自身的 `createImage` 创建图片对象。 + * + * **与 MediaRecorder 结合** + * + * 离屏 webgl canvas 支持作为参数传递给 [`wx.createMediaRecorder`](https://developers.weixin.qq.com/miniprogram/dev/api/media/media-recorder/wx.createMediaRecorder.html), 离屏 2d canvas 暂不支持。 + * + * **旧版 createOffscreenCanvas** + * + * 旧版函数签名为 `wx.createOffscreenCanvas(width: number, height: number, this: object): OffscreenCanvas`,从基础库 2.7.0 开始支持 + * + * 从基础库 2.16.1 开始改为 `wx.createOffscreenCanvas(options: object): OffscreenCanvas`,向下兼容旧版入参。 + * 但需注意旧版入参只能创建 webgl 类型,如需创建 2d 类型则必须使用新版。 */ + createOffscreenCanvas( + /** 画布宽度 */ + width: number, + /** 画布高度 */ + height: number, + /** 在自定义组件下,当前组件实例的 this */ + component?: Component.TrivialInstance | Page.TrivialInstance + ): OffscreenCanvas + /** [[OffscreenCanvas](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/OffscreenCanvas.html) wx.createOffscreenCanvas(object object, number width, number height, Object this)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/wx.createOffscreenCanvas.html) + * + * 需要基础库: `2.16.1` + * + * 在插件中使用:需要基础库 `2.16.1` + * + * 创建离屏 canvas 实例 + * + * **离屏 Canvas 类型不可混用** + * + * 由于 webgl canvas 和 2d canvas 的底层实现方式不同,因此必须要在调用 `wx.createOffscreenCanvas` 时提前指定类型。 + * + * 指定类型后,离屏 canvas `getContext(type)` 调用不允许混用,如不能对 webgl canvas 调用 `getContext('2d')`。 + * + * 同样的,不同类型 canvas 调用 `createImage` 创建的图片对象也不支持混用,使用时请注意尽量使用 canvas 自身的 `createImage` 创建图片对象。 + * + * **与 MediaRecorder 结合** + * + * 离屏 webgl canvas 支持作为参数传递给 [`wx.createMediaRecorder`](https://developers.weixin.qq.com/miniprogram/dev/api/media/media-recorder/wx.createMediaRecorder.html), 离屏 2d canvas 暂不支持。 + * + * **旧版 createOffscreenCanvas** + * + * 旧版函数签名为 `wx.createOffscreenCanvas(width: number, height: number, this: object): OffscreenCanvas`,从基础库 2.7.0 开始支持 + * + * 从基础库 2.16.1 开始改为 `wx.createOffscreenCanvas(options: object): OffscreenCanvas`,向下兼容旧版入参。 + * 但需注意旧版入参只能创建 webgl 类型,如需创建 2d 类型则必须使用新版。 */ + createOffscreenCanvas( + option: CreateOffscreenCanvasOption + ): OffscreenCanvas + /** [[Performance](https://developers.weixin.qq.com/miniprogram/dev/api/base/performance/Performance.html) wx.getPerformance()](https://developers.weixin.qq.com/miniprogram/dev/api/base/performance/wx.getPerformance.html) +* +* 需要基础库: `2.11.0` +* +* 在插件中使用:支持 +* +* 获取当前小程序性能相关的信息。关于小程序启动性能优化的更多内容,请参考[启动性能指南](https://developers.weixin.qq.com/miniprogram/dev/framework/performance/tips/start.html)。 +* +* **** +* +* 目前支持获取以下几类性能指标,具体内容请参考 [PerformanceEntry](https://developers.weixin.qq.com/miniprogram/dev/api/base/performance/PerformanceEntry.html): +* +* | 指标类型(entryType) | 指标名称 | 最低版本 | +* | ------------------- | ---------------- | ------ | +* | 路由(navigation) | route: 路由性能 | | +* | 路由(navigation) | appLaunch: 小程序启动耗时 | | +* | 渲染(render) | firstRender: 页面首次渲染耗时 | | +* | 渲染(render) | firstPaint: 页面首次绘制 | <2.21.2> | +* | 渲染(render) | firstContentfulPaint: 页面首次内容绘制 | <2.21.2> | +* | 渲染(render) | largestContentfulPaint: 页面最大内容绘制 | <2.23.1> | +* | 脚本(script) | evaluateScript: 注入脚本耗时 | | +* | 包加载(loadPackage)| downloadPackage: 代码包下载耗时 | <2.24.0> | +* | 资源(resource) | resourceTiming: 视图层资源加载耗时 | <2.24.0> | +* +* **示例代码** +* +* ```js +const performance = wx.getPerformance() +const observer = performance.createObserver((entryList) => { + console.log(entryList.getEntries()) +}) +observer.observe({ entryTypes: ['render', 'script', 'navigation'] }) +``` +* +* **注意** +* +* - 目前,当开启代码 [按需注入](https://developers.weixin.qq.com/miniprogram/dev/framework/ability/lazyload.html) 时,`evaluateScript` 将仅包含公有部分代码(2.21.2 开始会区分公共部分/页面和组件的部分),页面和组件的代码注入的时间会包含在 `firstRender` 中(因为页面和组件的代码注入过程成为了首次渲染过程的一部分)。因此开启按需注入后,脚本耗时降低,渲染时间提高属于正常现象,优化效果可以关注整体启动耗时(`appLaunch`)来评估。 +* - firstPaint 和 firstContentfulPaint 指标在开启 vConsole 的情况下,由于绘制 vConsole 面板,会导致数据提前。 */ + getPerformance(): Performance + /** [[RealtimeLogManager](https://developers.weixin.qq.com/miniprogram/dev/api/base/debug/RealtimeLogManager.html) wx.getRealtimeLogManager()](https://developers.weixin.qq.com/miniprogram/dev/api/base/debug/wx.getRealtimeLogManager.html) +* +* 需要基础库: `2.7.1` +* +* 在插件中使用:需要基础库 `2.16.0` +* +* 获取实时日志管理器对象。 +* +* **示例代码** +* +* ```js +// 小程序端 +const logger = wx.getRealtimeLogManager() +logger.info({str: 'hello world'}, 'info log', 100, [1, 2, 3]) +logger.error({str: 'hello world'}, 'error log', 100, [1, 2, 3]) +logger.warn({str: 'hello world'}, 'warn log', 100, [1, 2, 3]) + +// 插件端,基础库 2.16.0 版本后支持,只允许采用 key-value 的新格式上报 +const logManager = wx.getRealtimeLogManager() +const logger = logManager.tag('plugin-log1') +logger.info('key1', 'value1') +logger.error('key2', {str: 'value2'}) +logger.warn('key3', 'value3') +``` */ + getRealtimeLogManager(): RealtimeLogManager + /** [[RecorderManager](https://developers.weixin.qq.com/miniprogram/dev/api/media/recorder/RecorderManager.html) wx.getRecorderManager()](https://developers.weixin.qq.com/miniprogram/dev/api/media/recorder/wx.getRecorderManager.html) + * + * 需要基础库: `1.6.0` + * + * 在插件中使用:需要基础库 `1.9.94` + * + * 获取**全局唯一**的录音管理器 RecorderManager */ + getRecorderManager(): RecorderManager + /** [[RequestTask](https://developers.weixin.qq.com/miniprogram/dev/api/network/request/RequestTask.html) wx.request(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/network/request/wx.request.html) +* +* 在插件中使用:需要基础库 `1.9.6` +* +* 发起 HTTPS 网络请求。使用前请注意阅读[相关说明](https://developers.weixin.qq.com/miniprogram/dev/framework/ability/network.html)。 +* +* **data 参数说明** +* +* 最终发送给服务器的数据是 String 类型,如果传入的 data 不是 String 类型,会被转换成 String 。转换规则如下: +* - 对于 `GET` 方法的数据,会将数据转换成 query string(`encodeURIComponent(k)=encodeURIComponent(v)&encodeURIComponent(k)=encodeURIComponent(v)...`) +* - 对于 `POST` 方法且 `header['content-type']` 为 `application/json` 的数据,会对数据进行 JSON 序列化 +* - 对于 `POST` 方法且 `header['content-type']` 为 `application/x-www-form-urlencoded` 的数据,会将数据转换成 query string `(encodeURIComponent(k)=encodeURIComponent(v)&encodeURIComponent(k)=encodeURIComponent(v)...)` +* +* **示例代码** +* +* ```js +wx.request({ + url: 'example.php', //仅为示例,并非真实的接口地址 + data: { + x: '', + y: '' + }, + header: { + 'content-type': 'application/json' // 默认值 + }, + success (res) { + console.log(res.data) + } +}) +``` */ + request< + T extends string | IAnyObject | ArrayBuffer = + | string + | IAnyObject + | ArrayBuffer + >( + option: RequestOption<T> + ): RequestTask + /** [[RewardedVideoAd](https://developers.weixin.qq.com/miniprogram/dev/api/ad/RewardedVideoAd.html) wx.createRewardedVideoAd(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ad/wx.createRewardedVideoAd.html) + * + * 需要基础库: `2.0.4` + * + * 在插件中使用:需要基础库 `2.8.1` + * + * 创建激励视频广告组件。请通过 [wx.getSystemInfoSync()](https://developers.weixin.qq.com/miniprogram/dev/api/base/system/wx.getSystemInfoSync.html) 返回对象的 SDKVersion 判断基础库版本号后再使用该 API(小游戏端要求 >= 2.0.4, 小程序端要求 >= 2.6.0)。调用该方法创建的激励视频广告是一个单例(小游戏端是全局单例,小程序端是页面内单例,在小程序端的单例对象不允许跨页面使用)。 */ + createRewardedVideoAd( + option: CreateRewardedVideoAdOption + ): RewardedVideoAd + /** [[SelectorQuery](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/SelectorQuery.html) wx.createSelectorQuery()](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/wx.createSelectorQuery.html) +* +* 需要基础库: `1.4.0` +* +* 在插件中使用:需要基础库 `1.9.6` +* +* 返回一个 SelectorQuery 对象实例。在自定义组件或包含自定义组件的页面中,应使用 `this.createSelectorQuery()` 来代替。 +* +* **示例代码** +* +* ```js +const query = wx.createSelectorQuery() +query.select('#the-id').boundingClientRect() +query.selectViewport().scrollOffset() +query.exec(function(res){ + res[0].top // #the-id节点的上边界坐标 + res[1].scrollTop // 显示区域的竖直滚动位置 +}) +``` */ + createSelectorQuery(): SelectorQuery + /** [[SocketTask](https://developers.weixin.qq.com/miniprogram/dev/api/network/websocket/SocketTask.html) wx.connectSocket(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/network/websocket/wx.connectSocket.html) +* +* 在插件中使用:需要基础库 `1.9.6` +* +* @warning **推荐使用 [SocketTask](https://developers.weixin.qq.com/miniprogram/dev/api/network/websocket/SocketTask.html) 的方式去管理 webSocket 链接,每一条链路的生命周期都更加可控,同时存在多个 webSocket 的链接的情况下使用 wx 前缀的方法可能会带来一些和预期不一致的情况。** +* +* 创建一个 WebSocket 连接。使用前请注意阅读[相关说明](https://developers.weixin.qq.com/miniprogram/dev/framework/ability/network.html)。 +* +* **并发数** +* +* - 1.7.0 及以上版本,最多可以同时存在 5 个 WebSocket 连接。 +* - 1.7.0 以下版本,一个小程序同时只能有一个 WebSocket 连接,如果当前已存在一个 WebSocket 连接,会自动关闭该连接,并重新创建一个 WebSocket 连接。 +* +* **示例代码** +* +* ```js +wx.connectSocket({ + url: 'wss://example.qq.com', + header:{ + 'content-type': 'application/json' + }, + protocols: ['protocol1'] +}) +``` */ + connectSocket(option: ConnectSocketOption): SocketTask + /** [[TCPSocket](https://developers.weixin.qq.com/miniprogram/dev/api/network/tcp/TCPSocket.html) wx.createTCPSocket()](https://developers.weixin.qq.com/miniprogram/dev/api/network/tcp/wx.createTCPSocket.html) + * + * 需要基础库: `2.18.0` + * + * 在插件中使用:支持 + * + * 创建一个 TCP Socket 实例。使用前请注意阅读[相关说明](https://developers.weixin.qq.com/miniprogram/dev/framework/ability/network.html)。 + * + * **连接限制** + * + * - 允许与局域网内的非本机 IP 通信 + * - 允许与配置过的服务器域名通信,详见[相关说明](https://developers.weixin.qq.com/miniprogram/dev/framework/ability/network.html) + * - 禁止与以下端口号连接:`1024 以下` `1099` `1433` `1521` `1719` `1720` `1723` `2049` `2375` `3128` `3306` `3389` `3659` `4045` `5060` `5061` `5432` `5984` `6379` `6000` `6566` `7001` `7002` `8000-8100` `8443` `8888` `9200` `9300` `10051` `10080` `11211` `27017` `27018` `27019` + * - 每 5 分钟内最多创建 20 个 TCPSocket */ + createTCPSocket(): TCPSocket + /** [[UDPSocket](https://developers.weixin.qq.com/miniprogram/dev/api/network/udp/UDPSocket.html) wx.createUDPSocket()](https://developers.weixin.qq.com/miniprogram/dev/api/network/udp/wx.createUDPSocket.html) + * + * 需要基础库: `2.7.0` + * + * 在插件中使用:需要基础库 `2.11.1` + * + * 创建一个 UDP Socket 实例。使用前请注意阅读[相关说明](https://developers.weixin.qq.com/miniprogram/dev/framework/ability/network.html)。 */ + createUDPSocket(): UDPSocket + /** [[UpdateManager](https://developers.weixin.qq.com/miniprogram/dev/api/base/update/UpdateManager.html) wx.getUpdateManager()](https://developers.weixin.qq.com/miniprogram/dev/api/base/update/wx.getUpdateManager.html) + * + * 需要基础库: `1.9.90` + * + * 在插件中使用:不支持 + * + * 获取**全局唯一**的版本更新管理器,用于管理小程序更新。关于小程序的更新机制,可以查看[运行机制](https://developers.weixin.qq.com/miniprogram/dev/framework/runtime/operating-mechanism.html)文档。 + * + * **示例代码** + * + * [示例代码](https://developers.weixin.qq.com/miniprogram/dev/api/base/update/UpdateManager.html#示例代码) */ + getUpdateManager(): UpdateManager + /** [[UploadTask](https://developers.weixin.qq.com/miniprogram/dev/api/network/upload/UploadTask.html) wx.uploadFile(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/network/upload/wx.uploadFile.html) +* +* 在插件中使用:需要基础库 `1.9.6` +* +* 将本地资源上传到服务器。客户端发起一个 HTTPS POST 请求,其中 `content-type` 为 `multipart/form-data`。使用前请注意阅读[相关说明](https://developers.weixin.qq.com/miniprogram/dev/framework/ability/network.html)。 +* +* **示例代码** +* +* ```js +wx.chooseImage({ + success (res) { + const tempFilePaths = res.tempFilePaths + wx.uploadFile({ + url: 'https://example.weixin.qq.com/upload', //仅为示例,非真实的接口地址 + filePath: tempFilePaths[0], + name: 'file', + formData: { + 'user': 'test' + }, + success (res){ + const data = res.data + //do something + } + }) + } +}) +``` */ + uploadFile(option: UploadFileOption): UploadTask + /** [[UserCryptoManager](https://developers.weixin.qq.com/miniprogram/dev/api/base/crypto/UserCryptoManager.html) wx.getUserCryptoManager()](https://developers.weixin.qq.com/miniprogram/dev/api/base/crypto/wx.getUserCryptoManager.html) + * + * 需要基础库: `2.17.3` + * + * 在插件中使用:不支持 + * + * 获取用户加密模块 */ + getUserCryptoManager(): UserCryptoManager + /** [[VKSession](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/VKSession.html) wx.createVKSession(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/wx.createVKSession.html) +* +* 需要基础库: `2.20.0` +* +* 在插件中使用:需要基础库 `2.20.0` +* +* 创建 vision kit 会话对象。 +* +* **示例代码** +* +* v1 版本:[VisionKit基础能力使用参考](https://github.com/wechat-miniprogram/miniprogram-demo/tree/master/miniprogram/packageAPI/pages/ar/visionkit-basic) +* v2 版本:[VisionKit-v2基础能力使用参考](https://github.com/wechat-miniprogram/miniprogram-demo/tree/master/miniprogram/packageAPI/pages/ar/visionkit-basic-v2) +* ```js +// 以下 demo 以 v2 为例 +// 创建 session 对象 +const ssession = wx.createVKSession({ + track: { + plane: {mode: 3}, + }, + version: 'v2', + gl, // WebGLRenderingContext +}) + +// 逐帧分析 +const onFrame = timestamp => { + // 开发者可以自己控制帧率 + const frame = session.getVKFrame(canvasWidth, canvasHeight) + if (frame) { + // 分析完毕,可以拿到帧对象 + doRender(frame) + } + + session.requestAnimationFrame(onFrame) +} +session.start(err => { + if (!err) session.requestAnimationFrame(onFrame) +}) + +// 渲染函数 +const doRender = frame => { + // ... +} +``` */ + createVKSession(option: VKConfig): VKSession + /** [[VideoContext](https://developers.weixin.qq.com/miniprogram/dev/api/media/video/VideoContext.html) wx.createVideoContext(string id, Object this)](https://developers.weixin.qq.com/miniprogram/dev/api/media/video/wx.createVideoContext.html) + * + * 在插件中使用:需要基础库 `1.9.6` + * + * 创建 [video](https://developers.weixin.qq.com/miniprogram/dev/component/video.html) 上下文 [VideoContext](https://developers.weixin.qq.com/miniprogram/dev/api/media/video/VideoContext.html) 对象。建议使用 [wx.createSelectorQuery](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/wx.createSelectorQuery.html) 获取 context 对象。 */ + createVideoContext( + /** [video](https://developers.weixin.qq.com/miniprogram/dev/component/video.html) 组件的 id */ + id: string, + /** 在自定义组件下,当前组件实例的this,以操作组件内 [video](https://developers.weixin.qq.com/miniprogram/dev/component/video.html) 组件 */ + component?: Component.TrivialInstance | Page.TrivialInstance + ): VideoContext + /** [[VideoDecoder](https://developers.weixin.qq.com/miniprogram/dev/api/media/video-decoder/VideoDecoder.html) wx.createVideoDecoder()](https://developers.weixin.qq.com/miniprogram/dev/api/media/video-decoder/wx.createVideoDecoder.html) + * + * 需要基础库: `2.11.0` + * + * 在插件中使用:需要基础库 `2.11.0` + * + * 创建视频解码器,可逐帧获取解码后的数据 */ + createVideoDecoder(): VideoDecoder + /** [[WebAudioContext](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/WebAudioContext.html) wx.createWebAudioContext()](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/wx.createWebAudioContext.html) + * + * 需要基础库: `2.19.0` + * + * 在插件中使用:不支持 + * + * 创建 WebAudio 上下文。 */ + createWebAudioContext(): WebAudioContext + /** [[Worker](https://developers.weixin.qq.com/miniprogram/dev/api/worker/Worker.html) wx.createWorker(string scriptPath, object options)](https://developers.weixin.qq.com/miniprogram/dev/api/worker/wx.createWorker.html) +* +* 需要基础库: `1.9.90` +* +* 在插件中使用:需要基础库 `2.18.1` +* +* 创建一个 Worker 线程 +* +* **示例代码** +* +* ```js +// 创建普通worker +wx.createWorker('workers/index.js') +``` +* ```js +function createNewWorker() { + const worker = wx.createWorker('workers/index.js', { + useExperimentalWorker: true + }) + // 监听worker被系统回收事件 + worker.onProcessKilled(() => { + // 重新创建一个worker + createNewWorker() + }) +} +// 创建实验worker +createNewWorker() +``` */ + createWorker( + /** worker 入口文件的**绝对路径** */ + scriptPath: string, + /** 可选参数 */ + options?: CreateWorkerOption + ): Worker + /** [any wx.getStorageSync(string key)](https://developers.weixin.qq.com/miniprogram/dev/api/storage/wx.getStorageSync.html) +* +* 在插件中使用:需要基础库 `1.9.6` +* +* 从本地缓存中同步获取指定 key 的内容。 +* +* **注意** +* +* storage 应只用来进行数据的持久化存储,不应用于运行时的数据传递或全局状态管理。启动过程中过多的同步读写存储,会显著影响启动耗时。 +* +* **示例代码** +* +* ```js +try { + var value = wx.getStorageSync('key') + if (value) { + // Do something with return value + } +} catch (e) { + // Do something when catch error +} +``` */ + getStorageSync<T = any>( + /** 本地缓存中指定的 key */ + key: string + ): T + /** [boolean wx.canIUse(string schema)](https://developers.weixin.qq.com/miniprogram/dev/api/base/wx.canIUse.html) +* +* 需要基础库: `1.1.1` +* +* 在插件中使用:不支持 +* +* 判断小程序的API,回调,参数,组件等是否在当前版本可用。 +* +* **参数说明** +* +* - `${API}` 代表 API 名字 +* - `${method}` 代表调用方式,有效值为return, success, object, callback +* - `${param}` 代表参数或者返回值 +* - `${option}` 代表参数的可选值或者返回值的属性 +* - `${component}` 代表组件名字 +* - `${attribute}` 代表组件属性 +* - `${option}` 代表组件属性的可选值 +* +* **示例代码** +* +* ```js +// 对象的属性或方法 +wx.canIUse('console.log') +wx.canIUse('CameraContext.onCameraFrame') +wx.canIUse('CameraFrameListener.start') +wx.canIUse('Image.src') + +// wx接口参数、回调或者返回值 +wx.canIUse('openBluetoothAdapter') +wx.canIUse('getSystemInfoSync.return.safeArea.left') +wx.canIUse('getSystemInfo.success.screenWidth') +wx.canIUse('showToast.object.image') +wx.canIUse('onCompassChange.callback.direction') +wx.canIUse('request.object.method.GET') + +// 组件的属性 +wx.canIUse('live-player') +wx.canIUse('text.selectable') +wx.canIUse('button.open-type.contact') +``` */ + canIUse( + /** 使用 `${API}.${method}.${param}.${option}` 或者 `${component}.${attribute}.${option}` 方式来调用 */ + schema: string + ): boolean + /** [boolean wx.isVKSupport(string version)](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/wx.isVKSupport.html) +* +* 需要基础库: `2.22.0` +* +* 在插件中使用:需要基础库 `2.22.0` +* +* 判断支持版本 +* +* **示例代码** +* +* ```js +const isSupportV2 = wx.isVKSupport('v2') +``` */ + isVKSupport( + /** 参数 version 可选值: + * - 'v1': 旧版本; + * - 'v2': v2 版本,目前只有 iOS 基础库 2.22.0 以上支持; */ + version: 'v1' | 'v2' + ): boolean + /** [string wx.arrayBufferToBase64(ArrayBuffer arrayBuffer)](https://developers.weixin.qq.com/miniprogram/dev/api/base/wx.arrayBufferToBase64.html) + * + * 需要基础库: `1.1.0` + * + * 在插件中使用:支持 + * @deprecated 基础库版本 [2.4.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃 + * + * 将 ArrayBuffer 对象转成 Base64 字符串 */ + arrayBufferToBase64( + /** 要转换成 Base64 字符串的 ArrayBuffer 对象 */ + arrayBuffer: ArrayBuffer + ): string + /** [wx.addCard(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/card/wx.addCard.html) +* +* 需要基础库: `1.1.0` +* +* 在插件中使用:不支持 +* +* 批量添加卡券。只有通过 [认证](https://developers.weixin.qq.com/miniprogram/product/renzheng.html) 的小程序或文化互动类目的小游戏才能使用。更多文档请参考 [微信卡券接口文档](https://mp.weixin.qq.com/cgi-bin/announce?action=getannouncement&key=1490190158&version=1&lang=zh_CN&platform=2)。 +* +* **cardExt 说明** +* +* cardExt 是卡券的扩展参数,其值是一个 JSON 字符串。 +* +* **示例代码** +* +* ```js +wx.addCard({ + cardList: [ + { + cardId: '', + cardExt: '{"code": "", "openid": "", "timestamp": "", "signature":""}' + }, { + cardId: '', + cardExt: '{"code": "", "openid": "", "timestamp": "", "signature":""}' + } + ], + success (res) { + console.log(res.cardList) // 卡券添加结果 + } +}) +``` */ + addCard<T extends AddCardOption = AddCardOption>( + option: T + ): PromisifySuccessResult<T, AddCardOption> + /** [wx.addFileToFavorites(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/favorites/wx.addFileToFavorites.html) + * + * 需要基础库: `2.16.1` + * + * 在插件中使用:不支持 + * + * 收藏文件 */ + addFileToFavorites< + T extends AddFileToFavoritesOption = AddFileToFavoritesOption + >( + option: T + ): PromisifySuccessResult<T, AddFileToFavoritesOption> + /** [wx.addPhoneCalendar(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/calendar/wx.addPhoneCalendar.html) + * + * 需要基础库: `2.15.0` + * + * 在插件中使用:不支持 + * + * 向系统日历添加事件 */ + addPhoneCalendar< + T extends AddPhoneCalendarOption = AddPhoneCalendarOption + >( + option: T + ): PromisifySuccessResult<T, AddPhoneCalendarOption> + /** [wx.addPhoneContact(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/contact/wx.addPhoneContact.html) + * + * 需要基础库: `1.2.0` + * + * 在插件中使用:需要基础库 `1.9.6` + * + * 添加手机通讯录联系人。用户可以选择将该表单以「新增联系人」或「添加到已有联系人」的方式,写入手机系统通讯录。 */ + addPhoneContact< + T extends AddPhoneContactOption = AddPhoneContactOption + >( + option: T + ): PromisifySuccessResult<T, AddPhoneContactOption> + /** [wx.addPhoneRepeatCalendar(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/calendar/wx.addPhoneRepeatCalendar.html) + * + * 需要基础库: `2.15.0` + * + * 在插件中使用:不支持 + * + * 向系统日历添加重复事件 */ + addPhoneRepeatCalendar< + T extends AddPhoneRepeatCalendarOption = AddPhoneRepeatCalendarOption + >( + option: T + ): PromisifySuccessResult<T, AddPhoneRepeatCalendarOption> + /** [wx.addVideoToFavorites(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/favorites/wx.addVideoToFavorites.html) + * + * 需要基础库: `2.16.1` + * + * 在插件中使用:不支持 + * + * 收藏视频 */ + addVideoToFavorites< + T extends AddVideoToFavoritesOption = AddVideoToFavoritesOption + >( + option: T + ): PromisifySuccessResult<T, AddVideoToFavoritesOption> + /** [wx.authPrivateMessage(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/share/wx.authPrivateMessage.html) +* +* 需要基础库: `2.13.0` +* +* 在插件中使用:不支持 +* +* 验证私密消息。用法详情见 [小程序私密消息使用指南](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/share/private-message.html) +* +* **示例代码** +* +* ```js +wx.authPrivateMessage({ + shareTicket: 'xxxxxx', + success(res) { + console.log('authPrivateMessage success', res) + // res + // { + // errMsg: 'authPrivateMessage:ok' + // valid: true + // iv: 'xxxx', + // encryptedData: 'xxxxxx' + // } + }, + fail(res) { + console.log('authPrivateMessage fail', res) + } +}) +``` */ + authPrivateMessage(option?: AuthPrivateMessageOption): void + /** [wx.authorize(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/authorize/wx.authorize.html) +* +* 需要基础库: `1.2.0` +* +* 在插件中使用:不支持 +* +* 提前向用户发起授权请求。调用后会立刻弹窗询问用户是否同意授权小程序使用某项功能或获取用户的某些数据,但不会实际调用对应接口。如果用户之前已经同意授权,则不会出现弹窗,直接返回成功。更多用法详见 [用户授权](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/authorize.html)。 +* > 小程序插件可以使用 [wx.authorizeForMiniProgram](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/authorize/wx.authorizeForMiniProgram.html) +* +* **示例代码** +* +* ```js +// 可以通过 wx.getSetting 先查询一下用户是否授权了 "scope.record" 这个 scope +wx.getSetting({ + success(res) { + if (!res.authSetting['scope.record']) { + wx.authorize({ + scope: 'scope.record', + success () { + // 用户已经同意小程序使用录音功能,后续调用 wx.startRecord 接口不会弹窗询问 + wx.startRecord() + } + }) + } + } +}) +``` */ + authorize<T extends AuthorizeOption = AuthorizeOption>( + option: T + ): PromisifySuccessResult<T, AuthorizeOption> + /** [wx.authorizeForMiniProgram(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/authorize/wx.authorizeForMiniProgram.html) +* +* 需要基础库: `2.14.4` +* +* 在插件中使用:需要基础库 `2.14.4` +* +* **仅小程序插件中能调用该接口**,用法同 [wx.authorize](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/authorize/wx.authorize.html)。目前仅支持三种 scope(见下) +* +* **示例代码** +* +* ```js +wx.authorizeForMiniProgram({ + scope: 'scope.record', + success () { + // 用户已经同意小程序使用录音功能,后续调用 wx.startRecord 接口不会弹窗询问 + wx.startRecord() + } +}) +``` */ + authorizeForMiniProgram(option: AuthorizeForMiniProgramOption): void + /** [wx.batchGetStorage(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/storage/wx.batchGetStorage.html) +* +* 需要基础库: `2.25.0` +* +* 在插件中使用:不支持 +* +* 从本地缓存中异步批量获取指定 key 的内容。 +* +* **示例代码** +* +* ```js +wx.batchGetStorage({ + keyList: ['key'], + success (res) { + console.log(res) + } +}) +``` */ + batchGetStorage< + T extends BatchGetStorageOption = BatchGetStorageOption + >( + option: T + ): PromisifySuccessResult<T, BatchGetStorageOption> + /** [wx.batchSetStorage(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/storage/wx.batchSetStorage.html) +* +* 需要基础库: `2.25.0` +* +* 在插件中使用:需要基础库 `1.9.6` +* +* 将数据批量存储在本地缓存中指定的 key 中。会覆盖掉原来该 key 对应的内容。除非用户主动删除或因存储空间原因被系统清理,否则数据都一直可用。单个 key 允许存储的最大数据长度为 1MB,所有数据存储上限为 10MB。 +* +* **示例代码** +* +* ```js +wx.setStorage({ + key:"key", + data:"value" +}) +``` +* +* ```js +// 开启加密存储 +wx.batchSetStorage({ + kvList: { + key: 'key', + value: 'value', + } +}) +``` */ + batchSetStorage< + T extends BatchSetStorageOption = BatchSetStorageOption + >( + option: T + ): PromisifySuccessResult<T, BatchSetStorageOption> + /** [wx.batchSetStorageSync(KVArray kvList)](https://developers.weixin.qq.com/miniprogram/dev/api/storage/wx.batchSetStorageSync.html) +* +* 需要基础库: `2.25.0` +* +* 在插件中使用:需要基础库 `1.9.6` +* +* 将数据批量存储在本地缓存中指定的 key 中。会覆盖掉原来该 key 对应的内容。除非用户主动删除或因存储空间原因被系统清理,否则数据都一直可用。单个 key 允许存储的最大数据长度为 1MB,所有数据存储上限为 10MB。 +* +* **示例代码** +* +* ```js +try { + wx.batchSetStorageSync([{key: 'key', value: 'value'}]) +} catch (e) { } +``` */ + batchSetStorageSync(kvList: KVArray): void + /** [wx.canvasGetImageData(Object object, Object this)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/wx.canvasGetImageData.html) +* +* 需要基础库: `1.9.0` +* +* 在插件中使用:需要基础库 `1.9.6` +* +* 获取 canvas 区域隐含的像素数据。 +* +* **示例代码** +* +* [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/yufmRjmZ7W8f) +* +* ```js +wx.canvasGetImageData({ + canvasId: 'myCanvas', + x: 0, + y: 0, + width: 100, + height: 100, + success(res) { + console.log(res.width) // 100 + console.log(res.height) // 100 + console.log(res.data instanceof Uint8ClampedArray) // true + console.log(res.data.length) // 100 * 100 * 4 + } +}) +``` */ + canvasGetImageData< + T extends CanvasGetImageDataOption = CanvasGetImageDataOption + >( + option: T, + /** 在自定义组件下,当前组件实例的this,以操作组件内 [canvas](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 组件 */ + component?: Component.TrivialInstance | Page.TrivialInstance + ): PromisifySuccessResult<T, CanvasGetImageDataOption> + /** [wx.canvasPutImageData(Object object, Object this)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/wx.canvasPutImageData.html) + * + * 需要基础库: `1.9.0` + * + * 在插件中使用:需要基础库 `1.9.6` + * + * 将像素数据绘制到画布。在自定义组件下,第二个参数传入自定义组件实例 this,以操作组件内 <canvas> 组件 */ + canvasPutImageData< + T extends CanvasPutImageDataOption = CanvasPutImageDataOption + >( + option: T, + /** 在自定义组件下,当前组件实例的this,以操作组件内 [canvas](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 组件 */ + component?: Component.TrivialInstance | Page.TrivialInstance + ): PromisifySuccessResult<T, CanvasPutImageDataOption> + /** [wx.canvasToTempFilePath(Object object, Object this)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/wx.canvasToTempFilePath.html) + * + * 在插件中使用:需要基础库 `1.9.6` + * + * 把当前画布指定区域的内容导出生成指定大小的图片。在 `draw()` 回调里调用该方法才能保证图片导出成功。 */ + canvasToTempFilePath< + T extends CanvasToTempFilePathOption = CanvasToTempFilePathOption + >( + option: T, + /** 在自定义组件下,当前组件实例的this,以操作组件内 [canvas](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 组件 */ + component?: Component.TrivialInstance | Page.TrivialInstance + ): PromisifySuccessResult<T, CanvasToTempFilePathOption> + /** [wx.checkIsOpenAccessibility(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/accessibility/wx.checkIsOpenAccessibility.html) + * + * 需要基础库: `2.13.0` + * + * 在插件中使用:不支持 + * + * 检测是否开启视觉无障碍功能。 */ + checkIsOpenAccessibility< + T extends CheckIsOpenAccessibilityOption = CheckIsOpenAccessibilityOption + >( + option?: T + ): PromisifySuccessResult<T, CheckIsOpenAccessibilityOption> + /** [wx.checkIsSoterEnrolledInDevice(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/soter/wx.checkIsSoterEnrolledInDevice.html) +* +* 需要基础库: `1.6.0` +* +* 在插件中使用:不支持 +* +* 获取设备内是否录入如指纹等生物信息的接口 +* +* **示例代码** +* +* ```js +wx.checkIsSoterEnrolledInDevice({ + checkAuthMode: 'fingerPrint', + success(res) { + console.log(res.isEnrolled) + } +}) +``` */ + checkIsSoterEnrolledInDevice< + T extends CheckIsSoterEnrolledInDeviceOption = CheckIsSoterEnrolledInDeviceOption + >( + option: T + ): PromisifySuccessResult<T, CheckIsSoterEnrolledInDeviceOption> + /** [wx.checkIsSupportSoterAuthentication(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/soter/wx.checkIsSupportSoterAuthentication.html) +* +* 需要基础库: `1.5.0` +* +* 在插件中使用:不支持 +* +* 获取本机支持的 SOTER 生物认证方式 +* +* **示例代码** +* +* ```js +wx.checkIsSupportSoterAuthentication({ + success(res) { + // res.supportMode = [] 不具备任何被SOTER支持的生物识别方式 + // res.supportMode = ['fingerPrint'] 只支持指纹识别 + // res.supportMode = ['fingerPrint', 'facial'] 支持指纹识别和人脸识别 + } +}) +``` */ + checkIsSupportSoterAuthentication< + T extends CheckIsSupportSoterAuthenticationOption = CheckIsSupportSoterAuthenticationOption + >( + option?: T + ): PromisifySuccessResult<T, CheckIsSupportSoterAuthenticationOption> + /** [wx.checkSession(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/login/wx.checkSession.html) +* +* 在插件中使用:不支持 +* +* 检查登录态是否过期。 +* 通过 wx.login 接口获得的用户登录态拥有一定的时效性。用户越久未使用小程序,用户登录态越有可能失效。反之如果用户一直在使用小程序,则用户登录态一直保持有效。具体时效逻辑由微信维护,对开发者透明。开发者只需要调用 wx.checkSession 接口检测当前用户登录态是否有效。 +* +* 登录态过期后开发者可以再调用 wx.login 获取新的用户登录态。调用成功说明当前 session_key 未过期,调用失败说明 session_key 已过期。 +* +* **示例代码** +* +* ```js +wx.checkSession({ + success () { + //session_key 未过期,并且在本生命周期一直有效 + }, + fail () { + // session_key 已经失效,需要重新执行登录流程 + wx.login() //重新登录 + } +}) +``` */ + checkSession<T extends CheckSessionOption = CheckSessionOption>( + option?: T + ): PromisifySuccessResult<T, CheckSessionOption> + /** [wx.chooseAddress(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/address/wx.chooseAddress.html) +* +* 需要基础库: `1.1.0` +* +* 在插件中使用:需要基础库 `2.16.1` +* +* 获取用户收货地址。调起用户编辑收货地址原生界面,并在编辑完成后返回用户选择的地址。 +* ## 使用方法 +* 自 2022 年 7 月 14 日后发布的小程序,若使用该接口,需要在 app.json 中进行声明,否则将无法正常使用该接口,2022年7月14日前发布的小程序不受影响。[具体规则见公告](https://developers.weixin.qq.com/community/develop/doc/000a02f2c5026891650e7f40351c01) +* ## 申请开通 +* 暂只针对具备与地理位置强相关的使用场景的小程序开放,在小程序管理后台,「开发」-「开发管理」-「接口设置」中自助开通该接口权限。 +* 接口权限申请入口将于2022年3月11日开始内测,于3月31日全量上线。并从4月18日开始,在代码审核环节将检测该接口是否已完成开通,如未开通,将在代码提审环节进行拦截。 +* +* **示例代码** +* +* [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/024hHnmd772y) +* ```js +wx.chooseAddress({ + success (res) { + console.log(res.userName) + console.log(res.postalCode) + console.log(res.provinceName) + console.log(res.cityName) + console.log(res.countyName) + console.log(res.detailInfo) + console.log(res.nationalCode) + console.log(res.telNumber) + } +}) +``` */ + chooseAddress<T extends ChooseAddressOption = ChooseAddressOption>( + option?: T + ): PromisifySuccessResult<T, ChooseAddressOption> + /** [wx.chooseContact(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/contact/wx.chooseContact.html) + * + * 需要基础库: `2.8.0` + * + * 在插件中使用:不支持 + * + * 拉起手机通讯录,选择联系人。 */ + chooseContact(option?: ChooseContactOption): void + /** [wx.chooseImage(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/image/wx.chooseImage.html) +* +* 在插件中使用:需要基础库 `1.9.6` +* @deprecated 基础库版本 [2.21.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [wx.chooseMedia](https://developers.weixin.qq.com/miniprogram/dev/api/media/video/wx.chooseMedia.html) 替换 +* +* 从本地相册选择图片或使用相机拍照。 +* +* **** +* +* ```js +wx.chooseImage({ + count: 1, + sizeType: ['original', 'compressed'], + sourceType: ['album', 'camera'], + success (res) { + // tempFilePath可以作为img标签的src属性显示图片 + const tempFilePaths = res.tempFilePaths + } +}) +``` */ + chooseImage<T extends ChooseImageOption = ChooseImageOption>( + option?: T + ): PromisifySuccessResult<T, ChooseImageOption> + /** [wx.chooseInvoice(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/invoice/wx.chooseInvoice.html) + * + * 需要基础库: `2.3.0` + * + * 在插件中使用:需要基础库 `2.16.1` + * + * 选择用户已有的发票。 + * + * **通过 cardId 和 encryptCode 获得报销发票的信息** + * + * 请参考[微信电子发票文档](https://mp.weixin.qq.com/wiki?t=resource/res_main&id=21517918939oae3U)中,「查询报销发票信息」部分。 + * 其中 `access_token` 的获取请参考[auth.getAccessToken](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/access-token/auth.getAccessToken.html)文档 */ + chooseInvoice<T extends ChooseInvoiceOption = ChooseInvoiceOption>( + option?: T + ): PromisifySuccessResult<T, ChooseInvoiceOption> + /** [wx.chooseInvoiceTitle(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/invoice/wx.chooseInvoiceTitle.html) +* +* 需要基础库: `1.5.0` +* +* 在插件中使用:需要基础库 `2.16.1` +* +* 选择用户的发票抬头。当前小程序必须关联一个公众号,且这个公众号是完成了[微信认证](https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1496554031_RD4xe)的,才能调用 chooseInvoiceTitle。 +* +* **示例代码** +* +* [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/GJ4S9nmQ7x2E) +* +* ```js +wx.chooseInvoiceTitle({ + success(res) {} +}) +``` */ + chooseInvoiceTitle< + T extends ChooseInvoiceTitleOption = ChooseInvoiceTitleOption + >( + option?: T + ): PromisifySuccessResult<T, ChooseInvoiceTitleOption> + /** [wx.chooseLicensePlate(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/license-plate/wx.chooseLicensePlate.html) + * + * 需要基础库: `2.19.0` + * + * 在插件中使用:不支持 + * + * 选择车牌号 */ + chooseLicensePlate< + T extends ChooseLicensePlateOption = ChooseLicensePlateOption + >( + option?: T + ): PromisifySuccessResult<T, ChooseLicensePlateOption> + /** [wx.chooseLocation(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/location/wx.chooseLocation.html) + * + * 在插件中使用:需要基础库 `1.9.6` + * + * @warning **为确保选择地理位置接口的合理使用,位置接口调整参考 [选择地理位置接口调整公告](https://developers.weixin.qq.com/community/develop/doc/0006e45df2cac030e6edf367c56001)** + * + * 打开地图选择位置。 + * ## 使用方法 + * 自 2022 年 7 月 14 日后发布的小程序,若使用该接口,需要在 app.json 中进行声明,否则将无法正常使用该接口,2022年7月14日前发布的小程序不受影响。[具体规则见公告](https://developers.weixin.qq.com/community/develop/doc/000a02f2c5026891650e7f40351c01) + * ## 申请开通 + * 暂只针对具备与地理位置强相关的使用场景的小程序开放,在小程序管理后台,「开发」-「开发管理」-「接口设置」中自助开通该接口权限。 + * 接口权限申请入口将于2022年3月11日开始内测,于3月31日全量上线。并从4月18日开始,在代码审核环节将检测该接口是否已完成开通,如未开通,将在代码提审环节进行拦截。 + * + * **示例** + * + * ![](https://res.wx.qq.com/op_res/WDFC8aB4FI8rJ9oEmbYfbH_Fl3EIv91471YVxezVfLRESkUuCgfODZcbOoyteKU4j-OLZa2EFKY9BDPd3g-tfg) */ + chooseLocation<T extends ChooseLocationOption = ChooseLocationOption>( + option: T + ): PromisifySuccessResult<T, ChooseLocationOption> + /** [wx.chooseMedia(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/video/wx.chooseMedia.html) +* +* 需要基础库: `2.10.0` +* +* 在插件中使用:需要基础库 `2.11.1` +* +* 拍摄或从手机相册中选择图片或视频。 +* +* **示例代码** +* +* ```js +wx.chooseMedia({ + count: 9, + mediaType: ['image','video'], + sourceType: ['album', 'camera'], + maxDuration: 30, + camera: 'back', + success(res) { + console.log(res.tempFiles.tempFilePath) + console.log(res.tempFiles.size) + } +}) +``` */ + chooseMedia<T extends ChooseMediaOption = ChooseMediaOption>( + option: T + ): PromisifySuccessResult<T, ChooseMediaOption> + /** [wx.chooseMessageFile(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/image/wx.chooseMessageFile.html) +* +* 需要基础库: `2.5.0` +* +* 在插件中使用:不支持 +* +* 从客户端会话选择文件。 +* +* **** +* +* ```js +wx.chooseMessageFile({ + count: 10, + type: 'image', + success (res) { + // tempFilePath可以作为img标签的src属性显示图片 + const tempFilePaths = res.tempFiles + } +}) +``` */ + chooseMessageFile< + T extends ChooseMessageFileOption = ChooseMessageFileOption + >( + option: T + ): PromisifySuccessResult<T, ChooseMessageFileOption> + /** [wx.choosePoi(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/location/wx.choosePoi.html) + * + * 在插件中使用:不支持 + * + * @warning **为确保选择地理位置接口的合理使用,位置接口调整参考 [选择地理位置接口调整公告](https://developers.weixin.qq.com/community/develop/doc/0006e45df2cac030e6edf367c56001)** + * + * 打开POI列表选择位置,支持模糊定位(精确到市)和精确定位混选。 + * ## 使用方法 + * 自 2022 年 7 月 14 日后发布的小程序,若使用该接口,需要在 app.json 中进行声明,否则将无法正常使用该接口,2022年7月14日前发布的小程序不受影响。[具体规则见公告](https://developers.weixin.qq.com/community/develop/doc/000a02f2c5026891650e7f40351c01) + * ## 申请开通 + * 暂只针对具备与地理位置强相关的使用场景的小程序开放,在小程序管理后台,「开发」-「开发管理」-「接口设置」中自助开通该接口权限。 + * 接口权限申请入口将于2022年3月11日开始内测,于3月31日全量上线。并从4月18日开始,在代码审核环节将检测该接口是否已完成开通,如未开通,将在代码提审环节进行拦截。 + * + * **示例** + * + * ![](https://res.wx.qq.com/op_res/lzDsNyBNifLczyLX0ms7ZpPQysgAgdhrQTGzzTQPiXkAB2HJIf1Slvl4rnN9I1q0AT3xqoGTg98jMsNexDLbbA) */ + choosePoi<T extends ChoosePoiOption = ChoosePoiOption>( + option: T + ): PromisifySuccessResult<T, ChoosePoiOption> + /** [wx.chooseVideo(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/video/wx.chooseVideo.html) +* +* 在插件中使用:需要基础库 `1.9.6` +* @deprecated 基础库版本 [2.21.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [wx.chooseMedia](https://developers.weixin.qq.com/miniprogram/dev/api/media/video/wx.chooseMedia.html) 替换 +* +* 拍摄视频或从手机相册中选视频。 +* +* **示例代码** +* +* ```js +wx.chooseVideo({ + sourceType: ['album','camera'], + maxDuration: 60, + camera: 'back', + success(res) { + console.log(res.tempFilePath) + } +}) +``` */ + chooseVideo<T extends ChooseVideoOption = ChooseVideoOption>( + option: T + ): PromisifySuccessResult<T, ChooseVideoOption> + /** [wx.clearStorage(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/storage/wx.clearStorage.html) +* +* 在插件中使用:不支持 +* +* 清理本地数据缓存。 +* +* **示例代码** +* +* ```js +wx.clearStorage() +``` +* +* ```js +try { + wx.clearStorageSync() +} catch(e) { + // Do something when catch error +} +``` */ + clearStorage<T extends ClearStorageOption = ClearStorageOption>( + option?: T + ): PromisifySuccessResult<T, ClearStorageOption> + /** [wx.clearStorageSync()](https://developers.weixin.qq.com/miniprogram/dev/api/storage/wx.clearStorageSync.html) +* +* 在插件中使用:不支持 +* +* [wx.clearStorage](https://developers.weixin.qq.com/miniprogram/dev/api/storage/wx.clearStorage.html) 的同步版本 +* +* **示例代码** +* +* ```js +wx.clearStorage() +``` +* +* ```js +try { + wx.clearStorageSync() +} catch(e) { + // Do something when catch error +} +``` */ + clearStorageSync(): void + /** [wx.closeBLEConnection(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.closeBLEConnection.html) +* +* 需要基础库: `1.1.0` +* +* 在插件中使用:需要基础库 `1.9.6` +* +* 断开与蓝牙低功耗设备的连接。 +* +* **示例代码** +* +* [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/pQU51zmz7a3K) +* ```js +wx.closeBLEConnection({ + deviceId, + success (res) { + console.log(res) + } +}) +``` */ + closeBLEConnection< + T extends CloseBLEConnectionOption = CloseBLEConnectionOption + >( + option: T + ): PromisifySuccessResult<T, CloseBLEConnectionOption> + /** [wx.closeBluetoothAdapter(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth/wx.closeBluetoothAdapter.html) +* +* 需要基础库: `1.1.0` +* +* 在插件中使用:需要基础库 `1.9.6` +* +* 关闭蓝牙模块。调用该方法将断开所有已建立的连接并释放系统资源。建议在使用蓝牙流程后,与 [wx.openBluetoothAdapter](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth/wx.openBluetoothAdapter.html) 成对调用。 +* +* **示例代码** +* +* [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/pQU51zmz7a3K) +* ```js +wx.closeBluetoothAdapter({ + success (res) { + console.log(res) + } +}) +``` */ + closeBluetoothAdapter< + T extends CloseBluetoothAdapterOption = CloseBluetoothAdapterOption + >( + option?: T + ): PromisifySuccessResult<T, CloseBluetoothAdapterOption> + /** [wx.closeSocket(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/network/websocket/wx.closeSocket.html) +* +* 在插件中使用:不支持 +* +* @warning **推荐使用 [SocketTask](https://developers.weixin.qq.com/miniprogram/dev/api/network/websocket/SocketTask.html) 的方式去管理 webSocket 链接,每一条链路的生命周期都更加可控,同时存在多个 webSocket 的链接的情况下使用 wx 前缀的方法可能会带来一些和预期不一致的情况。** +* +* 关闭 WebSocket 连接。 +* +* **示例代码** +* +* ```js +wx.connectSocket({ + url: 'test.php' +}) + +//注意这里有时序问题, +//如果 wx.connectSocket 还没回调 wx.onSocketOpen,而先调用 wx.closeSocket,那么就做不到关闭 WebSocket 的目的。 +//必须在 WebSocket 打开期间调用 wx.closeSocket 才能关闭。 +wx.onSocketOpen(function() { + wx.closeSocket() +}) + +wx.onSocketClose(function(res) { + console.log('WebSocket 已关闭!') +}) +``` */ + closeSocket<T extends CloseSocketOption = CloseSocketOption>( + option?: T + ): PromisifySuccessResult<T, CloseSocketOption> + /** [wx.compressImage(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/image/wx.compressImage.html) +* +* 需要基础库: `2.4.0` +* +* 在插件中使用:需要基础库 `2.12.0` +* +* 压缩图片接口,可选压缩质量 +* +* **示例代码** +* +* ```js +wx.compressImage({ + src: '', // 图片路径 + quality: 80 // 压缩质量 +}) +``` */ + compressImage<T extends CompressImageOption = CompressImageOption>( + option: T + ): PromisifySuccessResult<T, CompressImageOption> + /** [wx.compressVideo(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/video/wx.compressVideo.html) + * + * 需要基础库: `2.11.0` + * + * 在插件中使用:需要基础库 `2.11.1` + * + * 压缩视频接口。开发者可指定压缩质量 `quality` 进行压缩。当需要更精细的控制时,可指定 `bitrate`、`fps`、和 `resolution`,当 `quality` 传入时,这三个参数将被忽略。原视频的相关信息可通过 [getVideoInfo](https://developers.weixin.qq.com/miniprogram/dev/api/media/video/wx.getVideoInfo.html) 获取。 */ + compressVideo<T extends CompressVideoOption = CompressVideoOption>( + option: T + ): PromisifySuccessResult<T, CompressVideoOption> + /** [wx.connectWifi(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/wifi/wx.connectWifi.html) +* +* 需要基础库: `1.6.0` +* +* 在插件中使用:需要基础库 `2.9.1` +* +* 连接 Wi-Fi。若已知 Wi-Fi 信息,可以直接利用该接口连接。仅 Android 与 iOS 11 以上版本支持。 +* +* **示例代码** +* +* ```js +wx.connectWifi({ + SSID: '', + password: '', + success (res) { + console.log(res.errMsg) + } +}) +``` +* +* **注意** +* +* - Android 微信客户端 7.0.22 以上版本,connectWifi 的实现在 Android 10 及以上的手机无法生效,对于 Android 10 及以上版本,设备连接 wifi 之后,(受系统能力限制)其他进程无法使用当前连接的 wifi ;即连接上的 wifi 只对当前小程序有效,如果想要对整个系统生效,需要配置 maunal 来连接 wifi。 +* - iOS 系统底层没有给开发者提供因 wifi 密码错误而连接失败的事件,但用户可以收到密码错误的系统弹窗。建议开发者通过 onWifiConnected 事件来判断 wifi 是否连接成功;即设置定时器,若超时后仍没有 onWifiConnected 事件,则认定此次 wifi 连接无效。 +* - Android / iOS 在系统已经连上目标 wifi 的情况下,小程序再次连接目标 wifi,此时无论输入的密码是否正确,系统都会默认此次连接成功,且没有 onWifiConnected 事件。 +* - onWifiConnected 事件可能会返回空对象,此时代表 wifi 断开连接,开发者可忽略这种情况。 */ + connectWifi<T extends ConnectWifiOption = ConnectWifiOption>( + option: T + ): PromisifySuccessResult<T, ConnectWifiOption> + /** [wx.createBLEConnection(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.createBLEConnection.html) +* +* 需要基础库: `1.1.0` +* +* 在插件中使用:需要基础库 `1.9.6` +* +* 连接蓝牙低功耗设备。 +* +* 若小程序在之前已有搜索过某个蓝牙设备,并成功建立连接,可直接传入之前搜索获取的 deviceId 直接尝试连接该设备,无需再次进行搜索操作。 +* +* **注意** +* +* - 请保证尽量成对的调用 [wx.createBLEConnection](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.createBLEConnection.html) 和 [wx.closeBLEConnection](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.closeBLEConnection.html) 接口。安卓如果重复调用 [wx.createBLEConnection](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.createBLEConnection.html) 创建连接,有可能导致系统持有同一设备多个连接的实例,导致调用 `closeBLEConnection` 的时候并不能真正的断开与设备的连接。 +* - 蓝牙连接随时可能断开,建议监听 [wx.onBLEConnectionStateChange](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.onBLEConnectionStateChange.html) 回调事件,当蓝牙设备断开时按需执行重连操作 +* - 若对未连接的设备或已断开连接的设备调用数据读写操作的接口,会返回 10006 错误,建议进行重连操作。 +* +* **示例代码** +* +* [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/pQU51zmz7a3K) +* ```js +wx.createBLEConnection({ + deviceId, + success (res) { + console.log(res) + } +}) +``` */ + createBLEConnection< + T extends CreateBLEConnectionOption = CreateBLEConnectionOption + >( + option: T + ): PromisifySuccessResult<T, CreateBLEConnectionOption> + /** [wx.createBLEPeripheralServer(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-peripheral/wx.createBLEPeripheralServer.html) + * + * 需要基础库: `2.10.3` + * + * 在插件中使用:需要基础库 `2.22.1` + * + * 建立本地作为蓝牙低功耗外围设备的服务端,可创建多个。 */ + createBLEPeripheralServer< + T extends CreateBLEPeripheralServerOption = CreateBLEPeripheralServerOption + >( + option?: T + ): PromisifySuccessResult<T, CreateBLEPeripheralServerOption> + /** [wx.createBufferURL(ArrayBuffer|TypedArray buffer)](https://developers.weixin.qq.com/miniprogram/dev/api/storage/wx.createBufferURL.html) + * + * 需要基础库: `2.14.0` + * + * 在插件中使用:不支持 + * + * 根据传入的 buffer 创建一个唯一的 URL 存在内存中 */ + createBufferURL( + /** 需要存入内存的二进制数据 */ + buffer: + | ArrayBuffer + | Int8Array + | Uint8Array + | Uint8ClampedArray + | Int16Array + | Uint16Array + | Int32Array + | Uint32Array + | Float32Array + | Float64Array + ): void + /** [wx.disableAlertBeforeUnload(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/interaction/wx.disableAlertBeforeUnload.html) + * + * 需要基础库: `2.12.0` + * + * 在插件中使用:不支持 + * + * 关闭小程序页面返回询问对话框。 */ + disableAlertBeforeUnload(option?: DisableAlertBeforeUnloadOption): void + /** [wx.editImage(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/image/wx.editImage.html) +* +* 需要基础库: `2.22.0` +* +* 在插件中使用:不支持 +* +* 编辑图片接口 +* +* **示例代码** +* +* ```js +wx.editImage({ + src: '', // 图片路径 +}) +``` */ + editImage(option: EditImageOption): void + /** [wx.enableAlertBeforeUnload(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/interaction/wx.enableAlertBeforeUnload.html) + * + * 需要基础库: `2.12.0` + * + * 在插件中使用:不支持 + * + * 开启小程序页面返回询问对话框。 + * + * ## 弹窗条件 + * * 当用户在小程序内非首页页面/最底层页 + * * 官方导航栏上的的返回 + * * 全屏模式下自绘返回键 + * * android 系统 back 键时 + * + * ## 注意事项 + * * 手势滑动返回时不做拦截 + * * 在任何场景下,此功能都不应拦住用户退出小程序的行为 + * + * **示例代码** + * + * [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/MTPm9Cmh7VfT) */ + enableAlertBeforeUnload(option: EnableAlertBeforeUnloadOption): void + /** [wx.exitMiniProgram(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/navigate/wx.exitMiniProgram.html) + * + * 需要基础库: `2.17.3` + * + * 在插件中使用:不支持 + * + * 退出当前小程序。必须有点击行为才能调用成功。 */ + exitMiniProgram< + T extends ExitMiniProgramOption = ExitMiniProgramOption + >( + option?: T + ): PromisifySuccessResult<T, ExitMiniProgramOption> + /** [wx.exitVoIPChat(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/voip/wx.exitVoIPChat.html) + * + * 需要基础库: `2.7.0` + * + * 在插件中使用:需要基础库 `2.9.0` + * + * 退出(销毁)实时语音通话 */ + exitVoIPChat<T extends ExitVoIPChatOption = ExitVoIPChatOption>( + option?: T + ): PromisifySuccessResult<T, ExitVoIPChatOption> + /** [wx.faceDetect(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ai/face/wx.faceDetect.html) + * + * 需要基础库: `2.18.0` + * + * 在插件中使用:需要基础库 `2.21.3` + * @deprecated 基础库版本 [2.25.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃 + * + * 人脸检测,使用前需要通过 wx.initFaceDetect 进行一次初始化,推荐使用相机接口返回的帧数据。本接口不再维护,请使用 [wx.createVKSession](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/wx.createVKSession.html) 接口代替。详情参考[人脸检测指南文档](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/visionkit/face.html) */ + faceDetect(option: FaceDetectOption): void + /** [wx.getAvailableAudioSources(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/wx.getAvailableAudioSources.html) + * + * 需要基础库: `2.1.0` + * + * 在插件中使用:需要基础库 `2.15.0` + * + * 获取当前支持的音频输入源 */ + getAvailableAudioSources< + T extends GetAvailableAudioSourcesOption = GetAvailableAudioSourcesOption + >( + option?: T + ): PromisifySuccessResult<T, GetAvailableAudioSourcesOption> + /** [wx.getBLEDeviceCharacteristics(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.getBLEDeviceCharacteristics.html) +* +* 需要基础库: `1.1.0` +* +* 在插件中使用:需要基础库 `1.9.6` +* +* 获取蓝牙低功耗设备某个服务中所有特征 (characteristic)。 +* +* **示例代码** +* +* [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/pQU51zmz7a3K) +* ```js +wx.getBLEDeviceCharacteristics({ + // 这里的 deviceId 需要已经通过 wx.createBLEConnection 与对应设备建立链接 + deviceId, + // 这里的 serviceId 需要在 wx.getBLEDeviceServices 接口中获取 + serviceId, + success (res) { + console.log('device getBLEDeviceCharacteristics:', res.characteristics) + } +}) +``` */ + getBLEDeviceCharacteristics< + T extends GetBLEDeviceCharacteristicsOption = GetBLEDeviceCharacteristicsOption + >( + option: T + ): PromisifySuccessResult<T, GetBLEDeviceCharacteristicsOption> + /** [wx.getBLEDeviceRSSI(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.getBLEDeviceRSSI.html) + * + * 需要基础库: `2.11.0` + * + * 在插件中使用:需要基础库 `2.11.0` + * + * 获取蓝牙低功耗设备的信号强度 (Received Signal Strength Indication, RSSI)。 */ + getBLEDeviceRSSI< + T extends GetBLEDeviceRSSIOption = GetBLEDeviceRSSIOption + >( + option: T + ): PromisifySuccessResult<T, GetBLEDeviceRSSIOption> + /** [wx.getBLEDeviceServices(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.getBLEDeviceServices.html) +* +* 需要基础库: `1.1.0` +* +* 在插件中使用:需要基础库 `1.9.6` +* +* 获取蓝牙低功耗设备所有服务 (service)。 +* +* **示例代码** +* +* [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/pQU51zmz7a3K) +* ```js +wx.getBLEDeviceServices({ + // 这里的 deviceId 需要已经通过 wx.createBLEConnection 与对应设备建立连接 + deviceId, + success (res) { + console.log('device services:', res.services) + } +}) +``` */ + getBLEDeviceServices< + T extends GetBLEDeviceServicesOption = GetBLEDeviceServicesOption + >( + option: T + ): PromisifySuccessResult<T, GetBLEDeviceServicesOption> + /** [wx.getBLEMTU(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.getBLEMTU.html) +* +* 需要基础库: `2.20.1` +* +* 在插件中使用:需要基础库 `2.20.1` +* +* 获取蓝牙低功耗的最大传输单元。需在 [wx.createBLEConnection](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.createBLEConnection.html) 调用成功后调用。 +* +* **注意** +* +* - 小程序中 MTU 为 ATT_MTU,包含 Op-Code 和 Attribute Handle 的长度,实际可以传输的数据长度为 `ATT_MTU - 3` +* - iOS 系统中 MTU 为固定值;安卓系统中,MTU 会在系统协商成功之后发生改变,建议使用 [wx.onBLEMTUChange](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.onBLEMTUChange.html) 监听。 +* +* **示例代码** +* +* [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/pQU51zmz7a3K) +* ```js +wx.getBLEMTU({ + deviceId: '', + writeType: 'write', + success (res) { + console.log(res) + } +}) +``` */ + getBLEMTU<T extends GetBLEMTUOption = GetBLEMTUOption>( + option: T + ): PromisifySuccessResult<T, GetBLEMTUOption> + /** [wx.getBackgroundAudioPlayerState(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/wx.getBackgroundAudioPlayerState.html) +* +* 在插件中使用:需要基础库 `1.9.6` +* @deprecated 基础库版本 [1.2.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [wx.getBackgroundAudioManager](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/wx.getBackgroundAudioManager.html) 替换 +* +* 获取后台音乐播放状态。 +* +* **示例代码** +* +* ```js +wx.getBackgroundAudioPlayerState({ + success (res) { + const status = res.status + const dataUrl = res.dataUrl + const currentPosition = res.currentPosition + const duration = res.duration + const downloadPercent = res.downloadPercent + } +}) +``` */ + getBackgroundAudioPlayerState< + T extends GetBackgroundAudioPlayerStateOption = GetBackgroundAudioPlayerStateOption + >( + option?: T + ): PromisifySuccessResult<T, GetBackgroundAudioPlayerStateOption> + /** [wx.getBackgroundFetchData(object object)](https://developers.weixin.qq.com/miniprogram/dev/api/storage/background-fetch/wx.getBackgroundFetchData.html) + * + * 需要基础库: `2.8.0` + * + * 在插件中使用:不支持 + * + * 拉取 backgroundFetch 客户端缓存数据。 + * 当调用接口时,若当次请求未结束,会先返回本地的旧数据(之前打开小程序时请求的),如果本地没有旧数据会返回失败,而不会等待请求完成。 */ + getBackgroundFetchData< + T extends GetBackgroundFetchDataOption = GetBackgroundFetchDataOption + >( + option: T + ): PromisifySuccessResult<T, GetBackgroundFetchDataOption> + /** [wx.getBackgroundFetchToken(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/storage/background-fetch/wx.getBackgroundFetchToken.html) + * + * 需要基础库: `2.8.0` + * + * 在插件中使用:不支持 + * + * 获取设置过的自定义登录态。若无,则返回 fail。 */ + getBackgroundFetchToken< + T extends GetBackgroundFetchTokenOption = GetBackgroundFetchTokenOption + >( + option?: T + ): PromisifySuccessResult<T, GetBackgroundFetchTokenOption> + /** [wx.getBatteryInfo(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/battery/wx.getBatteryInfo.html) + * + * 在插件中使用:需要基础库 `2.15.0` + * + * 获取设备电量。同步 API [wx.getBatteryInfoSync](https://developers.weixin.qq.com/miniprogram/dev/api/device/battery/wx.getBatteryInfoSync.html) 在 iOS 上不可用。 */ + getBatteryInfo<T extends GetBatteryInfoOption = GetBatteryInfoOption>( + option?: T + ): PromisifySuccessResult<T, GetBatteryInfoOption> + /** [wx.getBeacons(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/ibeacon/wx.getBeacons.html) + * + * 需要基础库: `1.2.0` + * + * 在插件中使用:需要基础库 `1.9.6` + * + * 获取所有已搜索到的 Beacon 设备 */ + getBeacons<T extends GetBeaconsOption = GetBeaconsOption>( + option?: T + ): PromisifySuccessResult<T, GetBeaconsOption> + /** [wx.getBluetoothAdapterState(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth/wx.getBluetoothAdapterState.html) +* +* 需要基础库: `1.1.0` +* +* 在插件中使用:需要基础库 `1.9.6` +* +* 获取本机蓝牙适配器状态。 +* +* **示例代码** +* +* [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/pQU51zmz7a3K) +* ```js +wx.getBluetoothAdapterState({ + success (res) { + console.log(res) + } +}) +``` */ + getBluetoothAdapterState< + T extends GetBluetoothAdapterStateOption = GetBluetoothAdapterStateOption + >( + option?: T + ): PromisifySuccessResult<T, GetBluetoothAdapterStateOption> + /** [wx.getBluetoothDevices(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth/wx.getBluetoothDevices.html) +* +* 需要基础库: `1.1.0` +* +* 在插件中使用:需要基础库 `1.9.6` +* +* 获取在蓝牙模块生效期间所有搜索到的蓝牙设备。包括已经和本机处于连接状态的设备。 +* +* **示例代码** +* +* [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/pQU51zmz7a3K) +* +* ```js +// ArrayBuffer转16进度字符串示例 +function ab2hex(buffer) { + var hexArr = Array.prototype.map.call( + new Uint8Array(buffer), + function(bit) { + return ('00' + bit.toString(16)).slice(-2) + } + ) + return hexArr.join(''); +} +wx.getBluetoothDevices({ + success: function (res) { + console.log(res) + if (res.devices[0]) { + console.log(ab2hex(res.devices[0].advertisData)) + } + } +}) +``` +* +* **注意** +* +* - 该接口获取到的设备列表为**蓝牙模块生效期间所有搜索到的蓝牙设备**,若在蓝牙模块使用流程结束后未及时调用 [wx.closeBluetoothAdapter](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth/wx.closeBluetoothAdapter.html) 释放资源,会存在调用该接口会返回之前的蓝牙使用流程中搜索到的蓝牙设备,可能设备已经不在用户身边,无法连接。 */ + getBluetoothDevices< + T extends GetBluetoothDevicesOption = GetBluetoothDevicesOption + >( + option?: T + ): PromisifySuccessResult<T, GetBluetoothDevicesOption> + /** [wx.getChannelsLiveInfo(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/channels/wx.getChannelsLiveInfo.html) + * + * 需要基础库: `2.15.0` + * + * 在插件中使用:不支持 + * + * 获取视频号直播信息 */ + getChannelsLiveInfo(option: GetChannelsLiveInfoOption): void + /** [wx.getChannelsLiveNoticeInfo(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/channels/wx.getChannelsLiveNoticeInfo.html) + * + * 需要基础库: `2.19.0` + * + * 在插件中使用:不支持 + * + * 获取视频号直播预告信息 */ + getChannelsLiveNoticeInfo(option: GetChannelsLiveNoticeInfoOption): void + /** [wx.getChannelsShareKey(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/channels/wx.getChannelsShareKey.html) + * + * 需要基础库: `2.22.1` + * + * 在插件中使用:不支持 + * + * 获取视频号直播卡片/视频卡片的分享来源,仅当卡片携带了分享信息、同时用户已授权该小程序获取视频号分享信息且启动场景值为 1177、1184、1195、1208 时可用。 */ + getChannelsShareKey(option?: GetChannelsShareKeyOption): void + /** [wx.getClipboardData(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/clipboard/wx.getClipboardData.html) +* +* 需要基础库: `1.1.0` +* +* 在插件中使用:需要基础库 `1.9.6` +* +* 获取系统剪贴板的内容 +* +* **示例代码** +* +* ```js +wx.getClipboardData({ + success (res){ + console.log(res.data) + } +}) +``` */ + getClipboardData< + T extends GetClipboardDataOption = GetClipboardDataOption + >( + option?: T + ): PromisifySuccessResult<T, GetClipboardDataOption> + /** [wx.getConnectedBluetoothDevices(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth/wx.getConnectedBluetoothDevices.html) +* +* 需要基础库: `1.1.0` +* +* 在插件中使用:需要基础库 `1.9.6` +* +* 根据主服务 UUID 获取已连接的蓝牙设备。 +* +* **示例代码** +* +* [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/pQU51zmz7a3K) +* ```js +wx.getConnectedBluetoothDevices({ + services: ['FEE7'], + success (res) { + console.log(res) + } +}) +``` */ + getConnectedBluetoothDevices< + T extends GetConnectedBluetoothDevicesOption = GetConnectedBluetoothDevicesOption + >( + option: T + ): PromisifySuccessResult<T, GetConnectedBluetoothDevicesOption> + /** [wx.getConnectedWifi(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/wifi/wx.getConnectedWifi.html) + * + * 需要基础库: `1.6.0` + * + * 在插件中使用:需要基础库 `2.9.1` + * + * 获取已连接中的 Wi-Fi 信息。 */ + getConnectedWifi< + T extends GetConnectedWifiOption = GetConnectedWifiOption + >( + option: T + ): PromisifySuccessResult<T, GetConnectedWifiOption> + /** [wx.getExtConfig(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ext/wx.getExtConfig.html) +* +* 需要基础库: `1.1.0` +* +* 在插件中使用:不支持 +* +* 获取[第三方平台](https://developers.weixin.qq.com/miniprogram/dev/devtools/ext.html)自定义的数据字段。 +* +* **Tips** +* +* 1. 本接口暂时无法通过 [wx.canIUse](https://developers.weixin.qq.com/miniprogram/dev/api/base/wx.canIUse.html) 判断是否兼容,开发者需要自行判断 [wx.getExtConfig](https://developers.weixin.qq.com/miniprogram/dev/api/ext/wx.getExtConfig.html) 是否存在来兼容 +* +* **** +* +* ```js +if (wx.getExtConfig) { + wx.getExtConfig({ + success (res) { + console.log(res.extConfig) + } + }) +} +``` */ + getExtConfig<T extends GetExtConfigOption = GetExtConfigOption>( + option?: T + ): PromisifySuccessResult<T, GetExtConfigOption> + /** [wx.getFileInfo(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/wx.getFileInfo.html) +* +* 需要基础库: `1.4.0` +* +* 在插件中使用:不支持 +* +* @warning **该接口已停止维护,推荐使用 [FileSystemManager.getFileInfo](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.getFileInfo.html)** +* +* 获取文件信息。 +* +* **示例代码** +* +* ```js +wx.getFileInfo({ + success (res) { + console.log(res.size) + console.log(res.digest) + } +}) +``` */ + getFileInfo<T extends WxGetFileInfoOption = WxGetFileInfoOption>( + option: T + ): PromisifySuccessResult<T, WxGetFileInfoOption> + /** [wx.getFuzzyLocation(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/location/wx.getFuzzyLocation.html) +* +* 需要基础库: `2.25.0` +* +* 在插件中使用:支持 +* +* 获取当前的模糊地理位置。 +* ## 使用方法 +* 自 2022 年 7 月 14 日后发布的小程序,若使用该接口,需要在 app.json 中进行声明,否则将无法正常使用该接口,2022年7月14日前发布的小程序不受影响。[具体规则见公告](https://developers.weixin.qq.com/community/develop/doc/000a02f2c5026891650e7f40351c01) +* ## 申请开通 +* 暂只针对具备与地理位置强相关的使用场景的小程序开放,在小程序管理后台,「开发」-「开发管理」-「接口设置」中自助开通该接口权限。 从2022年7月14日开始在代码审核环节将检测该接口是否已完成开通,如未开通,将在代码提审环节进行拦截。 +* +* **示例代码** +* +* ```js + wx.getFuzzyLocation({ + type: 'wgs84', + success (res) { + const latitude = res.latitude + const longitude = res.longitude + } +}) + ``` */ + getFuzzyLocation(option: GetFuzzyLocationOption): void + /** [wx.getGroupEnterInfo(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/group/wx.getGroupEnterInfo.html) +* +* 需要基础库: `2.10.4` +* +* 在插件中使用:不支持 +* +* 获取微信群聊场景下的小程序启动信息。群聊场景包括群聊小程序消息卡片、群待办、群工具。可用于获取当前群的 opengid。 +* ## 注意事项 +* - 基础库 v2.10.4 开始支持获取群工具小程序启动信息 +* - 基础库 v2.17.3 开始支持获取群聊小程序消息卡片、群待办小程序启动信息 +* +* **示例代码** +* +* ```js +wx.getGroupEnterInfo({ + success(res) { + // res + { + errMsg: 'getGroupEnterInfo:ok', + encryptedData: '', + iv: '' + } + }, + fail() { + + } +}) +``` +* +* 敏感数据有两种获取方式,一是使用 [加密数据解密算法](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html#加密数据解密算法) 。 +* 获取得到的开放数据为以下 json 结构(其中 opengid 为当前群的唯一标识): +* +* ```json +{ + "opengid": "OPENGID" +} +``` +* +* **Tips** +* +* - 如需要展示群名称,小程序可以使用[开放数据组件](https://developers.weixin.qq.com/miniprogram/dev/component/open-data.html) +* - 小游戏可以通过 `wx.getGroupInfo` 接口获取群名称 */ + getGroupEnterInfo(option: GetGroupEnterInfoOption): void + /** [wx.getHCEState(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc-hce/wx.getHCEState.html) +* +* 需要基础库: `1.7.0` +* +* 在插件中使用:需要基础库 `2.1.0` +* +* 判断当前设备是否支持 HCE 能力。 +* +* **示例代码** +* +* ```js +wx.getHCEState({ + success (res) { + console.log(res.errCode) + } +}) +``` */ + getHCEState<T extends GetHCEStateOption = GetHCEStateOption>( + option?: T + ): PromisifySuccessResult<T, GetHCEStateOption> + /** [wx.getImageInfo(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/image/wx.getImageInfo.html) +* +* 在插件中使用:需要基础库 `1.9.6` +* +* 获取图片信息。网络图片需先配置download域名才能生效。 +* +* **示例代码** +* +* [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/Kd47Sbmr6yYu) +* +* ```js +wx.getImageInfo({ + src: 'images/a.jpg', + success (res) { + console.log(res.width) + console.log(res.height) + } +}) + +wx.chooseImage({ + success (res) { + wx.getImageInfo({ + src: res.tempFilePaths[0], + success (res) { + console.log(res.width) + console.log(res.height) + } + }) + } +}) +``` */ + getImageInfo<T extends GetImageInfoOption = GetImageInfoOption>( + option: T + ): PromisifySuccessResult<T, GetImageInfoOption> + /** [wx.getLocalIPAddress(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/network/wx.getLocalIPAddress.html) +* +* 需要基础库: `2.20.1` +* +* 在插件中使用:需要基础库 `2.21.3` +* +* 获取局域网IP地址 +* +* **示例代码** +* +* ```js +wx.getLocalIPAddress({ + success (res) { + const localip = res.localip + } +}) +``` */ + getLocalIPAddress(option: GetLocalIPAddressOption): void + /** [wx.getLocation(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/location/wx.getLocation.html) +* +* 在插件中使用:需要基础库 `1.9.6` +* +* 获取当前的地理位置、速度。当用户离开小程序后,此接口无法调用。开启高精度定位,接口耗时会增加,可指定 highAccuracyExpireTime 作为超时时间。地图相关使用的坐标格式应为 gcj02。 +* 高频率调用会导致耗电,如有需要可使用持续定位接口 `wx.onLocationChange`。 +* 基础库 `2.17.0` 版本起 `wx.getLocation` 增加调用频率限制,[相关公告](https://developers.weixin.qq.com/community/develop/doc/000aee91a98d206bc6dbe722b51801)。 +* +* ## 使用方法 +* 自 2022 年 7 月 14 日后发布的小程序,若使用该接口,需要在 app.json 中进行声明,否则将无法正常使用该接口,2022年7月14日前发布的小程序不受影响。[具体规则见公告](https://developers.weixin.qq.com/community/develop/doc/000a02f2c5026891650e7f40351c01) +* +* ## 申请开通 +* 暂只针对如下类目的小程序开放,需要先通过类目审核,再在小程序管理后台,「开发」-「开发管理」-「接口设置」中自助开通该接口权限。 +* 接口权限申请入口将于2022年3月11日开始内测,于3月31日全量上线。并从4月18日开始,在代码审核环节将检测该接口是否已完成开通,如未开通,将在代码提审环节进行拦截。 +* +* ### 国内主体开放类目 +* +* | 一级类目/主体类型 | 二级类目 | 应用场景 | +* | -------------- | -------| -------- | +* | 电商平台 | / | 售卖商品线下发货、线下收货服务 | +* | 商家自营 | / | 提供售卖商品线下发货、线下收货服务、线下商超导览、导航服务 | +* | 医疗服务 | 公立医疗机构、三级私立医疗机构、其他私立医疗机构、就医服务、其他医学健康服务、药品(非处方药)销售、非处方药销售平台、医疗器械生产企业、医疗器械自营、医疗器械经营销售平台、互联网医院血液、干细胞服务、临床试验 | 1、实际物品/药品接收服务 2、基于地理位置取号并现场报到、附近医院导航等服务 | +* | 交通服务 | / | 代驾服务、租车网点导航等相关服务 | +* | 生活服务 | / | 上门服务作业等线下场景 | +* | 物流服务 | 收件/派件、查件、邮政、装卸搬运、快递柜、货物运输 | 快递/货物收发服务 | +* | 餐饮服务 | 点餐平台、外卖平台、餐饮服务场所/餐饮服务管理企业 | 线下送餐服务 | +* | 工具 | 天气、信息查询、办公、设备管理 | 与地理位置相关的服务,比如潮汐查询、海拔查询、天气查询、智能穿戴、智能门禁、与地理位置相关的打卡服务等 | +* | 金融 | 银行、非金融机构自营小额贷款/融资担保/商业保理、保险 | 提供线下网点预约、基于地理位置取号并现场报到、附近网点导航等服务 | +* | 旅游 | 景区服务、住宿服务 | 提供景区导航、导览服务、酒店导航服务 | +* | 汽车服务 | 维修保养、汽车用品、汽车经销商/4S店、汽车厂商、汽车预售、二手车 | 提供汽车售卖、维保洗美服务、查找附近的维修点/洗车网点等导航服务 | +* | IT科技 | 基础电信运营商、电信业务代理商 | 提供运营商线下网点的预约、基于地理位置取号并现场报到、网点导航等服务 | +* | 房地产服务 | 物业管理、房屋中介、房屋装修 | 提供房地产开发商及物业公司门店导览导航服务 | +* | 政务民生 | / | 提供政务单位相关业务 | +* | 政府主体帐号 | / | 提供政务单位相关业务 | +* +* ### 海外主体开放类目 +* +* | 一级类目/主体类型 | 二级类目 | 应用场景 | +* | -------------- | -------| -------- | +* | 出行与交通 | / | 代驾服务、租车网点导航等相关服务 | +* | 快递业与邮政 | / | 快递/货物收发服务 | +* | 餐饮 | / | 线下送餐服务 | +* | 电商平台 | / | 售卖商品线下发货、线下收货服务 | +* | 出行与交通 | / | 代驾服务、租车网点导航等相关服务 | +* | 跨境电商 | / | 提供售卖商品线下发货、收货服务、线下商超导览、导航服务 | +* | 本地服务 | 服装/鞋/箱包、玩具、家电/数码/手机、美妆/洗护、珠宝/饰品/眼镜/钟表、运动/户外/乐器、鲜花/园艺/工艺品、家居/家饰/家纺、办公/文具、机械/电子器件、酒、食品、百货、超市/便利店、宠物食品/用品 | 提供售卖商品线下发货、线下收货服务、线下商超导览、导航服务 | +* | 生活服务 | 家政、外送 | 上门服务作业等线下场景 | +* +* **示例代码** +* +* ```js + wx.getLocation({ + type: 'wgs84', + success (res) { + const latitude = res.latitude + const longitude = res.longitude + const speed = res.speed + const accuracy = res.accuracy + } +}) + ``` +* +* **注意** +* +* - `2.17.0 起 `wx.getLocation` 增加调用频率限制,[相关公告](https://developers.weixin.qq.com/community/develop/doc/000aee91a98d206bc6dbe722b51801) +* - 工具中定位模拟使用IP定位,可能会有一定误差。且工具目前仅支持 gcj02 坐标。 +* - 使用第三方服务进行逆地址解析时,请确认第三方服务默认的坐标系,正确进行坐标转换。 */ + getLocation<T extends GetLocationOption = GetLocationOption>( + option: T + ): PromisifySuccessResult<T, GetLocationOption> + /** [wx.getNetworkType(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/network/wx.getNetworkType.html) +* +* 在插件中使用:需要基础库 `1.9.6` +* +* 获取网络类型 +* +* **示例代码** +* +* ```js +wx.getNetworkType({ + success (res) { + const networkType = res.networkType + } +}) +``` */ + getNetworkType<T extends GetNetworkTypeOption = GetNetworkTypeOption>( + option?: T + ): PromisifySuccessResult<T, GetNetworkTypeOption> + /** [wx.getRandomValues(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/crypto/wx.getRandomValues.html) +* +* 需要基础库: `2.15.0` +* +* 在插件中使用:不支持 +* +* 获取密码学安全随机数 +* +* **示例代码** +* +* ```js +wx.getRandomValues({ + length: 6 // 生成 6 个字节长度的随机数, + success: res => { + console.log(wx.arrayBufferToBase64(res.randomValues)) // 转换为 base64 字符串后打印 + } +}) +``` */ + getRandomValues< + T extends GetRandomValuesOption = GetRandomValuesOption + >( + option: T + ): PromisifySuccessResult<T, GetRandomValuesOption> + /** [wx.getSavedFileInfo(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/wx.getSavedFileInfo.html) +* +* 在插件中使用:不支持 +* +* @warning **该接口已停止维护,推荐使用 [FileSystemManager.getFileInfo](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.getFileInfo.html)** +* +* 获取本地文件的文件信息。此接口只能用于获取已保存到本地的文件。 +* +* **示例代码** +* +* ```js +wx.getSavedFileList({ + success (res) { + console.log(res.fileList) + } +}) +``` */ + getSavedFileInfo< + T extends GetSavedFileInfoOption = GetSavedFileInfoOption + >( + option: T + ): PromisifySuccessResult<T, GetSavedFileInfoOption> + /** [wx.getSavedFileList(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/wx.getSavedFileList.html) +* +* 在插件中使用:不支持 +* +* @warning **该接口已停止维护,推荐使用 [FileSystemManager.getSavedFileList](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.getSavedFileList.html)** +* +* 获取该小程序下已保存的本地缓存文件列表。 +* +* **示例代码** +* +* ```js +wx.getSavedFileList({ + success (res) { + console.log(res.fileList) + } +}) +``` */ + getSavedFileList< + T extends WxGetSavedFileListOption = WxGetSavedFileListOption + >( + option?: T + ): PromisifySuccessResult<T, WxGetSavedFileListOption> + /** [wx.getScreenBrightness(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/screen/wx.getScreenBrightness.html) + * + * 需要基础库: `1.2.0` + * + * 在插件中使用:需要基础库 `1.9.6` + * + * 获取屏幕亮度 + * + * **说明** + * + * - 若安卓系统设置中开启了自动调节亮度功能,则屏幕亮度会根据光线自动调整,该接口仅能获取自动调节亮度之前的值,而非实时的亮度值。 */ + getScreenBrightness< + T extends GetScreenBrightnessOption = GetScreenBrightnessOption + >( + option?: T + ): PromisifySuccessResult<T, GetScreenBrightnessOption> + /** [wx.getScreenRecordingState(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/screen/wx.getScreenRecordingState.html) + * + * 需要基础库: `2.24.0` + * + * 在插件中使用:不支持 + * + * 查询用户是否在录屏。 + * + * **示例代码** + * + * ```js + * wx.getScreenRecordingState({ + * success: function (res) { + * console.log(res.state) + * }, + * }) */ + getScreenRecordingState(option?: GetScreenRecordingStateOption): void + /** [wx.getSelectedTextRange(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/keyboard/wx.getSelectedTextRange.html) +* +* 需要基础库: `2.7.0` +* +* 在插件中使用:不支持 +* +* 在input、textarea等focus之后,获取输入框的光标位置。注意:只有在focus的时候调用此接口才有效。 +* +* **示例代码** +* +* ```js +wx.getSelectedTextRange({ + complete: res => { + console.log('getSelectedTextRange res', res.start, res.end) + } +}) +``` */ + getSelectedTextRange< + T extends GetSelectedTextRangeOption = GetSelectedTextRangeOption + >( + option?: T + ): PromisifySuccessResult<T, GetSelectedTextRangeOption> + /** [wx.getSetting(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/setting/wx.getSetting.html) +* +* 需要基础库: `1.2.0` +* +* 在插件中使用:需要基础库 `2.6.3` +* +* 在插件中使用时,接口有以下不同: +* - `withSubscriptions` 无效(插件暂无订阅消息) +* - 返回值中的 `authSetting` 字段中是插件的权限(如用户信息功能页授权) +* - [2.14.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起返回值中有 `miniprogramAuthSetting` 字段,内容等于当前小程序 `getSetting` 的结果(不含订阅状态) +* +* 获取用户的当前设置。**返回值中只会出现小程序已经向用户请求过的[权限](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/authorize.html)**。 +* +* **示例代码** +* +* ```js +wx.getSetting({ + success (res) { + console.log(res.authSetting) + // res.authSetting = { + // "scope.userInfo": true, + // "scope.userLocation": true + // } + } +}) +``` +* +* ```js +wx.getSetting({ + withSubscriptions: true, + success (res) { + console.log(res.authSetting) + // res.authSetting = { + // "scope.userInfo": true, + // "scope.userLocation": true + // } + console.log(res.subscriptionsSetting) + // res.subscriptionsSetting = { + // mainSwitch: true, // 订阅消息总开关 + // itemSettings: { // 每一项开关 + // SYS_MSG_TYPE_INTERACTIVE: 'accept', // 小游戏系统订阅消息 + // SYS_MSG_TYPE_RANK: 'accept' + // zun-LzcQyW-edafCVvzPkK4de2Rllr1fFpw2A_x0oXE: 'reject', // 普通一次性订阅消息 + // ke_OZC_66gZxALLcsuI7ilCJSP2OJ2vWo2ooUPpkWrw: 'ban', + // } + // } + } +}) +``` */ + getSetting<T extends GetSettingOption = GetSettingOption>( + option?: T + ): PromisifySuccessResult<T, GetSettingOption> + /** [wx.getShareInfo(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/share/wx.getShareInfo.html) +* +* 需要基础库: `1.1.0` +* +* 在插件中使用:需要基础库 `2.1.0` +* +* 在插件中使用时,只能在当前插件的页面中调用 +* +* 获取转发详细信息 +* +* **示例代码** +* +* 敏感数据获取方式 [加密数据解密算法](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html#加密数据解密算法) 。 +* 获取得到的开放数据为以下 json 结构(其中 openGId 为当前群的唯一标识): +* +* ```json +{ + "openGId": "OPENGID" +} +``` +* +* **Tips** +* +* - 如需要展示群名称,小程序可以使用 [开放数据组件](https://developers.weixin.qq.com/miniprogram/dev/component/open-data.html) +* - 小游戏可以通过 [`wx.getGroupInfo`](#) 接口获取群名称 */ + getShareInfo<T extends GetShareInfoOption = GetShareInfoOption>( + option: T + ): PromisifySuccessResult<T, GetShareInfoOption> + /** [wx.getStorage(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/storage/wx.getStorage.html) +* +* 在插件中使用:需要基础库 `1.9.6` +* +* 从本地缓存中异步获取指定 key 的内容。 +* +* **示例代码** +* +* ```js +wx.getStorage({ + key: 'key', + success (res) { + console.log(res.data) + } +}) +``` +* +* ```js +// 开启加密存储 +wx.setStorage({ + key: "key", + data: "value", + encrypt: true, // 若开启加密存储,setStorage 和 getStorage 需要同时声明 encrypt 的值为 true + success() { + wx.getStorage({ + key: "key", + encrypt: true, // 若开启加密存储,setStorage 和 getStorage 需要同时声明 encrypt 的值为 true + success(res) { + console.log(res.data) + } + }) + } +}) +``` */ + getStorage< + T = any, + U extends GetStorageOption<T> = GetStorageOption<T> + >( + option: U + ): PromisifySuccessResult<U, GetStorageOption<T>> + /** [wx.getStorageInfo(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/storage/wx.getStorageInfo.html) +* +* 在插件中使用:不支持 +* +* 异步获取当前storage的相关信息。 +* +* **示例代码** +* +* ```js +wx.getStorageInfo({ + success (res) { + console.log(res.keys) + console.log(res.currentSize) + console.log(res.limitSize) + } +}) +``` +* +* ```js +try { + const res = wx.getStorageInfoSync() + console.log(res.keys) + console.log(res.currentSize) + console.log(res.limitSize) +} catch (e) { + // Do something when catch error +} +``` */ + getStorageInfo<T extends GetStorageInfoOption = GetStorageInfoOption>( + option?: T + ): PromisifySuccessResult<T, GetStorageInfoOption> + /** [wx.getSystemInfo(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/base/system/wx.getSystemInfo.html) +* +* 在插件中使用:需要基础库 `1.9.6` +* +* 获取系统信息。**由于历史原因,wx.getSystemInfo 是异步的调用格式,但是是同步返回,需要异步获取系统信息请使用 [wx.getSystemInfoAsync](https://developers.weixin.qq.com/miniprogram/dev/api/base/system/wx.getSystemInfoAsync.html)。** +* +* **示例代码** +* +* [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/WkUCgXmS7mqO) +* +* ```js +wx.getSystemInfo({ + success (res) { + console.log(res.model) + console.log(res.pixelRatio) + console.log(res.windowWidth) + console.log(res.windowHeight) + console.log(res.language) + console.log(res.version) + console.log(res.platform) + } +}) +``` +* +* ```js +try { + const res = wx.getSystemInfoSync() + console.log(res.model) + console.log(res.pixelRatio) + console.log(res.windowWidth) + console.log(res.windowHeight) + console.log(res.language) + console.log(res.version) + console.log(res.platform) +} catch (e) { + // Do something when catch error +} +``` */ + getSystemInfo<T extends GetSystemInfoOption = GetSystemInfoOption>( + option?: T + ): PromisifySuccessResult<T, GetSystemInfoOption> + /** [wx.getSystemInfoAsync(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/base/system/wx.getSystemInfoAsync.html) +* +* 需要基础库: `2.14.1` +* +* 在插件中使用:不支持 +* +* 异步获取系统信息。需要一定的微信客户端版本支持,在不支持的客户端上,会使用同步实现来返回。 +* +* **示例代码** +* +* [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/WkUCgXmS7mqO) +* +* ```js +wx.getSystemInfoAsync({ + success (res) { + console.log(res.model) + console.log(res.pixelRatio) + console.log(res.windowWidth) + console.log(res.windowHeight) + console.log(res.language) + console.log(res.version) + console.log(res.platform) + } +}) +``` */ + getSystemInfoAsync(option?: GetSystemInfoAsyncOption): void + /** [wx.getUserInfo(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/user-info/wx.getUserInfo.html) +* +* 在插件中使用:需要基础库 `2.3.1` +* +* 在插件中使用时,需要在用户信息功能页中获得用户授权或满足一定条件后调用。否则将返回 fail。详见 [用户信息功能页](https://developers.weixin.qq.com/miniprogram/dev/framework/plugin/functional-pages/user-info.html) +* +* @warning **用户头像昵称获取规则已调整,参考 [用户信息接口调整说明](https://developers.weixin.qq.com/community/develop/doc/000cacfa20ce88df04cb468bc52801)、[小程序用户头像昵称获取规则调整公告](https://developers.weixin.qq.com/community/develop/doc/00022c683e8a80b29bed2142b56c01)** +* +* 获取用户信息。 +* +* **示例代码** +* +* ```js +// 必须是在用户已经授权的情况下调用 +wx.getUserInfo({ + success: function(res) { + var userInfo = res.userInfo + var nickName = userInfo.nickName + var avatarUrl = userInfo.avatarUrl + var gender = userInfo.gender //性别 0:未知、1:男、2:女 + var province = userInfo.province + var city = userInfo.city + var country = userInfo.country + } +}) +``` +* +* 敏感数据有两种获取方式: +* 1. 使用 [加密数据解密算法](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html#加密数据解密算法) +* 2. 使用 [云调用直接获取开放数据](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html#云调用直接获取开放数据) +* 获取得到的开放数据为以下 json 结构: +* +* ```json +{ + "openId": "OPENID", + "nickName": "NICKNAME", + "gender": GENDER, + "city": "CITY", + "province": "PROVINCE", + "country": "COUNTRY", + "avatarUrl": "AVATARURL", + "unionId": "UNIONID", + "watermark": { + "appid":"APPID", + "timestamp":TIMESTAMP + } +} +``` +* +* **小程序用户信息组件示例代码** +* +* ```html +* <!-- 如果只是展示用户头像昵称,可以使用 <open-data /> 组件 --> +* <open-data type="userAvatarUrl"></open-data> +* <open-data type="userNickName"></open-data> +* <!-- 需要使用 button 来授权登录 --> +* <button wx:if="{{canIUse}}" open-type="getUserInfo" bindgetuserinfo="bindGetUserInfo">授权登录</button> +* <view wx:else>请升级微信版本</view> +* ``` +* +* ```js +Page({ + data: { + canIUse: wx.canIUse('button.open-type.getUserInfo') + }, + onLoad: function() { + // 查看是否授权 + wx.getSetting({ + success (res){ + if (res.authSetting['scope.userInfo']) { + // 已经授权,可以直接调用 getUserInfo 获取头像昵称 + wx.getUserInfo({ + success: function(res) { + console.log(res.userInfo) + } + }) + } + } + }) + }, + bindGetUserInfo (e) { + console.log(e.detail.userInfo) + } +}) +``` */ + getUserInfo<T extends GetUserInfoOption = GetUserInfoOption>( + option: T + ): PromisifySuccessResult<T, GetUserInfoOption> + /** [wx.getUserProfile(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/user-info/wx.getUserProfile.html) +* +* 需要基础库: `2.10.4` +* +* 在插件中使用:不支持 +* +* @warning **用户头像昵称获取规则已调整,参考 [小程序用户头像昵称获取规则调整公告](https://developers.weixin.qq.com/community/develop/doc/00022c683e8a80b29bed2142b56c01)** +* +* 获取用户信息。页面产生点击事件(例如 `button` 上 `bindtap` 的回调中)后才可调用,每次请求都会弹出授权窗口,用户同意后返回 `userInfo`。该接口用于替换 `wx.getUserInfo`,详见 [用户信息接口调整说明](https://developers.weixin.qq.com/community/develop/doc/000cacfa20ce88df04cb468bc52801?highLine=login)。 +* +* **示例代码** +* +* [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/tsJaq2mP7Mp4) +* +* **Bug & Tip** +* +* 1. `tip`:仅小程序中 `wx.getUserInfo` 接口进行调整,小游戏中不受影响; +* 2. `tip`:开发者工具中仅 2.10.4 及以上版本可访问 `wx.getUserProfile` 接口,在真机上可参考示例代码进行判断,无需根据版本号或者 `canIUse` 进行条件。 +* 3. `tip`:`wx.getUserProfile` 返回的加密数据中不包含 `openId` 和 `unionId` 字段。 +* 4. `bug`:开发者工具中 `2.10.4`~`2.16.1` 基础库版本通过 `<button open-type="getUserInfo">` 会返回真实数据,真机上此区间会按照公告返回匿名数据。 +* +* ```html +* <view class="container"> +* <view class="userinfo"> +* <block wx:if="{{!hasUserInfo}}"> +* <button wx:if="{{canIUseGetUserProfile}}" bindtap="getUserProfile"> 获取头像昵称 </button> +* <button wx:else open-type="getUserInfo" bindgetuserinfo="getUserInfo"> 获取头像昵称 </button> +* </block> +* <block wx:else> +* <image bindtap="bindViewTap" class="userinfo-avatar" src="{{userInfo.avatarUrl}}" mode="cover"></image> +* <text class="userinfo-nickname">{{userInfo.nickName}}</text> +* </block> +* </view> +* </view> +* ``` +* +* ```js +Page({ + data: { + userInfo: {}, + hasUserInfo: false, + canIUseGetUserProfile: false, + }, + onLoad() { + if (wx.getUserProfile) { + this.setData({ + canIUseGetUserProfile: true + }) + } + }, + getUserProfile(e) { + // 推荐使用wx.getUserProfile获取用户信息,开发者每次通过该接口获取用户个人信息均需用户确认 + // 开发者妥善保管用户快速填写的头像昵称,避免重复弹窗 + wx.getUserProfile({ + desc: '用于完善会员资料', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写 + success: (res) => { + this.setData({ + userInfo: res.userInfo, + hasUserInfo: true + }) + } + }) + }, + getUserInfo(e) { + // 不推荐使用getUserInfo获取用户信息,预计自2021年4月13日起,getUserInfo将不再弹出弹窗,并直接返回匿名的用户个人信息 + this.setData({ + userInfo: e.detail.userInfo, + hasUserInfo: true + }) + }, +}) +``` */ + getUserProfile<T extends GetUserProfileOption = GetUserProfileOption>( + option: T + ): PromisifySuccessResult<T, GetUserProfileOption> + /** [wx.getVideoInfo(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/video/wx.getVideoInfo.html) + * + * 需要基础库: `2.11.0` + * + * 在插件中使用:支持 + * + * 获取视频详细信息。 */ + getVideoInfo<T extends GetVideoInfoOption = GetVideoInfoOption>( + option: T + ): PromisifySuccessResult<T, GetVideoInfoOption> + /** [wx.getWeRunData(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/werun/wx.getWeRunData.html) +* +* 需要基础库: `1.2.0` +* +* 在插件中使用:不支持 +* +* 获取用户过去三十天微信运动步数。需要先调用 [wx.login](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/login/wx.login.html) 接口。步数信息会在用户主动进入小程序时更新。 +* +* **示例代码** +* +* ```js +wx.getWeRunData({ + success (res) { + // 拿 encryptedData 到开发者后台解密开放数据 + const encryptedData = res.encryptedData + // 或拿 cloudID 通过云调用直接获取开放数据 + const cloudID = res.cloudID + } +}) +``` +* +* **开放数据 JSON 结构** +* +* 敏感数据有两种获取方式,一是使用 [加密数据解密算法](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html#加密数据解密算法) 。 +* 获取得到的开放数据为以下 json 结构: +* +* ```json +{ + "stepInfoList": [ + { + "timestamp": 1445866601, + "step": 100 + }, + { + "timestamp": 1445876601, + "step": 120 + } + ] +} +``` +* +* stepInfoList 中,每一项结构如下: +* +* | 属性 | 类型 | 说明 | +* | --- | ---- | --- | +* | timestamp | number | 时间戳,表示数据对应的时间 | +* | step | number | 微信运动步数 | */ + getWeRunData<T extends GetWeRunDataOption = GetWeRunDataOption>( + option?: T + ): PromisifySuccessResult<T, GetWeRunDataOption> + /** [wx.getWifiList(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/wifi/wx.getWifiList.html) + * + * 需要基础库: `1.6.0` + * + * 在插件中使用:需要基础库 `2.9.1` + * + * 请求获取 Wi-Fi 列表。`wifiList` 数据会在 [`onGetWifiList`](#) 注册的回调中返回。 **Android 调用前需要 [用户授权](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/authorize.html) scope.userLocation。** + * + * iOS 上将跳转到系统设置中的微信设置页,需要用户手动进入「无线局域网」设置页,并在系统扫描到设备后,小程序才能收到 onGetWifiList 回调。Android 不会跳转。 + * + * **注意** + * + * 因系统问题,本方法在 iOS 11.0 及 11.1 两个版本失效。但在 iOS 11.2 中已修复。 */ + getWifiList<T extends GetWifiListOption = GetWifiListOption>( + option?: T + ): PromisifySuccessResult<T, GetWifiListOption> + /** [wx.hideHomeButton(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/navigation-bar/wx.hideHomeButton.html) + * + * 需要基础库: `2.8.3` + * + * 在插件中使用:不支持 + * + * 隐藏返回首页按钮。微信7.0.7版本起,当用户打开的小程序最底层页面是非首页时,默认展示“返回首页”按钮,开发者可在页面 onShow 中调用 hideHomeButton 进行隐藏。 */ + hideHomeButton<T extends HideHomeButtonOption = HideHomeButtonOption>( + option?: T + ): PromisifySuccessResult<T, HideHomeButtonOption> + /** [wx.hideKeyboard(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/keyboard/wx.hideKeyboard.html) +* +* 需要基础库: `2.8.2` +* +* 在插件中使用:不支持 +* +* 在input、textarea等focus拉起键盘之后,手动调用此接口收起键盘 +* +* **示例代码** +* +* ```js +wx.hideKeyboard({ + complete: res => { + console.log('hideKeyboard res', res) + } +}) +``` */ + hideKeyboard<T extends HideKeyboardOption = HideKeyboardOption>( + option?: T + ): PromisifySuccessResult<T, HideKeyboardOption> + /** [wx.hideLoading(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/interaction/wx.hideLoading.html) + * + * 需要基础库: `1.1.0` + * + * 在插件中使用:需要基础库 `1.9.6` + * + * 隐藏 loading 提示框 */ + hideLoading<T extends HideLoadingOption = HideLoadingOption>( + option?: T + ): PromisifySuccessResult<T, HideLoadingOption> + /** [wx.hideNavigationBarLoading(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/navigation-bar/wx.hideNavigationBarLoading.html) + * + * 在插件中使用:需要基础库 `2.1.0` + * + * 在插件中使用时,只能在当前插件的页面中调用 + * + * 在当前页面隐藏导航条加载动画 */ + hideNavigationBarLoading< + T extends HideNavigationBarLoadingOption = HideNavigationBarLoadingOption + >( + option?: T + ): PromisifySuccessResult<T, HideNavigationBarLoadingOption> + /** [wx.hideShareMenu(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/share/wx.hideShareMenu.html) +* +* 需要基础库: `1.1.0` +* +* 在插件中使用:需要基础库 `2.1.0` +* +* 在插件中使用时,只能在当前插件的页面中调用 +* +* 隐藏当前页面的转发按钮 +* +* **** +* +* ## 注意事项 +* - "shareAppMessage"表示“发送给朋友”按钮,"shareTimeline"表示“分享到朋友圈”按钮 +* - 隐藏“发送给朋友”按钮时必须同时隐藏“分享到朋友圈”按钮,隐藏“分享到朋友圈”按钮时则允许不隐藏“发送给朋友”按钮 +* +* **示例代码** +* +* ```js +wx.hideShareMenu({ + menus: ['shareAppMessage', 'shareTimeline'] +}) +``` */ + hideShareMenu<T extends HideShareMenuOption = HideShareMenuOption>( + option?: T + ): PromisifySuccessResult<T, HideShareMenuOption> + /** [wx.hideTabBar(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/tab-bar/wx.hideTabBar.html) + * + * 需要基础库: `1.9.0` + * + * 在插件中使用:不支持 + * + * 隐藏 tabBar */ + hideTabBar<T extends HideTabBarOption = HideTabBarOption>( + option: T + ): PromisifySuccessResult<T, HideTabBarOption> + /** [wx.hideTabBarRedDot(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/tab-bar/wx.hideTabBarRedDot.html) + * + * 需要基础库: `1.9.0` + * + * 在插件中使用:不支持 + * + * 隐藏 tabBar 某一项的右上角的红点 */ + hideTabBarRedDot< + T extends HideTabBarRedDotOption = HideTabBarRedDotOption + >( + option: T + ): PromisifySuccessResult<T, HideTabBarRedDotOption> + /** [wx.hideToast(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/interaction/wx.hideToast.html) + * + * 在插件中使用:需要基础库 `1.9.6` + * + * 隐藏消息提示框 */ + hideToast<T extends HideToastOption = HideToastOption>( + option?: T + ): PromisifySuccessResult<T, HideToastOption> + /** [wx.initFaceDetect(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ai/face/wx.initFaceDetect.html) + * + * 需要基础库: `2.18.0` + * + * 在插件中使用:需要基础库 `2.21.3` + * @deprecated 基础库版本 [2.25.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃 + * + * 初始化人脸检测。本接口不再维护,请使用 [wx.createVKSession](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/wx.createVKSession.html) 接口代替。详情参考[人脸检测指南文档](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/visionkit/face.html) */ + initFaceDetect(option?: InitFaceDetectOption): void + /** [wx.isBluetoothDevicePaired(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth/wx.isBluetoothDevicePaired.html) + * + * 需要基础库: `2.20.1` + * + * 在插件中使用:需要基础库 `2.19.1` + * + * 查询蓝牙设备是否配对,仅安卓支持。 */ + isBluetoothDevicePaired< + T extends IsBluetoothDevicePairedOption = IsBluetoothDevicePairedOption + >( + option: T + ): PromisifySuccessResult<T, IsBluetoothDevicePairedOption> + /** [wx.join1v1Chat(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/voip/wx.join1v1Chat.html) + * + * 需要基础库: `2.20.1` + * + * 在插件中使用:不支持 + * + * 加入(创建)双人通话。 */ + join1v1Chat(option: Join1v1ChatOption): void + /** [wx.joinVoIPChat(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/voip/wx.joinVoIPChat.html) + * + * 需要基础库: `2.7.0` + * + * 在插件中使用:需要基础库 `2.9.0` + * + * 加入 (创建) 实时语音通话,更多信息可见 [实时语音指南](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/voip-chat.html)。调用前需要用户授权 `scope.record`,若房间类型为视频房间需要用户授权 `scope.camera`。 */ + joinVoIPChat<T extends JoinVoIPChatOption = JoinVoIPChatOption>( + option: T + ): PromisifySuccessResult<T, JoinVoIPChatOption> + /** [wx.loadFontFace(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/font/wx.loadFontFace.html) +* +* 需要基础库: `2.1.0` +* +* 在插件中使用:需要基础库 `2.15.0` +* +* 动态加载网络字体,文件地址需为下载类型。[2.10.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html)起支持全局生效,需在 `app.js` 中调用。 +* +* 注意: +* 1. 字体文件返回的 contet-type 参考 [font](https://www.iana.org/assignments/media-types/media-types.xhtml#font),格式不正确时会解析失败。 +* 2. 字体链接必须是https(ios不支持http) +* 3. 字体链接必须是同源下的,或开启了cors支持,小程序的域名是`servicewechat.com` +* 4. 工具里提示 Faild to load font可以忽略 +* 5. [2.10.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 以前仅在调用页面生效。 +* +* **示例代码** +* +* [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/b6Zrajm67R2x) +* ```js +wx.loadFontFace({ + family: 'Bitstream Vera Serif Bold', + source: 'url("https://sungd.github.io/Pacifico.ttf")', + success: console.log +}) +``` */ + loadFontFace<T extends LoadFontFaceOption = LoadFontFaceOption>( + option: T + ): PromisifySuccessResult<T, LoadFontFaceOption> + /** [wx.login(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/login/wx.login.html) +* +* 在插件中使用:需要基础库 `2.3.1` +* +* 在插件中使用时,需要在用户信息功能页中获得用户授权或满足一定条件后调用。否则将返回 fail。详见 [用户信息功能页](https://developers.weixin.qq.com/miniprogram/dev/framework/plugin/functional-pages/user-info.html) +* +* 调用接口获取登录凭证(code)。通过凭证进而换取用户登录态信息,包括用户在当前小程序的唯一标识(openid)、微信开放平台帐号下的唯一标识(unionid,若当前小程序已绑定到微信开放平台帐号)及本次登录的会话密钥(session_key)等。用户数据的加解密通讯需要依赖会话密钥完成。 +* +* **示例代码** +* +* ```js +wx.login({ + success (res) { + if (res.code) { + //发起网络请求 + wx.request({ + url: 'https://example.com/onLogin', + data: { + code: res.code + } + }) + } else { + console.log('登录失败!' + res.errMsg) + } + } +}) +``` */ + login<T extends LoginOption = LoginOption>( + option?: T + ): PromisifySuccessResult<T, LoginOption> + /** [wx.makeBluetoothPair(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth/wx.makeBluetoothPair.html) + * + * 需要基础库: `2.12.0` + * + * 在插件中使用:需要基础库 `2.12.0` + * + * 蓝牙配对接口,仅安卓支持。 + * + * 通常情况下(需要指定 `pin` 码或者密码时)系统会接管配对流程,直接调用 [wx.createBLEConnection](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.createBLEConnection.html) 即可。该接口只应当在开发者不想让用户手动输入 `pin` 码且真机验证确认可以正常生效情况下用。 */ + makeBluetoothPair< + T extends MakeBluetoothPairOption = MakeBluetoothPairOption + >( + option: T + ): PromisifySuccessResult<T, MakeBluetoothPairOption> + /** [wx.makePhoneCall(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/phone/wx.makePhoneCall.html) +* +* 在插件中使用:需要基础库 `1.9.6` +* +* 拨打电话 +* +* **示例代码** +* +* ```js +wx.makePhoneCall({ + phoneNumber: '1340000' //仅为示例,并非真实的电话号码 +}) +``` */ + makePhoneCall<T extends MakePhoneCallOption = MakePhoneCallOption>( + option: T + ): PromisifySuccessResult<T, MakePhoneCallOption> + /** [wx.navigateBack(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/route/wx.navigateBack.html) + * + * 在插件中使用:需要基础库 `2.1.0` + * + * 在插件中使用时,只能在当前插件的页面中调用 + * + * 关闭当前页面,返回上一页面或多级页面。可通过 [getCurrentPages](https://developers.weixin.qq.com/miniprogram/dev/reference/api/getCurrentPages.html) 获取当前的页面栈,决定需要返回几层。 */ + navigateBack<T extends NavigateBackOption = NavigateBackOption>( + option?: T + ): PromisifySuccessResult<T, NavigateBackOption> + /** [wx.navigateBackMiniProgram(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/navigate/wx.navigateBackMiniProgram.html) +* +* 需要基础库: `1.3.0` +* +* 在插件中使用:不支持 +* +* 返回到上一个小程序。只有在当前小程序是被其他小程序打开时可以调用成功 +* +* 注意:**微信客户端 iOS 6.5.9,Android 6.5.10 及以上版本支持** +* +* **示例代码** +* +* ```js +wx.navigateBackMiniProgram({ + extraData: { + foo: 'bar' + }, + success(res) { + // 返回成功 + } +}) +``` */ + navigateBackMiniProgram< + T extends NavigateBackMiniProgramOption = NavigateBackMiniProgramOption + >( + option: T + ): PromisifySuccessResult<T, NavigateBackMiniProgramOption> + /** [wx.navigateTo(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/route/wx.navigateTo.html) +* +* 在插件中使用:需要基础库 `2.2.2` +* +* 在插件中使用时,只能在当前插件的页面中调用 +* +* 保留当前页面,跳转到应用内的某个页面。但是不能跳到 tabbar 页面。使用 [wx.navigateBack](https://developers.weixin.qq.com/miniprogram/dev/api/route/wx.navigateBack.html) 可以返回到原页面。小程序中页面栈最多十层。 +* +* **示例代码** +* +* ```js +wx.navigateTo({ + url: 'test?id=1', + events: { + // 为指定事件添加一个监听器,获取被打开页面传送到当前页面的数据 + acceptDataFromOpenedPage: function(data) { + console.log(data) + }, + someEvent: function(data) { + console.log(data) + } + ... + }, + success: function(res) { + // 通过eventChannel向被打开页面传送数据 + res.eventChannel.emit('acceptDataFromOpenerPage', { data: 'test' }) + } +}) +``` +* +* ```javascript +//test.js +Page({ + onLoad: function(option){ + console.log(option.query) + const eventChannel = this.getOpenerEventChannel() + eventChannel.emit('acceptDataFromOpenedPage', {data: 'test'}); + eventChannel.emit('someEvent', {data: 'test'}); + // 监听acceptDataFromOpenerPage事件,获取上一页面通过eventChannel传送到当前页面的数据 + eventChannel.on('acceptDataFromOpenerPage', function(data) { + console.log(data) + }) + } +}) +``` */ + navigateTo<T extends NavigateToOption = NavigateToOption>( + option: T + ): PromisifySuccessResult<T, NavigateToOption> + /** [wx.navigateToMiniProgram(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/navigate/wx.navigateToMiniProgram.html) +* +* 需要基础库: `1.3.0` +* +* 在插件中使用:需要基础库 `2.18.1` +* +* 打开另一个小程序 +* +* **使用限制** +* +* ##### 需要用户触发跳转 +* 从 2.3.0 版本开始,若用户未点击小程序页面任意位置,则开发者将无法调用此接口自动跳转至其他小程序。 +* ##### 需要用户确认跳转 +* 从 2.3.0 版本开始,在跳转至其他小程序前,将统一增加弹窗,询问是否跳转,用户确认后才可以跳转其他小程序。如果用户点击取消,则回调 `fail cancel`。 +* ##### 无需声明跳转名单,不限跳转数量(众测中) +* 1. 从2020年4月24日起,使用跳转其他小程序功能将无需在全局配置中声明跳转名单,调用此接口时将不再校验所跳转的 AppID 是否在 navigateToMiniProgramAppIdList 中。 +* 2. 从2020年4月24日起,跳转其他小程序将不再受数量限制,使用此功能时请注意遵守运营规范。 +* +* **运营规范** +* +* 平台将坚决打击小程序盒子等互推行为,使用此功能时请严格遵守[《微信小程序平台运营规范》](https://developers.weixin.qq.com/miniprogram/product/#_5-10-%E4%BA%92%E6%8E%A8%E8%A1%8C%E4%B8%BA),若发现小程序违反运营规范将被下架处理。 +* +* **关于调试** +* +* - 在开发者工具上调用此 API 并不会真实的跳转到另外的小程序,但是开发者工具会校验本次调用跳转是否成功。[详情](https://developers.weixin.qq.com/miniprogram/dev/devtools/different.html#跳转小程序调试支持) +* - 开发者工具上支持被跳转的小程序处理接收参数的调试。[详情](https://developers.weixin.qq.com/miniprogram/dev/devtools/different.html#跳转小程序调试支持) +* +* **示例代码** +* +* ```js +wx.navigateToMiniProgram({ + appId: '', + path: 'page/index/index?id=123', + extraData: { + foo: 'bar' + }, + envVersion: 'develop', + success(res) { + // 打开成功 + } +}) +``` */ + navigateToMiniProgram< + T extends NavigateToMiniProgramOption = NavigateToMiniProgramOption + >( + option: T + ): PromisifySuccessResult<T, NavigateToMiniProgramOption> + /** [wx.nextTick(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/custom-component/wx.nextTick.html) +* +* 需要基础库: `2.2.3` +* +* 在插件中使用:需要基础库 `2.7.1` +* +* 延迟一部分操作到下一个时间片再执行。(类似于 setTimeout) +* +* **说明** +* +* 因为自定义组件中的 setData 和 triggerEvent 等接口本身是同步的操作,当这几个接口被连续调用时,都是在一个同步流程中执行完的,因此若逻辑不当可能会导致出错。 +* +* 一个极端的案例:当父组件的 setData 引发了子组件的 triggerEvent,进而使得父组件又进行了一次 setData,期间有通过 wx:if 语句对子组件进行卸载,就有可能引发奇怪的错误,所以对于不需要在一个同步流程内完成的逻辑,可以使用此接口延迟到下一个时间片再执行。 +* +* **示例代码** +* +* ```js +Component({ + doSth() { + this.setData({ number: 1 }) // 直接在当前同步流程中执行 + + wx.nextTick(() => { + this.setData({ number: 3 }) // 在当前同步流程结束后,下一个时间片执行 + }) + + this.setData({ number: 2 }) // 直接在当前同步流程中执行 + } +}) +``` */ + nextTick(callback: (...args: any[]) => any): void + /** [wx.notifyBLECharacteristicValueChange(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.notifyBLECharacteristicValueChange.html) +* +* 需要基础库: `1.1.0` +* +* 在插件中使用:需要基础库 `1.9.6` +* +* 启用蓝牙低功耗设备特征值变化时的 notify 功能,订阅特征。注意:必须设备的特征支持 notify 或者 indicate 才可以成功调用。 +* +* 另外,必须先启用 [wx.notifyBLECharacteristicValueChange](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.notifyBLECharacteristicValueChange.html) 才能监听到设备 `characteristicValueChange` 事件 +* +* **注意** +* +* - 订阅操作成功后需要设备主动更新特征的 value,才会触发 [wx.onBLECharacteristicValueChange](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.onBLECharacteristicValueChange.html) 回调。 +* - 安卓平台上,在本接口调用成功后立即调用 [wx.writeBLECharacteristicValue](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.writeBLECharacteristicValue.html) 接口,在部分机型上会发生 10008 系统错误 +* +* **示例代码** +* +* [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/pQU51zmz7a3K) +* ```js +wx.notifyBLECharacteristicValueChange({ + state: true, // 启用 notify 功能 + // 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接 + deviceId, + // 这里的 serviceId 需要在 getBLEDeviceServices 接口中获取 + serviceId, + // 这里的 characteristicId 需要在 getBLEDeviceCharacteristics 接口中获取 + characteristicId, + success (res) { + console.log('notifyBLECharacteristicValueChange success', res.errMsg) + } +}) +``` */ + notifyBLECharacteristicValueChange< + T extends NotifyBLECharacteristicValueChangeOption = NotifyBLECharacteristicValueChangeOption + >( + option: T + ): PromisifySuccessResult<T, NotifyBLECharacteristicValueChangeOption> + /** [wx.offAccelerometerChange(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/accelerometer/wx.offAccelerometerChange.html) +* +* 需要基础库: `2.9.3` +* +* 在插件中使用:需要基础库 `2.9.1` +* +* 移除加速度数据事件的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +wx.onAccelerometerChange(listener) +wx.offAccelerometerChange(listener) // 需传入与监听时同一个的函数对象 +``` */ + offAccelerometerChange( + /** onAccelerometerChange 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: OffAccelerometerChangeCallback + ): void + /** [wx.offAppHide(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/base/app/app-event/wx.offAppHide.html) +* +* 需要基础库: `2.1.2` +* +* 在插件中使用:不支持 +* +* 移除小程序切后台事件的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +wx.onAppHide(listener) +wx.offAppHide(listener) // 需传入与监听时同一个的函数对象 +``` */ + offAppHide( + /** onAppHide 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: OffAppHideCallback + ): void + /** [wx.offAppShow(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/base/app/app-event/wx.offAppShow.html) +* +* 需要基础库: `2.1.2` +* +* 在插件中使用:不支持 +* +* 移除小程序切前台事件的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +wx.onAppShow(listener) +wx.offAppShow(listener) // 需传入与监听时同一个的函数对象 +``` */ + offAppShow( + /** onAppShow 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: OffAppShowCallback + ): void + /** [wx.offAudioInterruptionBegin(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/base/app/app-event/wx.offAudioInterruptionBegin.html) +* +* 需要基础库: `2.6.2` +* +* 在插件中使用:需要基础库 `2.15.0` +* +* 移除音频因为受到系统占用而被中断开始事件的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +wx.onAudioInterruptionBegin(listener) +wx.offAudioInterruptionBegin(listener) // 需传入与监听时同一个的函数对象 +``` */ + offAudioInterruptionBegin( + /** onAudioInterruptionBegin 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: OffAudioInterruptionBeginCallback + ): void + /** [wx.offAudioInterruptionEnd(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/base/app/app-event/wx.offAudioInterruptionEnd.html) +* +* 需要基础库: `2.6.2` +* +* 在插件中使用:需要基础库 `2.15.0` +* +* 移除音频中断结束事件的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +wx.onAudioInterruptionEnd(listener) +wx.offAudioInterruptionEnd(listener) // 需传入与监听时同一个的函数对象 +``` */ + offAudioInterruptionEnd( + /** onAudioInterruptionEnd 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: OffAudioInterruptionEndCallback + ): void + /** [wx.offBLECharacteristicValueChange(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.offBLECharacteristicValueChange.html) +* +* 需要基础库: `2.9.0` +* +* 在插件中使用:需要基础库 `2.9.1` +* +* 移除蓝牙低功耗设备的特征值变化事件的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +wx.onBLECharacteristicValueChange(listener) +wx.offBLECharacteristicValueChange(listener) // 需传入与监听时同一个的函数对象 +``` */ + offBLECharacteristicValueChange( + /** onBLECharacteristicValueChange 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: OffBLECharacteristicValueChangeCallback + ): void + /** [wx.offBLEConnectionStateChange(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.offBLEConnectionStateChange.html) +* +* 需要基础库: `2.9.0` +* +* 在插件中使用:需要基础库 `2.9.1` +* +* 移除蓝牙低功耗连接状态改变事件的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +wx.onBLEConnectionStateChange(listener) +wx.offBLEConnectionStateChange(listener) // 需传入与监听时同一个的函数对象 +``` */ + offBLEConnectionStateChange( + /** onBLEConnectionStateChange 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: OffBLEConnectionStateChangeCallback + ): void + /** [wx.offBLEMTUChange(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.offBLEMTUChange.html) +* +* 需要基础库: `2.20.1` +* +* 在插件中使用:需要基础库 `2.20.1` +* +* 移除蓝牙低功耗的最大传输单元变化事件的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +wx.onBLEMTUChange(listener) +wx.offBLEMTUChange(listener) // 需传入与监听时同一个的函数对象 +``` */ + offBLEMTUChange( + /** onBLEMTUChange 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: OffBLEMTUChangeCallback + ): void + /** [wx.offBLEPeripheralConnectionStateChanged(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-peripheral/wx.offBLEPeripheralConnectionStateChanged.html) +* +* 需要基础库: `2.10.3` +* +* 在插件中使用:需要基础库 `2.22.1` +* +* 移除当前外围设备被连接或断开连接事件的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +wx.onBLEPeripheralConnectionStateChanged(listener) +wx.offBLEPeripheralConnectionStateChanged(listener) // 需传入与监听时同一个的函数对象 +``` */ + offBLEPeripheralConnectionStateChanged( + /** onBLEPeripheralConnectionStateChanged 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: OffBLEPeripheralConnectionStateChangedCallback + ): void + /** [wx.offBeaconServiceChange(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/ibeacon/wx.offBeaconServiceChange.html) +* +* 需要基础库: `2.8.1` +* +* 在插件中使用:需要基础库 `2.9.1` +* +* 移除 Beacon 服务状态变化事件的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +wx.onBeaconServiceChange(listener) +wx.offBeaconServiceChange(listener) // 需传入与监听时同一个的函数对象 +``` */ + offBeaconServiceChange( + /** onBeaconServiceChange 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: OffBeaconServiceChangeCallback + ): void + /** [wx.offBeaconUpdate(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/ibeacon/wx.offBeaconUpdate.html) +* +* 需要基础库: `2.8.1` +* +* 在插件中使用:需要基础库 `2.9.1` +* +* 移除 Beacon 设备更新事件的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +wx.onBeaconUpdate(listener) +wx.offBeaconUpdate(listener) // 需传入与监听时同一个的函数对象 +``` */ + offBeaconUpdate( + /** onBeaconUpdate 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: OffBeaconUpdateCallback + ): void + /** [wx.offBluetoothAdapterStateChange(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth/wx.offBluetoothAdapterStateChange.html) +* +* 需要基础库: `2.9.0` +* +* 在插件中使用:需要基础库 `2.9.1` +* +* 移除蓝牙适配器状态变化事件的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +wx.onBluetoothAdapterStateChange(listener) +wx.offBluetoothAdapterStateChange(listener) // 需传入与监听时同一个的函数对象 +``` */ + offBluetoothAdapterStateChange( + /** onBluetoothAdapterStateChange 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: OffBluetoothAdapterStateChangeCallback + ): void + /** [wx.offBluetoothDeviceFound(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth/wx.offBluetoothDeviceFound.html) +* +* 需要基础库: `2.9.0` +* +* 在插件中使用:需要基础库 `2.9.1` +* +* 移除搜索到新设备的事件的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +wx.onBluetoothDeviceFound(listener) +wx.offBluetoothDeviceFound(listener) // 需传入与监听时同一个的函数对象 +``` */ + offBluetoothDeviceFound( + /** onBluetoothDeviceFound 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: OffBluetoothDeviceFoundCallback + ): void + /** [wx.offCompassChange(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/compass/wx.offCompassChange.html) +* +* 需要基础库: `2.9.3` +* +* 在插件中使用:需要基础库 `2.9.1` +* +* 移除罗盘数据变化事件的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +wx.onCompassChange(listener) +wx.offCompassChange(listener) // 需传入与监听时同一个的函数对象 +``` */ + offCompassChange( + /** onCompassChange 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: OffCompassChangeCallback + ): void + /** [wx.offCopyUrl(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/share/wx.offCopyUrl.html) +* +* 需要基础库: `2.14.3` +* +* 在插件中使用:不支持 +* +* 移除用户点击右上角菜单的「复制链接」按钮时触发的事件的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +wx.onCopyUrl(listener) +wx.offCopyUrl(listener) // 需传入与监听时同一个的函数对象 +``` */ + offCopyUrl( + /** onCopyUrl 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: OffCopyUrlCallback + ): void + /** [wx.offDeviceMotionChange(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/motion/wx.offDeviceMotionChange.html) +* +* 需要基础库: `2.9.3` +* +* 在插件中使用:需要基础库 `2.9.1` +* +* 移除设备方向变化事件的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +wx.onDeviceMotionChange(listener) +wx.offDeviceMotionChange(listener) // 需传入与监听时同一个的函数对象 +``` */ + offDeviceMotionChange( + /** onDeviceMotionChange 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: OffDeviceMotionChangeCallback + ): void + /** [wx.offError(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/base/app/app-event/wx.offError.html) +* +* 需要基础库: `2.1.2` +* +* 在插件中使用:不支持 +* +* 移除小程序错误事件的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +wx.onError(listener) +wx.offError(listener) // 需传入与监听时同一个的函数对象 +``` */ + offError( + /** onError 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: WxOffErrorCallback + ): void + /** [wx.offGetWifiList(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/wifi/wx.offGetWifiList.html) +* +* 需要基础库: `2.9.0` +* +* 在插件中使用:需要基础库 `2.9.1` +* +* 移除获取到 Wi-Fi 列表数据事件的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +wx.onGetWifiList(listener) +wx.offGetWifiList(listener) // 需传入与监听时同一个的函数对象 +``` */ + offGetWifiList( + /** onGetWifiList 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: OffGetWifiListCallback + ): void + /** [wx.offHCEMessage(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc-hce/wx.offHCEMessage.html) +* +* 需要基础库: `2.8.1` +* +* 在插件中使用:需要基础库 `2.9.1` +* +* 移除接收 NFC 设备消息事件的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +wx.onHCEMessage(listener) +wx.offHCEMessage(listener) // 需传入与监听时同一个的函数对象 +``` */ + offHCEMessage( + /** onHCEMessage 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: OffHCEMessageCallback + ): void + /** [wx.offKeyboardHeightChange(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/keyboard/wx.offKeyboardHeightChange.html) +* +* 需要基础库: `2.9.2` +* +* 在插件中使用:不支持 +* +* 移除键盘高度变化事件的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +wx.onKeyboardHeightChange(listener) +wx.offKeyboardHeightChange(listener) // 需传入与监听时同一个的函数对象 +``` */ + offKeyboardHeightChange( + /** onKeyboardHeightChange 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: OffKeyboardHeightChangeCallback + ): void + /** [wx.offLazyLoadError(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/base/app/app-event/wx.offLazyLoadError.html) +* +* 需要基础库: `2.24.3` +* +* 在插件中使用:不支持 +* +* 移除小程序异步组件加载失败事件的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +wx.onLazyLoadError(listener) +wx.offLazyLoadError(listener) // 需传入与监听时同一个的函数对象 +``` */ + offLazyLoadError( + /** onLazyLoadError 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: OffLazyLoadErrorCallback + ): void + /** [wx.offLocalServiceDiscoveryStop(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/mdns/wx.offLocalServiceDiscoveryStop.html) +* +* 需要基础库: `2.4.0` +* +* 在插件中使用:需要基础库 `2.15.0` +* +* 移除 mDNS 服务停止搜索的事件的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +wx.onLocalServiceDiscoveryStop(listener) +wx.offLocalServiceDiscoveryStop(listener) // 需传入与监听时同一个的函数对象 +``` */ + offLocalServiceDiscoveryStop( + /** onLocalServiceDiscoveryStop 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: OffLocalServiceDiscoveryStopCallback + ): void + /** [wx.offLocalServiceFound(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/mdns/wx.offLocalServiceFound.html) +* +* 需要基础库: `2.4.0` +* +* 在插件中使用:需要基础库 `2.15.0` +* +* 移除 mDNS 服务发现的事件的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +wx.onLocalServiceFound(listener) +wx.offLocalServiceFound(listener) // 需传入与监听时同一个的函数对象 +``` */ + offLocalServiceFound( + /** onLocalServiceFound 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: OffLocalServiceFoundCallback + ): void + /** [wx.offLocalServiceLost(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/mdns/wx.offLocalServiceLost.html) +* +* 需要基础库: `2.4.0` +* +* 在插件中使用:需要基础库 `2.15.0` +* +* 移除 mDNS 服务离开的事件的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +wx.onLocalServiceLost(listener) +wx.offLocalServiceLost(listener) // 需传入与监听时同一个的函数对象 +``` */ + offLocalServiceLost( + /** onLocalServiceLost 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: OffLocalServiceLostCallback + ): void + /** [wx.offLocalServiceResolveFail(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/mdns/wx.offLocalServiceResolveFail.html) +* +* 需要基础库: `2.4.0` +* +* 在插件中使用:需要基础库 `2.15.0` +* +* 移除 mDNS 服务解析失败的事件的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +wx.onLocalServiceResolveFail(listener) +wx.offLocalServiceResolveFail(listener) // 需传入与监听时同一个的函数对象 +``` */ + offLocalServiceResolveFail( + /** onLocalServiceResolveFail 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: OffLocalServiceResolveFailCallback + ): void + /** [wx.offLocationChange(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/location/wx.offLocationChange.html) +* +* 需要基础库: `2.8.1` +* +* 在插件中使用:不支持 +* +* 移除实时地理位置变化事件的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +wx.onLocationChange(listener) +wx.offLocationChange(listener) // 需传入与监听时同一个的函数对象 +``` */ + offLocationChange( + /** onLocationChange 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: OffLocationChangeCallback + ): void + /** [wx.offLocationChangeError(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/location/wx.offLocationChangeError.html) +* +* 需要基础库: `2.19.5` +* +* 在插件中使用:不支持 +* +* 移除持续定位接口返回失败时触发。的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +wx.onLocationChangeError(listener) +wx.offLocationChangeError(listener) // 需传入与监听时同一个的函数对象 +``` */ + offLocationChangeError( + /** onLocationChangeError 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: OffLocationChangeErrorCallback + ): void + /** [wx.offMemoryWarning(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/memory/wx.offMemoryWarning.html) +* +* 需要基础库: `2.9.0` +* +* 在插件中使用:不支持 +* +* 移除内存不足告警事件的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +wx.onMemoryWarning(listener) +wx.offMemoryWarning(listener) // 需传入与监听时同一个的函数对象 +``` */ + offMemoryWarning( + /** onMemoryWarning 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: OffMemoryWarningCallback + ): void + /** [wx.offNetworkStatusChange(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/network/wx.offNetworkStatusChange.html) +* +* 需要基础库: `2.9.3` +* +* 在插件中使用:需要基础库 `2.9.1` +* +* 移除网络状态变化事件的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +wx.onNetworkStatusChange(listener) +wx.offNetworkStatusChange(listener) // 需传入与监听时同一个的函数对象 +``` */ + offNetworkStatusChange( + /** onNetworkStatusChange 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: OffNetworkStatusChangeCallback + ): void + /** [wx.offNetworkWeakChange(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/network/wx.offNetworkWeakChange.html) +* +* 需要基础库: `2.21.0` +* +* 在插件中使用:不支持 +* +* 移除弱网状态变化事件的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +wx.onNetworkWeakChange(listener) +wx.offNetworkWeakChange(listener) // 需传入与监听时同一个的函数对象 +``` */ + offNetworkWeakChange( + /** onNetworkWeakChange 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: OffNetworkWeakChangeCallback + ): void + /** [wx.offPageNotFound(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/base/app/app-event/wx.offPageNotFound.html) +* +* 需要基础库: `2.1.2` +* +* 在插件中使用:不支持 +* +* 移除小程序要打开的页面不存在事件的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +wx.onPageNotFound(listener) +wx.offPageNotFound(listener) // 需传入与监听时同一个的函数对象 +``` */ + offPageNotFound( + /** onPageNotFound 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: OffPageNotFoundCallback + ): void + /** [wx.offScreenRecordingStateChanged(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/screen/wx.offScreenRecordingStateChanged.html) +* +* 需要基础库: `2.24.0` +* +* 在插件中使用:不支持 +* +* 移除用户录屏事件的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +wx.onScreenRecordingStateChanged(listener) +wx.offScreenRecordingStateChanged(listener) // 需传入与监听时同一个的函数对象 +``` */ + offScreenRecordingStateChanged( + /** onScreenRecordingStateChanged 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: OffScreenRecordingStateChangedCallback + ): void + /** [wx.offThemeChange(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/base/app/app-event/wx.offThemeChange.html) +* +* 需要基础库: `2.11.0` +* +* 在插件中使用:不支持 +* +* 移除系统主题改变事件的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +wx.onThemeChange(listener) +wx.offThemeChange(listener) // 需传入与监听时同一个的函数对象 +``` */ + offThemeChange( + /** onThemeChange 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: OffThemeChangeCallback + ): void + /** [wx.offUnhandledRejection(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/base/app/app-event/wx.offUnhandledRejection.html) +* +* 需要基础库: `2.10.0` +* +* 在插件中使用:不支持 +* +* 移除未处理的 Promise 拒绝事件的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +wx.onUnhandledRejection(listener) +wx.offUnhandledRejection(listener) // 需传入与监听时同一个的函数对象 +``` */ + offUnhandledRejection( + /** onUnhandledRejection 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: OffUnhandledRejectionCallback + ): void + /** [wx.offUserCaptureScreen(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/device/screen/wx.offUserCaptureScreen.html) + * + * 需要基础库: `2.9.3` + * + * 在插件中使用:需要基础库 `2.9.1` + * + * 在插件中使用时,只能在当前插件的页面中调用 + * + * 用户主动截屏事件。取消事件监听。 */ + offUserCaptureScreen( + /** 用户主动截屏事件的回调函数 */ + callback?: (...args: any[]) => any + ): void + /** [wx.offVoIPChatInterrupted(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/voip/wx.offVoIPChatInterrupted.html) +* +* 需要基础库: `2.9.0` +* +* 在插件中使用:需要基础库 `2.9.1` +* +* 移除被动断开实时语音通话事件的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +wx.onVoIPChatInterrupted(listener) +wx.offVoIPChatInterrupted(listener) // 需传入与监听时同一个的函数对象 +``` */ + offVoIPChatInterrupted( + /** onVoIPChatInterrupted 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: OffVoIPChatInterruptedCallback + ): void + /** [wx.offVoIPChatMembersChanged(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/voip/wx.offVoIPChatMembersChanged.html) +* +* 需要基础库: `2.9.0` +* +* 在插件中使用:需要基础库 `2.9.1` +* +* 移除实时语音通话成员在线状态变化事件的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +wx.onVoIPChatMembersChanged(listener) +wx.offVoIPChatMembersChanged(listener) // 需传入与监听时同一个的函数对象 +``` */ + offVoIPChatMembersChanged( + /** onVoIPChatMembersChanged 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: OffVoIPChatMembersChangedCallback + ): void + /** [wx.offVoIPChatSpeakersChanged(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/voip/wx.offVoIPChatSpeakersChanged.html) +* +* 需要基础库: `2.9.0` +* +* 在插件中使用:需要基础库 `2.9.1` +* +* 移除实时语音通话成员通话状态变化事件的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +wx.onVoIPChatSpeakersChanged(listener) +wx.offVoIPChatSpeakersChanged(listener) // 需传入与监听时同一个的函数对象 +``` */ + offVoIPChatSpeakersChanged( + /** onVoIPChatSpeakersChanged 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: OffVoIPChatSpeakersChangedCallback + ): void + /** [wx.offVoIPChatStateChanged(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/voip/wx.offVoIPChatStateChanged.html) +* +* 需要基础库: `2.16.0` +* +* 在插件中使用:不支持 +* +* 移除房间状态变化事件的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +wx.onVoIPChatStateChanged(listener) +wx.offVoIPChatStateChanged(listener) // 需传入与监听时同一个的函数对象 +``` */ + offVoIPChatStateChanged( + /** onVoIPChatStateChanged 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: OffVoIPChatStateChangedCallback + ): void + /** [wx.offVoIPVideoMembersChanged(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/voip/wx.offVoIPVideoMembersChanged.html) +* +* 需要基础库: `2.11.0` +* +* 在插件中使用:不支持 +* +* 移除实时语音通话成员视频状态变化事件的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +wx.onVoIPVideoMembersChanged(listener) +wx.offVoIPVideoMembersChanged(listener) // 需传入与监听时同一个的函数对象 +``` */ + offVoIPVideoMembersChanged( + /** onVoIPVideoMembersChanged 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: OffVoIPVideoMembersChangedCallback + ): void + /** [wx.offWifiConnected(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/wifi/wx.offWifiConnected.html) +* +* 需要基础库: `2.9.0` +* +* 在插件中使用:需要基础库 `2.9.1` +* +* 移除连接上 Wi-Fi 的事件的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +wx.onWifiConnected(listener) +wx.offWifiConnected(listener) // 需传入与监听时同一个的函数对象 +``` */ + offWifiConnected( + /** onWifiConnected 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: OffWifiConnectedCallback + ): void + /** [wx.offWifiConnectedWithPartialInfo(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/wifi/wx.offWifiConnectedWithPartialInfo.html) +* +* 需要基础库: `2.22.0` +* +* 在插件中使用:需要基础库 `2.22.1` +* +* 移除连接上 Wi-Fi 的事件的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +wx.onWifiConnectedWithPartialInfo(listener) +wx.offWifiConnectedWithPartialInfo(listener) // 需传入与监听时同一个的函数对象 +``` */ + offWifiConnectedWithPartialInfo( + /** onWifiConnectedWithPartialInfo 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: OffWifiConnectedWithPartialInfoCallback + ): void + /** [wx.offWindowResize(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/window/wx.offWindowResize.html) +* +* 需要基础库: `2.3.0` +* +* 在插件中使用:不支持 +* +* 移除窗口尺寸变化事件的监听函数 +* +* **示例代码** +* +* ```js +const listener = function (res) { console.log(res) } + +wx.onWindowResize(listener) +wx.offWindowResize(listener) // 需传入与监听时同一个的函数对象 +``` */ + offWindowResize( + /** onWindowResize 传入的监听函数。不传此参数则移除所有监听函数。 */ + listener?: OffWindowResizeCallback + ): void + /** [wx.onAccelerometerChange(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/accelerometer/wx.onAccelerometerChange.html) +* +* 在插件中使用:不支持 +* +* 监听加速度数据事件。频率根据 [wx.startAccelerometer()](https://developers.weixin.qq.com/miniprogram/dev/api/device/accelerometer/wx.startAccelerometer.html) 的 interval 参数, 接口调用后会自动开始监听。 +* +* **示例代码** +* +* ```js +wx.onAccelerometerChange(callback) +``` */ + onAccelerometerChange( + /** 加速度数据事件的监听函数 */ + listener: OnAccelerometerChangeCallback + ): void + /** [wx.onAppHide(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/base/app/app-event/wx.onAppHide.html) + * + * 需要基础库: `2.1.2` + * + * 在插件中使用:不支持 + * + * 监听小程序切后台事件。该事件与 [`App.onHide`](https://developers.weixin.qq.com/miniprogram/dev/reference/api/App.html#onhide) 的回调时机一致。 */ + onAppHide( + /** 小程序切后台事件的监听函数 */ + listener: OnAppHideCallback + ): void + /** [wx.onAppShow(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/base/app/app-event/wx.onAppShow.html) + * + * 需要基础库: `2.1.2` + * + * 在插件中使用:不支持 + * + * 监听小程序切前台事件。该事件与 [`App.onShow`](https://developers.weixin.qq.com/miniprogram/dev/reference/api/App.html#onshowobject-object) 的回调参数一致。 + * + * **返回有效 referrerInfo 的场景** + * + * | 场景值 | 场景 | appId含义 | + * | ------ | ------------------------------- | ---------- | + * | 1020 | 公众号 profile 页相关小程序列表 | 来源公众号 | + * | 1035 | 公众号自定义菜单 | 来源公众号 | + * | 1036 | App 分享消息卡片 | 来源App | + * | 1037 | 小程序打开小程序 | 来源小程序 | + * | 1038 | 从另一个小程序返回 | 来源小程序 | + * | 1043 | 公众号模板消息 | 来源公众号 | + * + * **不同 apiCategory 场景下的 API 限制** + * + * `X` 表示 API 被限制无法使用;不在表格中的 API 不限制。 + * + * | | default | nativeFunctionalized | browseOnly | embedded | + * |-|-|-|-|-| + * |navigateToMiniProgram | | `X` | `X` | | + * |openSetting | | | `X` | | + * |<button open-type="share"> | | `X` | `X` | `X` | + * |<button open-type="feedback"> | | | `X` | | + * |<button open-type="open-setting">| | | `X` | | + * |openEmbeddedMiniProgram | | `X` | `X` | `X` | + * + * **注意** + * + * 部分版本在无`referrerInfo`的时候会返回 `undefined`,建议使用 `options.referrerInfo && options.referrerInfo.appId` 进行判断。 */ + onAppShow( + /** 小程序切前台事件的监听函数 */ + listener: OnAppShowCallback + ): void + /** [wx.onAudioInterruptionBegin(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/base/app/app-event/wx.onAudioInterruptionBegin.html) + * + * 需要基础库: `2.6.2` + * + * 在插件中使用:需要基础库 `2.15.0` + * + * 监听音频因为受到系统占用而被中断开始事件。以下场景会触发此事件:闹钟、电话、FaceTime 通话、微信语音聊天、微信视频聊天。此事件触发后,小程序内所有音频会暂停。 */ + onAudioInterruptionBegin( + /** 音频因为受到系统占用而被中断开始事件的监听函数 */ + listener: OnAudioInterruptionBeginCallback + ): void + /** [wx.onAudioInterruptionEnd(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/base/app/app-event/wx.onAudioInterruptionEnd.html) + * + * 需要基础库: `2.6.2` + * + * 在插件中使用:需要基础库 `2.15.0` + * + * 监听音频中断结束事件。在收到 onAudioInterruptionBegin 事件之后,小程序内所有音频会暂停,收到此事件之后才可再次播放成功 */ + onAudioInterruptionEnd( + /** 音频中断结束事件的监听函数 */ + listener: OnAudioInterruptionEndCallback + ): void + /** [wx.onBLECharacteristicValueChange(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.onBLECharacteristicValueChange.html) +* +* 需要基础库: `1.1.0` +* +* 在插件中使用:需要基础库 `2.9.1` +* +* 监听蓝牙低功耗设备的特征值变化事件。必须先调用 [wx.notifyBLECharacteristicValueChange](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.notifyBLECharacteristicValueChange.html) 接口才能接收到设备推送的 notification。 +* +* **示例代码** +* +* [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/pQU51zmz7a3K) +* +* ```js +// ArrayBuffer转16进制字符串示例 +function ab2hex(buffer) { + let hexArr = Array.prototype.map.call( + new Uint8Array(buffer), + function(bit) { + return ('00' + bit.toString(16)).slice(-2) + } + ) + return hexArr.join(''); +} +wx.onBLECharacteristicValueChange(function(res) { + console.log(`characteristic ${res.characteristicId} has changed, now is ${res.value}`) + console.log(ab2hex(res.value)) +}) +``` */ + onBLECharacteristicValueChange( + /** 蓝牙低功耗设备的特征值变化事件的监听函数 */ + listener: OnBLECharacteristicValueChangeCallback + ): void + /** [wx.onBLEConnectionStateChange(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.onBLEConnectionStateChange.html) +* +* 需要基础库: `1.1.0` +* +* 在插件中使用:需要基础库 `2.9.1` +* +* 监听蓝牙低功耗连接状态改变事件。包括开发者主动连接或断开连接,设备丢失,连接异常断开等等 +* +* **示例代码** +* +* [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/pQU51zmz7a3K) +* ```js +wx.onBLEConnectionStateChange(function(res) { + // 该方法回调中可以用于处理连接意外断开等异常情况 + console.log(`device ${res.deviceId} state has changed, connected: ${res.connected}`) +}) +``` */ + onBLEConnectionStateChange( + /** 蓝牙低功耗连接状态改变事件的监听函数 */ + listener: OnBLEConnectionStateChangeCallback + ): void + /** [wx.onBLEMTUChange(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.onBLEMTUChange.html) +* +* 需要基础库: `2.20.1` +* +* 在插件中使用:需要基础库 `2.20.1` +* +* 监听蓝牙低功耗的最大传输单元变化事件(仅安卓触发)。 +* +* **示例代码** +* +* [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/pQU51zmz7a3K) +* ```js +wx.onBLEMTUChange(function (res) { + console.log('bluetooth mtu is', res.mtu) +}) +``` */ + onBLEMTUChange( + /** 蓝牙低功耗的最大传输单元变化事件的监听函数 */ + listener: OnBLEMTUChangeCallback + ): void + /** [wx.onBLEPeripheralConnectionStateChanged(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-peripheral/wx.onBLEPeripheralConnectionStateChanged.html) + * + * 需要基础库: `2.10.3` + * + * 在插件中使用:需要基础库 `2.22.1` + * + * 监听当前外围设备被连接或断开连接事件 */ + onBLEPeripheralConnectionStateChanged( + /** 当前外围设备被连接或断开连接事件的监听函数 */ + listener: OnBLEPeripheralConnectionStateChangedCallback + ): void + /** [wx.onBackgroundAudioPause(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/wx.onBackgroundAudioPause.html) + * + * 在插件中使用:不支持 + * @deprecated 基础库版本 [1.2.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [wx.getBackgroundAudioManager](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/wx.getBackgroundAudioManager.html) 替换 + * + * 监听音乐暂停事件。 */ + onBackgroundAudioPause( + /** 音乐暂停事件的监听函数 */ + listener: OnBackgroundAudioPauseCallback + ): void + /** [wx.onBackgroundAudioPlay(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/wx.onBackgroundAudioPlay.html) + * + * 在插件中使用:不支持 + * @deprecated 基础库版本 [1.2.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [wx.getBackgroundAudioManager](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/wx.getBackgroundAudioManager.html) 替换 + * + * 监听音乐播放事件。 */ + onBackgroundAudioPlay( + /** 音乐播放事件的监听函数 */ + listener: OnBackgroundAudioPlayCallback + ): void + /** [wx.onBackgroundAudioStop(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/wx.onBackgroundAudioStop.html) + * + * 在插件中使用:不支持 + * @deprecated 基础库版本 [1.2.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [wx.getBackgroundAudioManager](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/wx.getBackgroundAudioManager.html) 替换 + * + * 监听音乐停止事件。 */ + onBackgroundAudioStop( + /** 音乐停止事件的监听函数 */ + listener: OnBackgroundAudioStopCallback + ): void + /** [wx.onBackgroundFetchData(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/storage/background-fetch/wx.onBackgroundFetchData.html) + * + * 需要基础库: `2.8.0` + * + * 在插件中使用:不支持 + * + * 监听收到 backgroundFetch 数据事件。如果监听时请求已经完成,则事件不会触发。建议和 [wx.getBackgroundFetchData](https://developers.weixin.qq.com/miniprogram/dev/api/storage/background-fetch/wx.getBackgroundFetchData.html) 配合使用 */ + onBackgroundFetchData( + /** 收到 backgroundFetch 数据事件的监听函数 */ + listener: OnBackgroundFetchDataCallback + ): void + /** [wx.onBeaconServiceChange(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/ibeacon/wx.onBeaconServiceChange.html) + * + * 需要基础库: `1.2.0` + * + * 在插件中使用:需要基础库 `1.9.6` + * + * 监听 Beacon 服务状态变化事件,仅能注册一个监听 */ + onBeaconServiceChange( + /** Beacon 服务状态变化事件的监听函数 */ + listener: OnBeaconServiceChangeCallback + ): void + /** [wx.onBeaconUpdate(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/ibeacon/wx.onBeaconUpdate.html) + * + * 需要基础库: `1.2.0` + * + * 在插件中使用:需要基础库 `1.9.6` + * + * 监听 Beacon 设备更新事件,仅能注册一个监听 */ + onBeaconUpdate( + /** Beacon 设备更新事件的监听函数 */ + listener: OnBeaconUpdateCallback + ): void + /** [wx.onBluetoothAdapterStateChange(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth/wx.onBluetoothAdapterStateChange.html) +* +* 需要基础库: `1.1.0` +* +* 在插件中使用:需要基础库 `2.9.1` +* +* 监听蓝牙适配器状态变化事件 +* +* **示例代码** +* +* [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/pQU51zmz7a3K) +* ```js +wx.onBluetoothAdapterStateChange(function (res) { + console.log('adapterState changed, now is', res) +}) +``` */ + onBluetoothAdapterStateChange( + /** 蓝牙适配器状态变化事件的监听函数 */ + listener: OnBluetoothAdapterStateChangeCallback + ): void + /** [wx.onBluetoothDeviceFound(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth/wx.onBluetoothDeviceFound.html) +* +* 需要基础库: `1.1.0` +* +* 在插件中使用:需要基础库 `2.9.1` +* +* 监听搜索到新设备的事件 +* +* **注意** +* +* - 若在 [wx.onBluetoothDeviceFound](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth/wx.onBluetoothDeviceFound.html) 回调了某个设备,则此设备会添加到 [wx.getBluetoothDevices](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth/wx.getBluetoothDevices.html) 接口获取到的数组中。 +* +* **示例代码** +* +* [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/pQU51zmz7a3K) +* +* ```js +// ArrayBuffer转16进度字符串示例 +function ab2hex(buffer) { + var hexArr = Array.prototype.map.call( + new Uint8Array(buffer), + function(bit) { + return ('00' + bit.toString(16)).slice(-2) + } + ) + return hexArr.join(''); +} +wx.onBluetoothDeviceFound(function(res) { + var devices = res.devices; + console.log('new device list has founded') + console.dir(devices) + console.log(ab2hex(devices[0].advertisData)) +}) +``` +* +* **注意** +* +* - 蓝牙设备在被搜索到时,系统返回的 `name` 字段一般为广播包中的 `LocalName` 字段中的设备名称,而如果与蓝牙设备建立连接,系统返回的 `name` 字段会改为从蓝牙设备上获取到的 `GattName`。若需要动态改变设备名称并展示,建议使用 `localName` 字段。 +* - 安卓下部分机型需要有位置权限才能搜索到设备,需留意是否开启了位置权限 */ + onBluetoothDeviceFound( + /** 搜索到新设备的事件的监听函数 */ + listener: OnBluetoothDeviceFoundCallback + ): void + /** [wx.onCompassChange(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/compass/wx.onCompassChange.html) + * + * 在插件中使用:不支持 + * + * 监听罗盘数据变化事件。频率:5 次/秒,接口调用后会自动开始监听,可使用 wx.stopCompass 停止监听。 + * + * **accuracy 在 iOS/Android 的差异** + * + * 由于平台差异,accuracy 在 iOS/Android 的值不同。 + * + * - iOS:accuracy 是一个 number 类型的值,表示相对于磁北极的偏差。0 表示设备指向磁北,90 表示指向东,180 表示指向南,依此类推。 + * - Android:accuracy 是一个 string 类型的枚举值。 + * + * | 值 | 说明 | + * | --------------- | -------------------------------------------------------------------------------------- | + * | high | 高精度 | + * | medium | 中等精度 | + * | low | 低精度 | + * | no-contact | 不可信,传感器失去连接 | + * | unreliable | 不可信,原因未知 | + * | unknow ${value} | 未知的精度枚举值,即该 Android 系统此时返回的表示精度的 value 不是一个标准的精度枚举值 | */ + onCompassChange( + /** 罗盘数据变化事件的监听函数 */ + listener: OnCompassChangeCallback + ): void + /** [wx.onCopyUrl(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/share/wx.onCopyUrl.html) + * + * 需要基础库: `2.14.3` + * + * 在插件中使用:不支持 + * + * 监听用户点击右上角菜单的「复制链接」按钮时触发的事件。本接口为 Beta 版本,暂只在 Android 平台支持。 */ + onCopyUrl( + /** 用户点击右上角菜单的「复制链接」按钮时触发的事件的监听函数 */ + listener: OnCopyUrlCallback + ): void + /** [wx.onDeviceMotionChange(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/motion/wx.onDeviceMotionChange.html) + * + * 需要基础库: `2.3.0` + * + * 在插件中使用:不支持 + * + * 监听设备方向变化事件。频率根据 [wx.startDeviceMotionListening()](https://developers.weixin.qq.com/miniprogram/dev/api/device/motion/wx.startDeviceMotionListening.html) 的 interval 参数。可以使用 [wx.stopDeviceMotionListening()](https://developers.weixin.qq.com/miniprogram/dev/api/device/motion/wx.stopDeviceMotionListening.html) 停止监听。 */ + onDeviceMotionChange( + /** 设备方向变化事件的监听函数 */ + listener: OnDeviceMotionChangeCallback + ): void + /** [wx.onError(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/base/app/app-event/wx.onError.html) + * + * 需要基础库: `2.1.2` + * + * 在插件中使用:不支持 + * + * 监听小程序错误事件。如脚本错误或 API 调用报错等。该事件与 [`App.onError`](https://developers.weixin.qq.com/miniprogram/dev/reference/api/App.html#onerrorstring-error) 的回调时机与参数一致。 */ + onError( + /** 小程序错误事件的监听函数 */ + listener: WxOnErrorCallback + ): void + /** [wx.onGetWifiList(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/wifi/wx.onGetWifiList.html) + * + * 需要基础库: `1.6.0` + * + * 在插件中使用:需要基础库 `2.9.1` + * + * 监听获取到 Wi-Fi 列表数据事件 */ + onGetWifiList( + /** 获取到 Wi-Fi 列表数据事件的监听函数 */ + listener: OnGetWifiListCallback + ): void + /** [wx.onGyroscopeChange(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/gyroscope/wx.onGyroscopeChange.html) + * + * 需要基础库: `2.3.0` + * + * 在插件中使用:需要基础库 `2.9.1` + * + * 监听陀螺仪数据变化事件。频率根据 [wx.startGyroscope()](https://developers.weixin.qq.com/miniprogram/dev/api/device/gyroscope/wx.startGyroscope.html) 的 interval 参数。可以使用 [wx.stopGyroscope()](https://developers.weixin.qq.com/miniprogram/dev/api/device/gyroscope/wx.stopGyroscope.html) 停止监听。 */ + onGyroscopeChange( + /** 陀螺仪数据变化事件的监听函数 */ + listener: OnGyroscopeChangeCallback + ): void + /** [wx.onHCEMessage(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc-hce/wx.onHCEMessage.html) + * + * 需要基础库: `1.7.0` + * + * 在插件中使用:需要基础库 `2.9.1` + * + * 监听接收 NFC 设备消息事件。仅能注册一个监听 */ + onHCEMessage( + /** 接收 NFC 设备消息事件的监听函数 */ + listener: OnHCEMessageCallback + ): void + /** [wx.onKeyboardHeightChange(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/keyboard/wx.onKeyboardHeightChange.html) +* +* 需要基础库: `2.7.0` +* +* 在插件中使用:不支持 +* +* 监听键盘高度变化事件 +* +* **示例代码** +* +* ```js +wx.onKeyboardHeightChange(res => { + console.log(res.height) +}) +``` */ + onKeyboardHeightChange( + /** 键盘高度变化事件的监听函数 */ + listener: OnKeyboardHeightChangeCallback + ): void + /** [wx.onLazyLoadError(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/base/app/app-event/wx.onLazyLoadError.html) + * + * 需要基础库: `2.24.3` + * + * 在插件中使用:不支持 + * + * 监听小程序异步组件加载失败事件。 + * + * **注意** + * + * - 加载异步组件通常需要下载分包,若分包下载超时,则会触发 errMsg 为 "loadSubpackage: timeout" 的回调,默认超时等待时间为 5 秒。 + * - 可以通过第二个参数指定超时时间(单位:ms),该设置全局有效,多次指定超时时间则覆盖前面。 + * - 分包确认下载失败时,会再次触发 errMsg 为 "loadSubpackage: fail" 的回调。 + * - 若在页面中使用该接口进行监听,请确保在必要时手动调用 offLazyLoadError 取消监听,以避免非预期的内存泄漏。 */ + onLazyLoadError( + /** 小程序异步组件加载失败事件的监听函数 */ + listener: OnLazyLoadErrorCallback + ): void + /** [wx.onLocalServiceDiscoveryStop(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/mdns/wx.onLocalServiceDiscoveryStop.html) + * + * 需要基础库: `2.4.0` + * + * 在插件中使用:需要基础库 `2.15.0` + * + * 监听 mDNS 服务停止搜索的事件 */ + onLocalServiceDiscoveryStop( + /** mDNS 服务停止搜索的事件的监听函数 */ + listener: OnLocalServiceDiscoveryStopCallback + ): void + /** [wx.onLocalServiceFound(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/mdns/wx.onLocalServiceFound.html) + * + * 需要基础库: `2.4.0` + * + * 在插件中使用:需要基础库 `2.15.0` + * + * 监听 mDNS 服务发现的事件 */ + onLocalServiceFound( + /** mDNS 服务发现的事件的监听函数 */ + listener: OnLocalServiceFoundCallback + ): void + /** [wx.onLocalServiceLost(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/mdns/wx.onLocalServiceLost.html) + * + * 需要基础库: `2.4.0` + * + * 在插件中使用:需要基础库 `2.15.0` + * + * 监听 mDNS 服务离开的事件 */ + onLocalServiceLost( + /** mDNS 服务离开的事件的监听函数 */ + listener: OnLocalServiceLostCallback + ): void + /** [wx.onLocalServiceResolveFail(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/mdns/wx.onLocalServiceResolveFail.html) + * + * 需要基础库: `2.4.0` + * + * 在插件中使用:需要基础库 `2.15.0` + * + * 监听 mDNS 服务解析失败的事件 */ + onLocalServiceResolveFail( + /** mDNS 服务解析失败的事件的监听函数 */ + listener: OnLocalServiceResolveFailCallback + ): void + /** [wx.onLocationChange(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/location/wx.onLocationChange.html) +* +* 需要基础库: `2.8.1` +* +* 在插件中使用:不支持 +* +* 监听实时地理位置变化事件,需结合 [wx.startLocationUpdateBackground](https://developers.weixin.qq.com/miniprogram/dev/api/location/wx.startLocationUpdateBackground.html)、[wx.startLocationUpdate](https://developers.weixin.qq.com/miniprogram/dev/api/location/wx.startLocationUpdate.html)使用。 +* +* ## 使用方法 +* 自 2022 年 7 月 14 日后发布的小程序,若使用该接口,需要在 app.json 中进行声明,否则将无法正常使用该接口,2022年7月14日前发布的小程序不受影响。[具体规则见公告](https://developers.weixin.qq.com/community/develop/doc/000a02f2c5026891650e7f40351c01) +* +* ## 申请开通 +* 暂只针对如下类目的小程序开放,需要先通过类目审核,再在小程序管理后台,「开发」-「开发管理」-「接口设置」中自助开通该接口权限。 +* 接口权限申请入口将于2022年3月11日开始内测,于3月31日全量上线。并从4月18日开始,在代码审核环节将检测该接口是否已完成开通,如未开通,将在代码提审环节进行拦截。 +* +* ### 国内主体开放类目 +* +* | 一级类目/主体类型 | 二级类目 | 应用场景 | +* | -------------- | -------| -------- | +* | 电商平台 | / | 售卖商品线下发货、收货、送货服务 | +* | 商家自营 | / | 提供售卖商品线下发货、收货、送货服务、线下商超导览、导航服务 | +* | 医疗服务 | 公立医疗机构、三级私立医疗机构、其他私立医疗机构、就医服务、其他医学健康服务、药品(非处方药)销售、非处方药销售平台、医疗器械生产企业、医疗器械自营、医疗器械经营销售平台、互联网医院血液、干细胞服务、临床试验 | 1、实际物品/药品接收服务 2、基于地理位置取号并现场报到、附近医院导航等服务 | +* | 交通服务 | / | 代驾服务、租车网点导航等相关服务 | +* | 生活服务 | / | 上门服务作业等线下场景 | +* | 物流服务 | 收件/派件、查件、邮政、装卸搬运、快递柜、货物运输 | 快递/货物收发服务 | +* | 餐饮服务 | 点餐平台、外卖平台 | 线下送餐服务 | +* | 工具 | 天气、信息查询 | 与地理位置相关的服务,比如潮汐查询、海拔查询、天气查询等 | +* | 金融 | 保险 | 提供线下网点预约、基于地理位置取号并现场报到、附近网点导航等服务 | +* | 旅游 | 景区服务 | 提供景区导航、导览服务 | +* | 政务民生 | / | 提供政务单位相关业务 | +* | 政府主体帐号 | / | 提供政务单位相关业务 | +* +* ### 海外主体开放类目 +* | 一级类目/主体类型 | 二级类目 | 应用场景 | +* | -------------- | -------| -------- | +* | 出行与交通 | / | 代驾服务、租车网点导航等相关服务 | +* | 快递业与邮政 | / | 快递/货物收发服务 | +* | 餐饮 | / | 线下送餐服务 | +* | 电商平台 | / | 售卖商品线下发货、线下收货服务 | +* | 出行与交通 | / | 代驾服务、租车网点导航等相关服务 | +* | 跨境电商 | / | 提供售卖商品线下发货、收货服务、线下商超导览、导航服务 | +* | 本地服务 | 服装/鞋/箱包、玩具、家电/数码/手机、美妆/洗护、珠宝/饰品/眼镜/钟表、运动/户外/乐器、鲜花/园艺/工艺品、家居/家饰/家纺、办公/文具、机械/电子器件、酒、食品、百货/超市/便利店、宠物食品/用品 | 提供售卖商品线下发货、线下收货服务、线下商超导览、导航服务 | +* | 生活服务 | 家政、外送 | 上门服务作业等线下场景 | +* +* **示例代码** +* +* ```js + const _locationChangeFn = function(res) { + console.log('location change', res) + } + wx.onLocationChange(_locationChangeFn) + wx.offLocationChange(_locationChangeFn) +``` */ + onLocationChange( + /** 实时地理位置变化事件的监听函数 */ + listener: OnLocationChangeCallback + ): void + /** [wx.onLocationChangeError(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/location/wx.onLocationChangeError.html) + * + * 需要基础库: `2.19.5` + * + * 在插件中使用:不支持 + * + * 监听持续定位接口返回失败时触发。 */ + onLocationChangeError( + /** 的监听函数 */ + listener: OnLocationChangeErrorCallback + ): void + /** [wx.onMemoryWarning(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/memory/wx.onMemoryWarning.html) + * + * 需要基础库: `2.0.2` + * + * 在插件中使用:不支持 + * + * 监听内存不足告警事件。 + * + * 当 iOS/Android 向小程序进程发出内存警告时,触发该事件。触发该事件不意味小程序被杀,大部分情况下仅仅是告警,开发者可在收到通知后回收一些不必要资源避免进一步加剧内存紧张。 + * + * **示例代码** + * + * ```js + * wx.onMemoryWarning(function () { + * console.log('onMemoryWarningReceive') + * }) + * `` */ + onMemoryWarning( + /** 内存不足告警事件的监听函数 */ + listener: OnMemoryWarningCallback + ): void + /** [wx.onNetworkStatusChange(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/network/wx.onNetworkStatusChange.html) +* +* 需要基础库: `1.1.0` +* +* 在插件中使用:支持 +* +* 监听网络状态变化事件 +* +* **示例代码** +* +* ```js +wx.onNetworkStatusChange(function (res) { + console.log(res.isConnected) + console.log(res.networkType) +}) +``` */ + onNetworkStatusChange( + /** 网络状态变化事件的监听函数 */ + listener: OnNetworkStatusChangeCallback + ): void + /** [wx.onNetworkWeakChange(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/network/wx.onNetworkWeakChange.html) +* +* 需要基础库: `2.21.0` +* +* 在插件中使用:不支持 +* +* 监听弱网状态变化事件 +* +* **示例代码** +* +* ```js +wx.onNetworkWeakChange(function (res) { + console.log(res.weakNet) + console.log(res.networkType) +}) +// 取消监听 +wx.offNetworkWeakChange() +``` */ + onNetworkWeakChange( + /** 弱网状态变化事件的监听函数 */ + listener: OnNetworkWeakChangeCallback + ): void + /** [wx.onPageNotFound(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/base/app/app-event/wx.onPageNotFound.html) + * + * 需要基础库: `2.1.2` + * + * 在插件中使用:不支持 + * + * 监听小程序要打开的页面不存在事件。该事件与 [`App.onPageNotFound`](https://developers.weixin.qq.com/miniprogram/dev/reference/api/App.html#onpagenotfoundobject-object) 的回调时机一致。 + * + * **注意** + * + * - 开发者可以在回调中进行页面重定向,但必须在回调中**同步**处理,异步处理(例如 `setTimeout` 异步执行)无效。 + * - 若开发者没有调用 [wx.onPageNotFound](https://developers.weixin.qq.com/miniprogram/dev/api/base/app/app-event/wx.onPageNotFound.html) 绑定监听,也没有声明 `App.onPageNotFound`,当跳转页面不存在时,将推入微信客户端原生的页面不存在提示页面。 + * - 如果回调中又重定向到另一个不存在的页面,将推入微信客户端原生的页面不存在提示页面,并且不再第二次回调。 */ + onPageNotFound( + /** 小程序要打开的页面不存在事件的监听函数 */ + listener: OnPageNotFoundCallback + ): void + /** [wx.onScreenRecordingStateChanged(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/screen/wx.onScreenRecordingStateChanged.html) + * + * 需要基础库: `2.24.0` + * + * 在插件中使用:不支持 + * + * 监听用户录屏事件。 */ + onScreenRecordingStateChanged( + /** 用户录屏事件的监听函数 */ + listener: OnScreenRecordingStateChangedCallback + ): void + /** [wx.onSocketClose(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/websocket/wx.onSocketClose.html) + * + * 在插件中使用:不支持 + * + * @warning **推荐使用 [SocketTask](https://developers.weixin.qq.com/miniprogram/dev/api/network/websocket/SocketTask.html) 的方式去管理 webSocket 链接,每一条链路的生命周期都更加可控,同时存在多个 webSocket 的链接的情况下使用 wx 前缀的方法可能会带来一些和预期不一致的情况。** + * + * 监听 WebSocket 连接关闭事件。 */ + onSocketClose( + /** WebSocket 连接关闭事件的监听函数 */ + listener: OnSocketCloseCallback + ): void + /** [wx.onSocketError(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/websocket/wx.onSocketError.html) + * + * 在插件中使用:不支持 + * + * @warning **推荐使用 [SocketTask](https://developers.weixin.qq.com/miniprogram/dev/api/network/websocket/SocketTask.html) 的方式去管理 webSocket 链接,每一条链路的生命周期都更加可控,同时存在多个 webSocket 的链接的情况下使用 wx 前缀的方法可能会带来一些和预期不一致的情况。** + * + * 监听 WebSocket 错误事件。 */ + onSocketError( + /** WebSocket 错误事件的监听函数 */ + listener: OnSocketErrorCallback + ): void + /** [wx.onSocketMessage(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/websocket/wx.onSocketMessage.html) + * + * 在插件中使用:不支持 + * + * @warning **推荐使用 [SocketTask](https://developers.weixin.qq.com/miniprogram/dev/api/network/websocket/SocketTask.html) 的方式去管理 webSocket 链接,每一条链路的生命周期都更加可控,同时存在多个 webSocket 的链接的情况下使用 wx 前缀的方法可能会带来一些和预期不一致的情况。** + * + * 监听 WebSocket 接受到服务器的消息事件。 */ + onSocketMessage( + /** WebSocket 接受到服务器的消息事件的监听函数 */ + listener: OnSocketMessageCallback + ): void + /** [wx.onSocketOpen(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/websocket/wx.onSocketOpen.html) + * + * 在插件中使用:不支持 + * + * @warning **推荐使用 [SocketTask](https://developers.weixin.qq.com/miniprogram/dev/api/network/websocket/SocketTask.html) 的方式去管理 webSocket 链接,每一条链路的生命周期都更加可控,同时存在多个 webSocket 的链接的情况下使用 wx 前缀的方法可能会带来一些和预期不一致的情况。** + * + * 监听 WebSocket 连接打开事件。 */ + onSocketOpen( + /** WebSocket 连接打开事件的监听函数 */ + listener: OnSocketOpenCallback + ): void + /** [wx.onThemeChange(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/base/app/app-event/wx.onThemeChange.html) + * + * 需要基础库: `2.11.0` + * + * 在插件中使用:不支持 + * + * 监听系统主题改变事件。该事件与 [`App.onThemeChange`](https://developers.weixin.qq.com/miniprogram/dev/reference/api/App.html#onThemeChange-Object-object) 的回调时机一致。 + * + * **注意** + * + * - 只有在全局配置"darkmode": true时才会触发此事件。 */ + onThemeChange( + /** 系统主题改变事件的监听函数 */ + listener: OnThemeChangeCallback + ): void + /** [wx.onUnhandledRejection(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/base/app/app-event/wx.onUnhandledRejection.html) + * + * 需要基础库: `2.10.0` + * + * 在插件中使用:不支持 + * + * 监听未处理的 Promise 拒绝事件。该事件与 [`App.onUnhandledRejection`](https://developers.weixin.qq.com/miniprogram/dev/reference/api/App.html#onUnhandledRejection-Object-object) 的回调时机与参数一致。 + * + * **注意** + * + * - 所有的 unhandledRejection 都可以被这一监听捕获,但只有 Error 类型的才会在小程序后台触发报警。 */ + onUnhandledRejection( + /** 未处理的 Promise 拒绝事件的监听函数 */ + listener: OnUnhandledRejectionCallback + ): void + /** [wx.onUserCaptureScreen(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/screen/wx.onUserCaptureScreen.html) +* +* 需要基础库: `1.4.0` +* +* 在插件中使用:不支持 +* +* 监听用户主动截屏事件。用户使用系统截屏按键截屏时触发,只能注册一个监听 +* +* **示例代码** +* +* ```js +wx.onUserCaptureScreen(function (res) { + console.log('用户截屏了') +}) +``` */ + onUserCaptureScreen( + /** 用户主动截屏事件的监听函数 */ + listener: OnUserCaptureScreenCallback + ): void + /** [wx.onVoIPChatInterrupted(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/voip/wx.onVoIPChatInterrupted.html) + * + * 需要基础库: `2.7.0` + * + * 在插件中使用:需要基础库 `2.9.1` + * + * 监听被动断开实时语音通话事件。包括小游戏切入后端时断开 */ + onVoIPChatInterrupted( + /** 被动断开实时语音通话事件的监听函数 */ + listener: OnVoIPChatInterruptedCallback + ): void + /** [wx.onVoIPChatMembersChanged(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/voip/wx.onVoIPChatMembersChanged.html) + * + * 需要基础库: `2.7.0` + * + * 在插件中使用:需要基础库 `2.9.1` + * + * 监听实时语音通话成员在线状态变化事件。有成员加入/退出通话时触发回调 */ + onVoIPChatMembersChanged( + /** 实时语音通话成员在线状态变化事件的监听函数 */ + listener: OnVoIPChatMembersChangedCallback + ): void + /** [wx.onVoIPChatSpeakersChanged(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/voip/wx.onVoIPChatSpeakersChanged.html) + * + * 需要基础库: `2.7.0` + * + * 在插件中使用:需要基础库 `2.9.1` + * + * 监听实时语音通话成员通话状态变化事件。有成员开始/停止说话时触发回调 */ + onVoIPChatSpeakersChanged( + /** 实时语音通话成员通话状态变化事件的监听函数 */ + listener: OnVoIPChatSpeakersChangedCallback + ): void + /** [wx.onVoIPChatStateChanged(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/voip/wx.onVoIPChatStateChanged.html) + * + * 需要基础库: `2.16.0` + * + * 在插件中使用:不支持 + * + * 监听房间状态变化事件。 */ + onVoIPChatStateChanged( + /** 房间状态变化事件的监听函数 */ + listener: OnVoIPChatStateChangedCallback + ): void + /** [wx.onVoIPVideoMembersChanged(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/voip/wx.onVoIPVideoMembersChanged.html) + * + * 需要基础库: `2.11.0` + * + * 在插件中使用:不支持 + * + * 监听实时语音通话成员视频状态变化事件。 */ + onVoIPVideoMembersChanged( + /** 实时语音通话成员视频状态变化事件的监听函数 */ + listener: OnVoIPVideoMembersChangedCallback + ): void + /** [wx.onWifiConnected(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/wifi/wx.onWifiConnected.html) + * + * 需要基础库: `1.6.0` + * + * 在插件中使用:需要基础库 `2.9.1` + * + * 监听连接上 Wi-Fi 的事件 */ + onWifiConnected( + /** 连接上 Wi-Fi 的事件的监听函数 */ + listener: OnWifiConnectedCallback + ): void + /** [wx.onWifiConnectedWithPartialInfo(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/wifi/wx.onWifiConnectedWithPartialInfo.html) + * + * 需要基础库: `2.22.0` + * + * 在插件中使用:需要基础库 `2.22.1` + * + * 监听连接上 Wi-Fi 的事件 */ + onWifiConnectedWithPartialInfo( + /** 连接上 Wi-Fi 的事件的监听函数 */ + listener: OnWifiConnectedWithPartialInfoCallback + ): void + /** [wx.onWindowResize(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/window/wx.onWindowResize.html) + * + * 需要基础库: `2.3.0` + * + * 在插件中使用:不支持 + * + * 监听窗口尺寸变化事件 */ + onWindowResize( + /** 窗口尺寸变化事件的监听函数 */ + listener: OnWindowResizeCallback + ): void + /** [wx.openAppAuthorizeSetting(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/base/system/wx.openAppAuthorizeSetting.html) +* +* 需要基础库: `2.20.1` +* +* 在插件中使用:需要基础库 `2.21.3` +* +* 跳转系统微信授权管理页 +* +* **示例代码** +* +* ```js +wx.openAppAuthorizeSetting({ + success (res) { + console.log(res) + } +}) +``` */ + openAppAuthorizeSetting< + T extends OpenAppAuthorizeSettingOption = OpenAppAuthorizeSettingOption + >( + option?: T + ): PromisifySuccessResult<T, OpenAppAuthorizeSettingOption> + /** [wx.openBluetoothAdapter(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth/wx.openBluetoothAdapter.html) +* +* 需要基础库: `1.1.0` +* +* 在插件中使用:需要基础库 `1.9.6` +* +* 初始化蓝牙模块。iOS 上开启主机/从机(外围设备)模式时需分别调用一次,并指定对应的 `mode`。 +* +* **object.fail 回调函数返回的 state 参数(仅 iOS)** +* +* | 状态码 | 说明 | +* | ------ | ------ | +* | 0 | 未知 | +* | 1 | 重置中 | +* | 2 | 不支持 | +* | 3 | 未授权 | +* | 4 | 未开启 | +* +* **注意** +* +* - 其他蓝牙相关 API 必须在 [wx.openBluetoothAdapter](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth/wx.openBluetoothAdapter.html) 调用之后使用。否则 API 会返回错误(errCode=10000)。 +* - 在用户蓝牙开关未开启或者手机不支持蓝牙功能的情况下,调用 [wx.openBluetoothAdapter](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth/wx.openBluetoothAdapter.html) 会返回错误(errCode=10001),表示手机蓝牙功能不可用。此时小程序蓝牙模块已经初始化完成,可通过 [wx.onBluetoothAdapterStateChange](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth/wx.onBluetoothAdapterStateChange.html) 监听手机蓝牙状态的改变,也可以调用蓝牙模块的所有API。 +* +* **示例代码** +* +* [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/pQU51zmz7a3K) +* ```js +wx.openBluetoothAdapter({ + success (res) { + console.log(res) + } +}) +``` */ + openBluetoothAdapter< + T extends OpenBluetoothAdapterOption = OpenBluetoothAdapterOption + >( + option?: T + ): PromisifySuccessResult<T, OpenBluetoothAdapterOption> + /** [wx.openCard(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/card/wx.openCard.html) +* +* 需要基础库: `1.1.0` +* +* 在插件中使用:不支持 +* +* 查看微信卡包中的卡券。只有通过 [认证](https://developers.weixin.qq.com/miniprogram/product/renzheng.html) 的小程序或文化互动类目的小游戏才能使用。更多文档请参考 [微信卡券接口文档](https://mp.weixin.qq.com/cgi-bin/announce?action=getannouncement&key=1490190158&version=1&lang=zh_CN&platform=2)。 +* +* **示例代码** +* +* ```js +wx.openCard({ + cardList: [{ + cardId: '', + code: '' + }, { + cardId: '', + code: '' + }], + success (res) { } +}) +``` */ + openCard<T extends OpenCardOption = OpenCardOption>( + option: T + ): PromisifySuccessResult<T, OpenCardOption> + /** [wx.openChannelsActivity(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/channels/wx.openChannelsActivity.html) + * + * 需要基础库: `2.19.2` + * + * 在插件中使用:不支持 + * + * 打开视频号视频 */ + openChannelsActivity(option: OpenChannelsActivityOption): void + /** [wx.openChannelsEvent(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/channels/wx.openChannelsEvent.html) + * + * 需要基础库: `2.21.0` + * + * 在插件中使用:不支持 + * + * 打开视频号活动页 */ + openChannelsEvent(option: OpenChannelsEventOption): void + /** [wx.openChannelsLive(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/channels/wx.openChannelsLive.html) + * + * 需要基础库: `2.15.0` + * + * 在插件中使用:不支持 + * + * 打开视频号直播 */ + openChannelsLive(option: OpenChannelsLiveOption): void + /** [wx.openChannelsUserProfile(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/channels/wx.openChannelsUserProfile.html) + * + * 需要基础库: `2.21.2` + * + * 在插件中使用:不支持 + * + * 打开视频号主页 */ + openChannelsUserProfile(option: OpenChannelsUserProfileOption): void + /** [wx.openCustomerServiceChat(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/service-chat/wx.openCustomerServiceChat.html) +* +* 需要基础库: `2.19.0` +* +* 在插件中使用:不支持 +* +* 打开微信客服,页面产生点击事件(例如 button 上 bindtap 的回调中)后才可调用。了解更多信息,可以参考[微信客服介绍](https://work.weixin.qq.com/kf/)。 +* +* **示例代码** +* +* ```js +wx.openCustomerServiceChat({ + extInfo: {url: ''}, + corpId: '', + success(res) {} +}) +``` */ + openCustomerServiceChat(option: OpenCustomerServiceChatOption): void + /** [wx.openDocument(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/wx.openDocument.html) + * + * 在插件中使用:需要基础库 `2.15.0` + * + * 新开页面打开文档。微信客户端 `7.0.12` 版本前默认显示右上角菜单按钮,之后的版本默认不显示,需主动传入 `showMenu`。 */ + openDocument<T extends OpenDocumentOption = OpenDocumentOption>( + option: T + ): PromisifySuccessResult<T, OpenDocumentOption> + /** [wx.openEmbeddedMiniProgram(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/navigate/wx.openEmbeddedMiniProgram.html) + * + * 需要基础库: `2.20.1` + * + * 在插件中使用:不支持 + * + * 打开半屏小程序。接入指引请参考 [半屏小程序能力](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/openEmbeddedMiniProgram.html)。 */ + openEmbeddedMiniProgram< + T extends OpenEmbeddedMiniProgramOption = OpenEmbeddedMiniProgramOption + >( + option: T + ): PromisifySuccessResult<T, OpenEmbeddedMiniProgramOption> + /** [wx.openLocation(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/location/wx.openLocation.html) +* +* 在插件中使用:需要基础库 `1.9.6` +* +* 使用微信内置地图查看位置 +* +* **示例代码** +* +* ```js + wx.getLocation({ + type: 'gcj02', //返回可以用于wx.openLocation的经纬度 + success (res) { + const latitude = res.latitude + const longitude = res.longitude + wx.openLocation({ + latitude, + longitude, + scale: 18 + }) + } +}) + ``` */ + openLocation<T extends OpenLocationOption = OpenLocationOption>( + option: T + ): PromisifySuccessResult<T, OpenLocationOption> + /** [wx.openSetting(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/setting/wx.openSetting.html) +* +* 需要基础库: `1.1.0` +* +* 在插件中使用:需要基础库 `2.10.3` +* +* 调起客户端小程序设置界面,返回用户设置的操作结果。**设置界面只会出现小程序已经向用户请求过的[权限](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/authorize.html)**。 +* +* **** +* +* - 注意:[2.3.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 版本开始,用户发生点击行为后,才可以跳转打开设置页,管理授权信息。[详情](https://developers.weixin.qq.com/community/develop/doc/000cea2305cc5047af5733de751008) +* +* **示例代码** +* +* ```js +wx.openSetting({ + success (res) { + console.log(res.authSetting) + // res.authSetting = { + // "scope.userInfo": true, + // "scope.userLocation": true + // } + } +}) +``` */ + openSetting<T extends OpenSettingOption = OpenSettingOption>( + option?: T + ): PromisifySuccessResult<T, OpenSettingOption> + /** [wx.openSystemBluetoothSetting(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/base/system/wx.openSystemBluetoothSetting.html) +* +* 需要基础库: `2.20.1` +* +* 在插件中使用:需要基础库 `2.21.3` +* +* 跳转系统蓝牙设置页。仅支持安卓。 +* +* **示例代码** +* +* ```js +wx.openSystemBluetoothSetting({ + success (res) { + console.log(res) + } +}) +``` */ + openSystemBluetoothSetting< + T extends OpenSystemBluetoothSettingOption = OpenSystemBluetoothSettingOption + >( + option?: T + ): PromisifySuccessResult<T, OpenSystemBluetoothSettingOption> + /** [wx.openVideoEditor(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/video/wx.openVideoEditor.html) + * + * 需要基础库: `2.12.0` + * + * 在插件中使用:需要基础库 `2.15.0` + * + * 打开视频编辑器 */ + openVideoEditor(option: OpenVideoEditorOption): void + /** [wx.pageScrollTo(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/scroll/wx.pageScrollTo.html) +* +* 需要基础库: `1.4.0` +* +* 在插件中使用:需要基础库 `2.1.0` +* +* 在插件中使用时,只能在当前插件的页面中调用 +* +* 将页面滚动到目标位置,支持选择器和滚动距离两种方式定位 +* +* **selector 语法** +* +* selector类似于 CSS 的选择器,但仅支持下列语法。 +* +* + ID选择器:#the-id +* + class选择器(可以连续指定多个):.a-class.another-class +* + 子元素选择器:.the-parent > .the-child +* + 后代选择器:.the-ancestor .the-descendant +* + 跨自定义组件的后代选择器:.the-ancestor >>> .the-descendant +* + 多选择器的并集:#a-node, .some-other-nodes +* +* **示例代码** +* +* ```js +wx.pageScrollTo({ + scrollTop: 0, + duration: 300 +}) +``` */ + pageScrollTo<T extends PageScrollToOption = PageScrollToOption>( + option: T + ): PromisifySuccessResult<T, PageScrollToOption> + /** [wx.pauseBackgroundAudio(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/wx.pauseBackgroundAudio.html) +* +* 在插件中使用:需要基础库 `1.9.6` +* @deprecated 基础库版本 [1.2.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [wx.getBackgroundAudioManager](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/wx.getBackgroundAudioManager.html) 替换 +* +* 暂停播放音乐。 +* +* **示例代码** +* +* ```js +wx.pauseBackgroundAudio() +``` */ + pauseBackgroundAudio< + T extends PauseBackgroundAudioOption = PauseBackgroundAudioOption + >( + option?: T + ): PromisifySuccessResult<T, PauseBackgroundAudioOption> + /** [wx.pauseVoice(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/wx.pauseVoice.html) +* +* 在插件中使用:需要基础库 `1.9.6` +* @deprecated 基础库版本 [1.6.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [wx.createInnerAudioContext](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/wx.createInnerAudioContext.html) 替换 +* +* 暂停正在播放的语音。再次调用 [wx.playVoice](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/wx.playVoice.html) 播放同一个文件时,会从暂停处开始播放。如果想从头开始播放,需要先调用 [wx.stopVoice](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/wx.stopVoice.html)。 +* +* **示例代码** +* +* ```js +wx.startRecord({ + success (res) { + const tempFilePath = res.tempFilePath + wx.playVoice({ + filePath: tempFilePath + }) + + setTimeout(() => { wx.pauseVoice() }, 5000) + } +}) +``` */ + pauseVoice<T extends PauseVoiceOption = PauseVoiceOption>( + option?: T + ): PromisifySuccessResult<T, PauseVoiceOption> + /** [wx.playBackgroundAudio(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/wx.playBackgroundAudio.html) +* +* 在插件中使用:需要基础库 `1.9.6` +* @deprecated 基础库版本 [1.2.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [wx.getBackgroundAudioManager](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/wx.getBackgroundAudioManager.html) 替换 +* +* 使用后台播放器播放音乐。对于微信客户端来说,只能同时有一个后台音乐在播放。当用户离开小程序后,音乐将暂停播放;当用户在其他小程序占用了音乐播放器,原有小程序内的音乐将停止播放。 +* +* **示例代码** +* +* ```js +wx.playBackgroundAudio({ + dataUrl: '', + title: '', + coverImgUrl: '' +}) +``` */ + playBackgroundAudio< + T extends PlayBackgroundAudioOption = PlayBackgroundAudioOption + >( + option: T + ): PromisifySuccessResult<T, PlayBackgroundAudioOption> + /** [wx.playVoice(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/wx.playVoice.html) +* +* 在插件中使用:需要基础库 `1.9.6` +* @deprecated 基础库版本 [1.6.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [wx.createInnerAudioContext](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/wx.createInnerAudioContext.html) 替换 +* +* 开始播放语音。同时只允许一个语音文件正在播放,如果前一个语音文件还没播放完,将中断前一个语音播放。 +* +* **示例代码** +* +* ```js +wx.startRecord({ + success (res) { + const tempFilePath = res.tempFilePath + wx.playVoice({ + filePath: tempFilePath, + complete () { } + }) + } +}) +``` */ + playVoice<T extends PlayVoiceOption = PlayVoiceOption>( + option: T + ): PromisifySuccessResult<T, PlayVoiceOption> + /** [wx.pluginLogin(Object args)](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/login/wx.pluginLogin.html) + * + * 需要基础库: `2.20.1` + * + * 在插件中使用:需要基础库 `2.20.1` + * + * __该接口仅在小程序插件中可调用__,调用接口获得插件用户标志凭证(code)。插件可以此凭证换取用于识别用户的标识 openpid。用户不同、宿主小程序不同或插件不同的情况下,该标识均不相同,即当且仅当同一个用户在同一个宿主小程序中使用同一个插件时,openpid 才会相同。 */ + pluginLogin(args?: PluginLoginOption): void + /** [wx.preloadAssets(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/base/performance/wx.preloadAssets.html) +* +* 需要基础库: `2.22.1` +* +* 在插件中使用:不支持 +* +* 为视图层预加载媒体资源文件, 目前支持:font,image +* +* **示例代码** +* +* ```js +wx.preloadAssets({ + data: [ + { + type: 'image', + src: imgUrl, + }, + ], + success(resp) { + console.log('preloadAssets success', resp) + }, + fail(err) { + console.log('preloadAssets fail', err) + }, +}) +``` +* +* **** +* +* - 开发过程中,可在开发者工具network面板查看预加载情况。 */ + preloadAssets(option: PreloadAssetsOption): void + /** [wx.preloadSkylineView(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/base/performance/wx.preloadSkylineView.html) + * + * 需要基础库: `2.24.7` + * + * 在插件中使用:需要基础库 `2.24.7` + * + * 预加载下个页面所需要的 [Skyline](https://developers.weixin.qq.com/miniprogram/dev/framework/runtime/skyline/introduction.html) 运行环境。 */ + preloadSkylineView(option?: PreloadSkylineViewOption): void + /** [wx.preloadWebview(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/base/performance/wx.preloadWebview.html) + * + * 需要基础库: `2.15.0` + * + * 在插件中使用:需要基础库 `2.15.0` + * + * 预加载下个页面的 WebView。参见[预加载下个页面的时机](https://developers.weixin.qq.com/miniprogram/dev/framework/performance/tips/runtime_nav.html#_2-4-控制预加载下个页面的时机) */ + preloadWebview(option?: PreloadWebviewOption): void + /** [wx.previewImage(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/image/wx.previewImage.html) +* +* 在插件中使用:需要基础库 `1.9.6` +* +* 在新页面中全屏预览图片。预览的过程中用户可以进行保存图片、发送给朋友等操作。 +* +* **支持长按识别的码** +* +* | 类型 | 说明 | 最低版本 | +* |------|------| -------| +* | 小程序码 | | +* | 微信个人码 | 不支持小游戏 | [2.18.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) | +* | 企业微信个人码 | 不支持小游戏 | [2.18.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) | +* | 普通群码 | 指仅包含微信用户的群,不支持小游戏 | [2.18.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) | +* | 互通群码 | 指既有微信用户也有企业微信用户的群,不支持小游戏 | [2.18.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) | +* | 公众号二维码 | 不支持小游戏 | [2.18.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) | +* +* **示例代码** +* +* ```js +wx.previewImage({ + current: '', // 当前显示图片的http链接 + urls: [] // 需要预览的图片http链接列表 +}) +``` */ + previewImage<T extends PreviewImageOption = PreviewImageOption>( + option: T + ): PromisifySuccessResult<T, PreviewImageOption> + /** [wx.previewMedia(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/image/wx.previewMedia.html) + * + * 需要基础库: `2.12.0` + * + * 在插件中使用:需要基础库 `2.15.0` + * + * 预览图片和视频。 + * + * **支持长按识别的码** + * + * | 类型 | 说明 | 最低版本 | + * |------|------| -------| + * | 小程序码 | | + * | 微信个人码 | 不支持小游戏 | [2.18.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) | + * | 企业微信个人码 | 不支持小游戏 | [2.18.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) | + * | 普通群码 | 指仅包含微信用户的群,不支持小游戏 | [2.18.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) | + * | 互通群码 | 指既有微信用户也有企业微信用户的群,不支持小游戏 | [2.18.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) | + * | 公众号二维码 | 不支持小游戏 | [2.18.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) | */ + previewMedia<T extends PreviewMediaOption = PreviewMediaOption>( + option: T + ): PromisifySuccessResult<T, PreviewMediaOption> + /** [wx.reLaunch(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/route/wx.reLaunch.html) +* +* 需要基础库: `1.1.0` +* +* 在插件中使用:需要基础库 `2.3.1` +* +* 在插件中使用时,只能在当前插件的页面中调用 +* +* 关闭所有页面,打开到应用内的某个页面 +* +* **示例代码** +* +* ```js +wx.reLaunch({ + url: 'test?id=1' +}) +``` +* +* ```html +* // test +* Page({ +* onLoad (option) { +* console.log(option.query) +* } +* }) +* ``` */ + reLaunch<T extends ReLaunchOption = ReLaunchOption>( + option: T + ): PromisifySuccessResult<T, ReLaunchOption> + /** [wx.readBLECharacteristicValue(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.readBLECharacteristicValue.html) +* +* 需要基础库: `1.1.0` +* +* 在插件中使用:需要基础库 `1.9.6` +* +* 读取蓝牙低功耗设备特征值的二进制数据。注意:必须设备的特征支持 read 才可以成功调用。 +* +* **注意** +* +* - 并行调用多次会存在读失败的可能性。 +* - 接口读取到的信息需要在 [wx.onBLECharacteristicValueChange](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.onBLECharacteristicValueChange.html) 方法注册的回调中获取。 +* +* **示例代码** +* +* [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/pQU51zmz7a3K) +* ```js +// 必须在这里的回调才能获取 +wx.onBLECharacteristicValueChange(function(characteristic) { + console.log('characteristic value comed:', characteristic) +}) + +wx.readBLECharacteristicValue({ + // 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接 + deviceId, + // 这里的 serviceId 需要在 getBLEDeviceServices 接口中获取 + serviceId, + // 这里的 characteristicId 需要在 getBLEDeviceCharacteristics 接口中获取 + characteristicId, + success (res) { + console.log('readBLECharacteristicValue:', res.errCode) + } +}) +``` */ + readBLECharacteristicValue< + T extends ReadBLECharacteristicValueOption = ReadBLECharacteristicValueOption + >( + option: T + ): PromisifySuccessResult<T, ReadBLECharacteristicValueOption> + /** [wx.redirectTo(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/route/wx.redirectTo.html) +* +* 在插件中使用:需要基础库 `2.2.2` +* +* 在插件中使用时,只能在当前插件的页面中调用 +* +* 关闭当前页面,跳转到应用内的某个页面。但是不允许跳转到 tabbar 页面。 +* +* **示例代码** +* +* ```js +wx.redirectTo({ + url: 'test?id=1' +}) +``` */ + redirectTo<T extends RedirectToOption = RedirectToOption>( + option: T + ): PromisifySuccessResult<T, RedirectToOption> + /** [wx.removeSavedFile(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/wx.removeSavedFile.html) +* +* 在插件中使用:不支持 +* +* @warning **该接口已停止维护,推荐使用 [FileSystemManager.removeSavedFile](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.removeSavedFile.html)** +* +* 删除本地缓存文件。 +* +* **示例代码** +* +* ```js +wx.getSavedFileList({ + success (res) { + if (res.fileList.length > 0){ + wx.removeSavedFile({ + filePath: res.fileList[0].filePath, + complete (res) { + console.log(res) + } + }) + } + } +}) +``` */ + removeSavedFile< + T extends WxRemoveSavedFileOption = WxRemoveSavedFileOption + >( + option: T + ): PromisifySuccessResult<T, WxRemoveSavedFileOption> + /** [wx.removeStorage(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/storage/wx.removeStorage.html) +* +* 在插件中使用:需要基础库 `1.9.6` +* +* 从本地缓存中移除指定 key。 +* +* **示例代码** +* +* ```js +wx.removeStorage({ + key: 'key', + success (res) { + console.log(res) + } +}) +``` +* +* ```js +try { + wx.removeStorageSync('key') +} catch (e) { + // Do something when catch error +} +``` */ + removeStorage<T extends RemoveStorageOption = RemoveStorageOption>( + option: T + ): PromisifySuccessResult<T, RemoveStorageOption> + /** [wx.removeStorageSync(string key)](https://developers.weixin.qq.com/miniprogram/dev/api/storage/wx.removeStorageSync.html) +* +* 在插件中使用:需要基础库 `1.9.6` +* +* [wx.removeStorage](https://developers.weixin.qq.com/miniprogram/dev/api/storage/wx.removeStorage.html) 的同步版本 +* +* **示例代码** +* +* ```js +wx.removeStorage({ + key: 'key', + success (res) { + console.log(res) + } +}) +``` +* +* ```js +try { + wx.removeStorageSync('key') +} catch (e) { + // Do something when catch error +} +``` */ + removeStorageSync( + /** 本地缓存中指定的 key */ + key: string + ): void + /** [wx.removeTabBarBadge(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/tab-bar/wx.removeTabBarBadge.html) + * + * 需要基础库: `1.9.0` + * + * 在插件中使用:不支持 + * + * 移除 tabBar 某一项右上角的文本 */ + removeTabBarBadge< + T extends RemoveTabBarBadgeOption = RemoveTabBarBadgeOption + >( + option: T + ): PromisifySuccessResult<T, RemoveTabBarBadgeOption> + /** [wx.reportAnalytics(string eventName, Object data)](https://developers.weixin.qq.com/miniprogram/dev/api/data-analysis/wx.reportAnalytics.html) +* +* 在插件中使用:需要基础库 `1.9.6` +* +* 在插件中使用时,可以被正常调用,但目前不会进行统计展示 +* +* 自定义分析数据上报接口。使用前,需要在小程序管理后台自定义分析中新建事件,配置好事件名与字段。 +* +* **示例代码** +* +* ```js +wx.reportAnalytics('purchase', { + price: 120, + color: 'red' +}) +``` */ + reportAnalytics( + /** 事件名 */ + eventName: string, + /** 上报的自定义数据,key 为配置中的字段名,value 为上报的数据。 */ + data: IAnyObject + ): void + /** [wx.reportEvent(string eventId, object data)](https://developers.weixin.qq.com/miniprogram/dev/api/data-analysis/wx.reportEvent.html) + * + * 需要基础库: `2.14.4` + * + * 在插件中使用:不支持 + * + * 事件上报 */ + reportEvent( + /** 在 mp 实验系统中设置的事件英文名 */ + eventId: string, + /** 可被 JSON.stringify 的对象,将一起上报至系统 */ + data?: IAnyObject + ): void + /** [wx.reportMonitor(string name, number value)](https://developers.weixin.qq.com/miniprogram/dev/api/data-analysis/wx.reportMonitor.html) +* +* 需要基础库: `2.0.1` +* +* 在插件中使用:不支持 +* +* 自定义业务数据监控上报接口。 +* +* **使用说明** +* +* 使用前,需要在「小程序管理后台-运维中心-性能监控-业务数据监控」中新建监控事件,配置监控描述与告警类型。每一个监控事件对应唯一的监控ID,开发者最多可以创建128个监控事件。 +* +* **示例代码** +* +* ```js +wx.reportMonitor('1', 1) +``` */ + reportMonitor( + /** 监控ID,在「小程序管理后台」新建数据指标后获得 */ + name: string, + /** 上报数值,经处理后会在「小程序管理后台」上展示每分钟的上报总量 */ + value: number + ): void + /** [wx.reportPerformance(Number id, Number value, String|Array dimensions)](https://developers.weixin.qq.com/miniprogram/dev/api/base/performance/wx.reportPerformance.html) +* +* 需要基础库: `2.9.2` +* +* 在插件中使用:需要基础库 `2.9.3` +* +* 小程序测速上报。使用前,需要在小程序管理后台配置。 +* +* **示例代码** +* +* ```js +wx.reportPerformance(1101, 680) +wx.reportPerformance(1101, 680, 'custom') +``` */ + reportPerformance( + /** 指标 id */ + id: number, + /** 需要上报的数值 */ + value: number, + /** 自定义维度 (选填) */ + dimensions?: string | any[] + ): void + /** [wx.requestOrderPayment(Object args)](https://developers.weixin.qq.com/miniprogram/dev/api/payment/wx.requestOrderPayment.html) + * + * 需要基础库: `2.16.0` + * + * 在插件中使用:不支持 + * + * 仅接入了[自定义版交易组件](https://developers.weixin.qq.com/miniprogram/dev/framework/ministore/minishopopencomponent2/Introduction2)的小程序需要使用,普通小程序可直接使用 [`wx.requestPayment`](https://developers.weixin.qq.com/miniprogram/dev/api/payment/wx.requestPayment.html)。 + * + * **前置检查** + * + * 接入自定义版交易组件之后,若要发起微信支付,请先查询[需要校验的场景](https://developers.weixin.qq.com/miniprogram/dev/framework/ministore/minishopopencomponent2/API/order/check_scene)。 + * 在需要校验的场景中,发起微信支付时,必须使用该接口,需要按照要求传入相关的[订单信息](https://developers.weixin.qq.com/miniprogram/dev/framework/ministore/minishopopencomponent2/API/order/add_order)进行校验,校验通过后用户才可以完成当前订单的支付,非需要校验的场景则可以按照商家要求自行选择传入订单信息或不传入。 */ + requestOrderPayment< + T extends RequestOrderPaymentOption = RequestOrderPaymentOption + >( + args: T + ): PromisifySuccessResult<T, RequestOrderPaymentOption> + /** [wx.requestPayment(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/payment/wx.requestPayment.html) +* +* 在插件中使用:不支持 +* +* 发起微信支付。调用前需在[小程序微信公众平台](https://mp.weixin.qq.com/) -功能-微信支付入口申请接入微信支付。了解更多信息,可以参考 [微信支付开发文档](https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/pages/api.shtml): +* - [开发指引](https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/pay/transactions/chapter2_3.shtml) +* - [下单接口](https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/pay/transactions/chapter3_2.shtml) +* - [支付接口](https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/pay/transactions/chapter3_12.shtml) +* - 旧版本 (v2) +* - [开发指引](https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_3&index=1) +* - [支付接口](https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_7&index=3) +* +* 如果使用[云开发](https://developers.weixin.qq.com/miniprogram/dev/wxcloud/basis/getting-started.html),则 `wx.requestPayment` 所需参数可以通过云开发微信支付统一下单接口免鉴权获取、并可免证书、免签名的安全调用微信支付服务端接口、及接收异步支付结果回调,详见[云开发微信支付](https://developers.weixin.qq.com/miniprogram/dev/wxcloud/guide/wechatpay/wechatpay.html)。 +* +* **示例代码** +* +* ```js +wx.requestPayment({ + timeStamp: '', + nonceStr: '', + package: '', + signType: 'MD5', + paySign: '', + success (res) { }, + fail (res) { } +}) +``` +* +* 注:如果服务端有使用云开发,可以通过云开发微信支付[统一下单](https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-sdk-api/open/pay/CloudPay.unifiedOrder.html)接口免鉴权获取以上所需所有参数,示例: +* +* ```js +// 云函数代码 +const cloud = require('wx-server-sdk') +cloud.init({ + env: cloud.DYNAMIC_CURRENT_ENV +}) + +exports.main = async (event, context) => { + const res = await cloud.cloudPay.unifiedOrder({ + "body" : "小秋TIT店-超市", + "outTradeNo" : "1217752501201407033233368018", + "spbillCreateIp" : "127.0.0.1", + "subMchId" : "1900009231", + "totalFee" : 1, + "envId": "test-f0b102", + "functionName": "pay_cb" + }) + return res +} + +// 小程序代码 +wx.cloud.callFunction({ + name: '函数名', + data: { + // ... + }, + success: res => { + const payment = res.result.payment + wx.requestPayment({ + ...payment, + success (res) { + console.log('pay success', res) + }, + fail (err) { + console.error('pay fail', err) + } + }) + }, + fail: console.error, +}) +``` */ + requestPayment<T extends RequestPaymentOption = RequestPaymentOption>( + option: T + ): PromisifySuccessResult<T, RequestPaymentOption> + /** [wx.requestPluginPayment(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/payment/wx.requestPluginPayment.html) +* +* 需要基础库: `2.22.1` +* +* 在插件中使用:需要基础库 `2.22.1` +* +* 插件中发起支付。 +* +* **Tip** +* +* 1. `tip`: 小程序与插件绑定在同一个open平台账号上且小程序与插件均为open账号的同主体/关联主体时,调用此接口将直接拉起支付收银台。 +* 1. `tip`: 这个接口本身可以在开发者工具中使用,但功能页的跳转目前不支持在开发者工具中调试,请在真机上测试。 +* 1. `tip`: 跳转支付功能页需要在 `app.json` 中配置 `"functionalPages": true` +* +* **示例代码** +* +* 具体用法及参数说明可参考 [插件支付文档](https://developers.weixin.qq.com/miniprogram/dev/framework/plugin/functional-pages/request-payment.html) +* ```js +wx.requestPluginPayment({ + version: 'release', + fee: 1, + paymentArgs: {}, + currencyType: 'CNY', + success (res) { }, + fail (res) { } +}) +``` */ + requestPluginPayment(option: RequestPluginPaymentOption): void + /** [wx.requestSubscribeDeviceMessage(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/subscribe-message/wx.requestSubscribeDeviceMessage.html) +* +* 需要基础库: `2.20.0` +* +* 在插件中使用:不支持 +* +* 订阅设备消息接口,调用后弹出授权框,用户同意后会允许开发者给用户发送订阅模版消息。当用户点击“允许”按钮时,模板消息会被添加到用户的小程序设置页,通过 wx.getSetting 接口可获取用户对相关模板消息的订阅状态。 +* +* **错误码** +* +* | errCode | errMsg | 说明 | +* | ------- | ------------------------------------------------------ | -------------------------------------------------------------- | +* | 10001 | TmplIds can't be empty | tmplIds 为空 | +* | 10004 | Invalid template id | tmplId 参数类型错误 | +* | 20001 | No template data return, verify the template id exist | tmplId 为空 | +* | 20003 | Templates count out of max bounds | tmplId 数量超过上限 | +* | 19720726 | check sn_ticket fail | snTicket 不合法 | +* | 19720727 | sn_ticket expire | snTicket 过期 | +* | 19720728 | err_not_found_tid | tmplId 不存在 | +* | 19720736 | template_id do not match model_id | modelId 类型与 tmplId 类型不符 | +* +* **示例代码** +* +* ```js +wx.requestSubscribeDeviceMessage({ + tmplIds: ['xxxxx'], + sn: 'xxxx', + snTicket: 'xxxxx', + modelId: 'xxx', + success(res) { + console.log(res) + }, + fail(res) { + console.log(res) + } +}) +``` */ + requestSubscribeDeviceMessage< + T extends RequestSubscribeDeviceMessageOption = RequestSubscribeDeviceMessageOption + >( + option: T + ): PromisifySuccessResult<T, RequestSubscribeDeviceMessageOption> + /** [wx.requestSubscribeMessage(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/subscribe-message/wx.requestSubscribeMessage.html) +* +* 需要基础库: `2.4.4` +* +* 在插件中使用:不支持 +* +* 调起客户端小程序订阅消息界面,返回用户订阅消息的操作结果。当用户勾选了订阅面板中的“总是保持以上选择,不再询问”时,模板消息会被添加到用户的小程序设置页,通过 [wx.getSetting](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/setting/wx.getSetting.html) 接口可获取用户对相关模板消息的订阅状态。 +* +* ## 注意事项 +* - 一次性模板 id 和永久模板 id 不可同时使用。 +* - 低版本基础库2.4.4~2.8.3 已支持订阅消息接口调用,仅支持传入一个一次性 tmplId / 永久 tmplId。 +* - [2.8.2](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 版本开始,用户发生点击行为或者发起支付回调后,才可以调起订阅消息界面。 +* - [2.10.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 版本开始,开发版和体验版小程序将禁止使用模板消息 formId。 +* - 一次授权调用里,每个tmplId对应的模板标题不能存在相同的,若出现相同的,只保留一个。 +* - [2.10.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 版本开始,支持订阅语音消息提醒,[详情](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/subscribe-message.html) +* +* **错误码** +* +* | errCode | errMsg | 说明 | +* | ------- | ------------------------------------------------------ | -------------------------------------------------------------- | +* | 10001 | TmplIds can't be empty | 参数传空了 | +* | 10002 | Request list fail | 网络问题,请求消息列表失败 | +* | 10003 | Request subscribe fail | 网络问题,订阅请求发送失败 | +* | 10004 | Invalid template id | 参数类型错误 | +* | 10005 | Cannot show subscribe message UI | 无法展示 UI,一般是小程序这个时候退后台了导致的 | +* | 20001 | No template data return, verify the template id exist | 没有模板数据,一般是模板 ID 不存在 或者和模板类型不对应 导致的 | +* | 20002 | Templates type must be same | 模板消息类型 既有一次性的又有永久的 | +* | 20003 | Templates count out of max bounds | 模板消息数量超过上限 | +* | 20004 | The main switch is switched off | 用户关闭了主开关,无法进行订阅 | +* | 20005 | This mini program was banned from subscribing messages | 小程序被禁封 | +* | 20013 | Reject DeviceMsg Template | 不允许通过该接口订阅设备消息 | +* +* **示例代码** +* +* ```js +wx.requestSubscribeMessage({ + tmplIds: [''], + success (res) { } +}) +``` */ + requestSubscribeMessage< + T extends RequestSubscribeMessageOption = RequestSubscribeMessageOption + >( + option: T + ): PromisifySuccessResult<T, RequestSubscribeMessageOption> + /** [wx.reserveChannelsLive(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/channels/wx.reserveChannelsLive.html) + * + * 需要基础库: `2.19.0` + * + * 在插件中使用:不支持 + * + * 预约视频号直播 */ + reserveChannelsLive(option: ReserveChannelsLiveOption): void + /** [wx.revokeBufferURL(string url)](https://developers.weixin.qq.com/miniprogram/dev/api/storage/wx.revokeBufferURL.html) + * + * 需要基础库: `2.14.0` + * + * 在插件中使用:不支持 + * + * 根据 URL 销毁存在内存中的数据 */ + revokeBufferURL( + /** 需要销毁的二进制数据 URL */ + url: string + ): void + /** [wx.saveFile(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/wx.saveFile.html) +* +* 在插件中使用:不支持 +* +* @warning **该接口已停止维护,推荐使用 [FileSystemManager.saveFile](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.saveFile.html)** +* +* 保存文件到本地。注意:**saveFile 会把临时文件移动,因此调用成功后传入的 tempFilePath 将不可用**。 +* +* **示例代码** +* +* ```js +wx.chooseImage({ + success: function(res) { + const tempFilePaths = res.tempFilePaths + wx.saveFile({ + tempFilePath: tempFilePaths[0], + success (res) { + const savedFilePath = res.savedFilePath + } + }) + } +}) +``` */ + saveFile<T extends WxSaveFileOption = WxSaveFileOption>( + option: T + ): PromisifySuccessResult<T, WxSaveFileOption> + /** [wx.saveFileToDisk(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/wx.saveFileToDisk.html) +* +* 需要基础库: `2.11.0` +* +* 在插件中使用:需要基础库 `2.15.0` +* +* 保存文件系统的文件到用户磁盘,仅在 PC 端支持 +* +* **示例代码** +* +* ```js +wx.saveFileToDisk({ + filePath: `${wx.env.USER_DATA_PATH}/hello.txt`, + success(res) { + console.log(res) + }, + fail(res) { + console.error(res) + } +}) +``` */ + saveFileToDisk(option: SaveFileToDiskOption): void + /** [wx.saveImageToPhotosAlbum(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/image/wx.saveImageToPhotosAlbum.html) +* +* 需要基础库: `1.2.0` +* +* 在插件中使用:需要基础库 `1.9.6` +* +* 保存图片到系统相册。 +* +* **示例代码** +* +* ```js +wx.saveImageToPhotosAlbum({ + success(res) { } +}) +``` */ + saveImageToPhotosAlbum< + T extends SaveImageToPhotosAlbumOption = SaveImageToPhotosAlbumOption + >( + option: T + ): PromisifySuccessResult<T, SaveImageToPhotosAlbumOption> + /** [wx.saveVideoToPhotosAlbum(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/video/wx.saveVideoToPhotosAlbum.html) +* +* 需要基础库: `1.2.0` +* +* 在插件中使用:需要基础库 `1.9.6` +* +* 保存视频到系统相册。支持mp4视频格式。 +* +* **示例代码** +* +* ```js +wx.saveVideoToPhotosAlbum({ + filePath: 'wxfile://xxx', + success (res) { + console.log(res.errMsg) + } +}) +``` */ + saveVideoToPhotosAlbum< + T extends SaveVideoToPhotosAlbumOption = SaveVideoToPhotosAlbumOption + >( + option: T + ): PromisifySuccessResult<T, SaveVideoToPhotosAlbumOption> + /** [wx.scanCode(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/scan/wx.scanCode.html) +* +* 需要基础库: `1.0.0` +* +* 在插件中使用:需要基础库 `1.9.6` +* +* 调起客户端扫码界面进行扫码 +* +* **示例代码** +* +* ```js +// 允许从相机和相册扫码 +wx.scanCode({ + success (res) { + console.log(res) + } +}) + +// 只允许从相机扫码 +wx.scanCode({ + onlyFromCamera: true, + success (res) { + console.log(res) + } +}) +``` */ + scanCode<T extends ScanCodeOption = ScanCodeOption>( + option: T + ): PromisifySuccessResult<T, ScanCodeOption> + /** [wx.seekBackgroundAudio(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/wx.seekBackgroundAudio.html) +* +* 在插件中使用:需要基础库 `1.9.6` +* @deprecated 基础库版本 [1.2.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [wx.getBackgroundAudioManager](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/wx.getBackgroundAudioManager.html) 替换 +* +* 控制音乐播放进度。 +* +* **示例代码** +* +* ```js +wx.seekBackgroundAudio({ + position: 30 +}) +``` */ + seekBackgroundAudio< + T extends SeekBackgroundAudioOption = SeekBackgroundAudioOption + >( + option: T + ): PromisifySuccessResult<T, SeekBackgroundAudioOption> + /** [wx.sendHCEMessage(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc-hce/wx.sendHCEMessage.html) +* +* 需要基础库: `1.7.0` +* +* 在插件中使用:需要基础库 `2.1.0` +* +* 发送 NFC 消息。仅在安卓系统下有效。 +* +* **示例代码** +* +* ```js +const buffer = new ArrayBuffer(1) +const dataView = new DataView(buffer) +dataView.setUint8(0, 0) + +wx.startHCE({ + success (res) { + wx.onHCEMessage(function(res) { + if (res.messageType === 1) { + wx.sendHCEMessage({data: buffer}) + } + }) + } +}) +``` */ + sendHCEMessage<T extends SendHCEMessageOption = SendHCEMessageOption>( + option: T + ): PromisifySuccessResult<T, SendHCEMessageOption> + /** [wx.sendSms(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/sms/wx.sendSms.html) + * + * 需要基础库: `2.25.0` + * + * 在插件中使用:不支持 + * + * 拉起手机发送短信界面。 */ + sendSms(option: SendSmsOption): void + /** [wx.sendSocketMessage(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/network/websocket/wx.sendSocketMessage.html) +* +* 在插件中使用:不支持 +* +* @warning **推荐使用 [SocketTask](https://developers.weixin.qq.com/miniprogram/dev/api/network/websocket/SocketTask.html) 的方式去管理 webSocket 链接,每一条链路的生命周期都更加可控,同时存在多个 webSocket 的链接的情况下使用 wx 前缀的方法可能会带来一些和预期不一致的情况。** +* +* 通过 WebSocket 连接发送数据。需要先 wx.connectSocket,并在 wx.onSocketOpen 回调之后才能发送。 +* +* **示例代码** +* +* ```js +let socketOpen = false +let socketMsgQueue = [] +wx.connectSocket({ + url: 'test.php' +}) + +wx.onSocketOpen(function(res) { + socketOpen = true + for (let i = 0; i < socketMsgQueue.length; i++){ + sendSocketMessage(socketMsgQueue[i]) + } + socketMsgQueue = [] +}) + +function sendSocketMessage(msg) { + if (socketOpen) { + wx.sendSocketMessage({ + data:msg + }) + } else { + socketMsgQueue.push(msg) + } +} +``` */ + sendSocketMessage< + T extends SendSocketMessageOption = SendSocketMessageOption + >( + option: T + ): PromisifySuccessResult<T, SendSocketMessageOption> + /** [wx.setBLEMTU(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.setBLEMTU.html) + * + * 需要基础库: `2.11.0` + * + * 在插件中使用:需要基础库 `2.11.0` + * + * 协商设置蓝牙低功耗的最大传输单元 (Maximum Transmission Unit, MTU)。需在 [wx.createBLEConnection](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.createBLEConnection.html) 调用成功后调用。仅安卓系统 5.1 以上版本有效,iOS 因系统限制不支持。 */ + setBLEMTU<T extends SetBLEMTUOption = SetBLEMTUOption>( + option: T + ): PromisifySuccessResult<T, SetBLEMTUOption> + /** [wx.setBackgroundColor(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/background/wx.setBackgroundColor.html) +* +* 需要基础库: `2.1.0` +* +* 在插件中使用:需要基础库 `2.4.0` +* +* 在插件中使用时,只能在当前插件的页面中调用 +* +* 动态设置窗口的背景色 +* +* **示例代码** +* +* ```js +wx.setBackgroundColor({ + backgroundColor: '#ffffff', // 窗口的背景色为白色 +}) + +wx.setBackgroundColor({ + backgroundColorTop: '#ffffff', // 顶部窗口的背景色为白色 + backgroundColorBottom: '#ffffff', // 底部窗口的背景色为白色 +}) +``` */ + setBackgroundColor< + T extends SetBackgroundColorOption = SetBackgroundColorOption + >( + option: T + ): PromisifySuccessResult<T, SetBackgroundColorOption> + /** [wx.setBackgroundFetchToken(object object)](https://developers.weixin.qq.com/miniprogram/dev/api/storage/background-fetch/wx.setBackgroundFetchToken.html) + * + * 需要基础库: `2.8.0` + * + * 在插件中使用:不支持 + * + * 设置自定义登录态,在周期性拉取数据时带上,便于第三方服务器验证请求合法性 */ + setBackgroundFetchToken< + T extends SetBackgroundFetchTokenOption = SetBackgroundFetchTokenOption + >( + option: T + ): PromisifySuccessResult<T, SetBackgroundFetchTokenOption> + /** [wx.setBackgroundTextStyle(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/background/wx.setBackgroundTextStyle.html) +* +* 需要基础库: `2.1.0` +* +* 在插件中使用:需要基础库 `2.4.0` +* +* 在插件中使用时,只能在当前插件的页面中调用 +* +* 动态设置下拉背景字体、loading 图的样式 +* +* **示例代码** +* +* ```js +wx.setBackgroundTextStyle({ + textStyle: 'dark' // 下拉背景字体、loading 图的样式为dark +}) +``` */ + setBackgroundTextStyle< + T extends SetBackgroundTextStyleOption = SetBackgroundTextStyleOption + >( + option: T + ): PromisifySuccessResult<T, SetBackgroundTextStyleOption> + /** [wx.setClipboardData(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/clipboard/wx.setClipboardData.html) +* +* 需要基础库: `1.1.0` +* +* 在插件中使用:需要基础库 `1.9.6` +* +* 设置系统剪贴板的内容。调用成功后,会弹出 toast 提示"内容已复制",持续 1.5s +* +* **示例代码** +* +* ```js +wx.setClipboardData({ + data: 'data', + success (res) { + wx.getClipboardData({ + success (res) { + console.log(res.data) // data + } + }) + } +}) +``` */ + setClipboardData< + T extends SetClipboardDataOption = SetClipboardDataOption + >( + option: T + ): PromisifySuccessResult<T, SetClipboardDataOption> + /** [wx.setEnable1v1Chat(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/voip/wx.setEnable1v1Chat.html) + * + * 需要基础库: `2.20.1` + * + * 在插件中使用:不支持 + * + * 开启双人通话。设置 `enable` 为 `false` 时,无法接听呼叫。 */ + setEnable1v1Chat(option: SetEnable1v1ChatOption): void + /** [wx.setEnableDebug(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/base/debug/wx.setEnableDebug.html) +* +* 需要基础库: `1.4.0` +* +* 在插件中使用:不支持 +* +* 设置是否打开调试开关。此开关对正式版也能生效。 +* +* **示例代码** +* +* ```javascript +// 打开调试 +wx.setEnableDebug({ + enableDebug: true +}) + +// 关闭调试 +wx.setEnableDebug({ + enableDebug: false +}) +``` +* +* **Tips** +* +* - 在正式版打开调试还有一种方法,就是先在开发版或体验版打开调试,再切到正式版就能看到vConsole。 */ + setEnableDebug<T extends SetEnableDebugOption = SetEnableDebugOption>( + option: T + ): PromisifySuccessResult<T, SetEnableDebugOption> + /** [wx.setInnerAudioOption(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/wx.setInnerAudioOption.html) + * + * 需要基础库: `2.3.0` + * + * 在插件中使用:需要基础库 `2.10.0` + * + * 设置 [InnerAudioContext](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.html) 的播放选项。设置之后对当前小程序全局生效。 + * + * **** + * + * ## 注意事项 + * - 为保证微信整体体验,speakerOn 为 true 时,客户端会忽略 mixWithOthers 参数的内容,强制与其它音频互斥 + * - 不支持在播放音频的过程中切换为扬声器播放,开发者如需切换可以先暂停当前播放的音频并记录下当前暂停的时间点,然后切换后重新从原来暂停的时间点开始播放音频 + * - 目前 wx.setInnerAudioOption 接口不兼容 wx.createWebAudioContext 接口,也不兼容 wx.createInnerAudioContext 开启 useWebAudioImplement 的情况,将在后续版本中支持 */ + setInnerAudioOption< + T extends SetInnerAudioOption = SetInnerAudioOption + >( + option: T + ): PromisifySuccessResult<T, SetInnerAudioOption> + /** [wx.setKeepScreenOn(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/screen/wx.setKeepScreenOn.html) +* +* 需要基础库: `1.4.0` +* +* 在插件中使用:需要基础库 `1.9.6` +* +* 设置是否保持常亮状态。仅在当前小程序生效,离开小程序后设置失效。 +* +* **示例代码** +* +* ```js +wx.setKeepScreenOn({ + keepScreenOn: true +}) +``` */ + setKeepScreenOn< + T extends SetKeepScreenOnOption = SetKeepScreenOnOption + >( + option: T + ): PromisifySuccessResult<T, SetKeepScreenOnOption> + /** [wx.setNavigationBarColor(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/navigation-bar/wx.setNavigationBarColor.html) + * + * 需要基础库: `1.4.0` + * + * 在插件中使用:需要基础库 `2.1.0` + * + * 在插件中使用时,只能在当前插件的页面中调用 + * + * 设置页面导航条颜色 */ + setNavigationBarColor< + T extends SetNavigationBarColorOption = SetNavigationBarColorOption + >( + option: T + ): PromisifySuccessResult<T, SetNavigationBarColorOption> + /** [wx.setNavigationBarTitle(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/navigation-bar/wx.setNavigationBarTitle.html) +* +* 在插件中使用:需要基础库 `2.1.0` +* +* 在插件中使用时,只能在当前插件的页面中调用 +* +* 动态设置当前页面的标题 +* +* **示例代码** +* +* ```js +wx.setNavigationBarTitle({ + title: '当前页面' +}) +``` */ + setNavigationBarTitle< + T extends SetNavigationBarTitleOption = SetNavigationBarTitleOption + >( + option: T + ): PromisifySuccessResult<T, SetNavigationBarTitleOption> + /** [wx.setScreenBrightness(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/screen/wx.setScreenBrightness.html) + * + * 需要基础库: `1.2.0` + * + * 在插件中使用:需要基础库 `1.9.6` + * + * 设置屏幕亮度 */ + setScreenBrightness< + T extends SetScreenBrightnessOption = SetScreenBrightnessOption + >( + option: T + ): PromisifySuccessResult<T, SetScreenBrightnessOption> + /** [wx.setStorage(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/storage/wx.setStorage.html) +* +* 在插件中使用:需要基础库 `1.9.6` +* +* 将数据存储在本地缓存中指定的 key 中。会覆盖掉原来该 key 对应的内容。除非用户主动删除或因存储空间原因被系统清理,否则数据都一直可用。单个 key 允许存储的最大数据长度为 1MB,所有数据存储上限为 10MB。 +* +* **示例代码** +* +* ```js +wx.setStorage({ + key:"key", + data:"value" +}) +``` +* +* ```js +// 开启加密存储 +wx.setStorage({ + key: "key", + data: "value", + encrypt: true, // 若开启加密存储,setStorage 和 getStorage 需要同时声明 encrypt 的值为 true + success() { + wx.getStorage({ + key: "key", + encrypt: true, // 若开启加密存储,setStorage 和 getStorage 需要同时声明 encrypt 的值为 true + success(res) { + console.log(res.data) + } + }) + } +}) +``` */ + setStorage< + T = any, + U extends SetStorageOption<T> = SetStorageOption<T> + >( + option: U + ): PromisifySuccessResult<U, SetStorageOption<T>> + /** [wx.setStorageSync(string key, any data)](https://developers.weixin.qq.com/miniprogram/dev/api/storage/wx.setStorageSync.html) +* +* 在插件中使用:需要基础库 `1.9.6` +* +* 将数据存储在本地缓存中指定的 key 中。会覆盖掉原来该 key 对应的内容。除非用户主动删除或因存储空间原因被系统清理,否则数据都一直可用。单个 key 允许存储的最大数据长度为 1MB,所有数据存储上限为 10MB。 +* +* **注意** +* +* storage 应只用来进行数据的持久化存储,不应用于运行时的数据传递或全局状态管理。启动过程中过多的同步读写存储,会显著影响启动耗时。 +* +* **示例代码** +* +* ```js +try { + wx.setStorageSync('key', 'value') +} catch (e) { } +``` */ + setStorageSync<T = any>( + /** 本地缓存中指定的 key */ + key: string, + /** 需要存储的内容。只支持原生类型、Date、及能够通过`JSON.stringify`序列化的对象。 */ + data: T + ): void + /** [wx.setTabBarBadge(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/tab-bar/wx.setTabBarBadge.html) +* +* 需要基础库: `1.9.0` +* +* 在插件中使用:不支持 +* +* 为 tabBar 某一项的右上角添加文本 +* +* **示例代码** +* +* ```js +wx.setTabBarBadge({ + index: 0, + text: '1' +}) +``` */ + setTabBarBadge<T extends SetTabBarBadgeOption = SetTabBarBadgeOption>( + option: T + ): PromisifySuccessResult<T, SetTabBarBadgeOption> + /** [wx.setTabBarItem(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/tab-bar/wx.setTabBarItem.html) +* +* 需要基础库: `1.9.0` +* +* 在插件中使用:不支持 +* +* 动态设置 tabBar 某一项的内容,`2.7.0` 起图片支持临时文件和网络文件。 +* +* **示例代码** +* +* ```js +wx.setTabBarItem({ + index: 0, + text: 'text', + iconPath: '/path/to/iconPath', + selectedIconPath: '/path/to/selectedIconPath' +}) +``` */ + setTabBarItem<T extends SetTabBarItemOption = SetTabBarItemOption>( + option: T + ): PromisifySuccessResult<T, SetTabBarItemOption> + /** [wx.setTabBarStyle(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/tab-bar/wx.setTabBarStyle.html) +* +* 需要基础库: `1.9.0` +* +* 在插件中使用:不支持 +* +* 动态设置 tabBar 的整体样式 +* +* **示例代码** +* +* ```js +wx.setTabBarStyle({ + color: '#FF0000', + selectedColor: '#00FF00', + backgroundColor: '#0000FF', + borderStyle: 'white' +}) +``` */ + setTabBarStyle<T extends SetTabBarStyleOption = SetTabBarStyleOption>( + option?: T + ): PromisifySuccessResult<T, SetTabBarStyleOption> + /** [wx.setTopBarText(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/sticky/wx.setTopBarText.html) +* +* 需要基础库: `1.4.3` +* +* 在插件中使用:不支持 +* @deprecated 基础库版本 [1.9.9](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃 +* +* 动态设置置顶栏文字内容。只有当前小程序被置顶时能生效,如果当前小程序没有被置顶,也能调用成功,但是不会立即生效,只有在用户将这个小程序置顶后才换上设置的文字内容. +* +* **示例代码** +* +* ```js +wx.setTopBarText({ + text: 'hello, world!' +}) +``` +* +* **注意** +* +* - 调用成功后,需间隔 5s 才能再次调用此接口,如果在 5s 内再次调用此接口,会回调 fail,errMsg:"setTopBarText: fail invoke too frequently" */ + setTopBarText<T extends SetTopBarTextOption = SetTopBarTextOption>( + option: T + ): PromisifySuccessResult<T, SetTopBarTextOption> + /** [wx.setVisualEffectOnCapture(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/screen/wx.setVisualEffectOnCapture.html) + * + * 需要基础库: `2.20.1` + * + * 在插件中使用:需要基础库 `2.21.3` + * + * 设置截屏/录屏时屏幕表现,仅支持在 Android 端调用 */ + setVisualEffectOnCapture(option: SetVisualEffectOnCaptureOption): void + /** [wx.setWifiList(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/wifi/wx.setWifiList.html) +* +* 需要基础库: `1.6.0` +* +* 在插件中使用:需要基础库 `2.9.1` +* +* 设置 `wifiList` 中 AP 的相关信息。在 `onGetWifiList` 回调后调用,**iOS特有接口**。 +* +* **注意** +* +* - 该接口只能在 `onGetWifiList` 回调之后才能调用。 +* - 此时客户端会挂起,等待小程序设置 Wi-Fi 信息,请务必尽快调用该接口,若无数据请传入一个空数组。 +* - 有可能随着周边 Wi-Fi 列表的刷新,单个流程内收到多次带有存在重复的 Wi-Fi 列表的回调。 +* +* **示例代码** +* +* ```js +wx.onGetWifiList(function(res) { + if (res.wifiList.length) { + wx.setWifiList({ + wifiList: [{ + SSID: res.wifiList[0].SSID, + BSSID: res.wifiList[0].BSSID, + password: '123456' + }] + }) + } else { + wx.setWifiList({ + wifiList: [] + }) + } +}) +wx.getWifiList() +``` */ + setWifiList<T extends SetWifiListOption = SetWifiListOption>( + option: T + ): PromisifySuccessResult<T, SetWifiListOption> + /** [wx.setWindowSize(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/window/wx.setWindowSize.html) + * + * 需要基础库: `2.10.1` + * + * 在插件中使用:不支持 + * @deprecated 基础库版本 [2.11.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃 + * + * 设置窗口大小,该接口仅适用于 PC 平台,使用细则请参见指南 */ + setWindowSize(option: SetWindowSizeOption): void + /** [wx.shareFileMessage(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/share/wx.shareFileMessage.html) + * + * 需要基础库: `2.16.1` + * + * 在插件中使用:不支持 + * + * 转发文件到聊天 */ + shareFileMessage< + T extends ShareFileMessageOption = ShareFileMessageOption + >( + option: T + ): PromisifySuccessResult<T, ShareFileMessageOption> + /** [wx.shareToWeRun(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/werun/wx.shareToWeRun.html) + * + * 在插件中使用:不支持 + * + * 分享数据到微信运动。 */ + shareToWeRun<T extends ShareToWeRunOption = ShareToWeRunOption>( + option: T + ): PromisifySuccessResult<T, ShareToWeRunOption> + /** [wx.shareVideoMessage(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/share/wx.shareVideoMessage.html) + * + * 需要基础库: `2.16.1` + * + * 在插件中使用:不支持 + * + * 转发视频到聊天 */ + shareVideoMessage< + T extends ShareVideoMessageOption = ShareVideoMessageOption + >( + option: T + ): PromisifySuccessResult<T, ShareVideoMessageOption> + /** [wx.showActionSheet(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/interaction/wx.showActionSheet.html) +* +* 在插件中使用:需要基础库 `1.9.6` +* +* 显示操作菜单 +* +* **示例代码** +* +* ```js +wx.showActionSheet({ + itemList: ['A', 'B', 'C'], + success (res) { + console.log(res.tapIndex) + }, + fail (res) { + console.log(res.errMsg) + } +}) +``` +* +* **注意** +* +* - Android 6.7.2 以下版本,点击取消或蒙层时,回调 fail, errMsg 为 "fail cancel"; +* - Android 6.7.2 及以上版本 和 iOS 点击蒙层不会关闭模态弹窗,所以尽量避免使用「取消」分支中实现业务逻辑 */ + showActionSheet< + T extends ShowActionSheetOption = ShowActionSheetOption + >( + option: T + ): PromisifySuccessResult<T, ShowActionSheetOption> + /** [wx.showLoading(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/interaction/wx.showLoading.html) +* +* 需要基础库: `1.1.0` +* +* 在插件中使用:需要基础库 `1.9.6` +* +* 显示 loading 提示框。需主动调用 wx.hideLoading 才能关闭提示框 +* +* **示例代码** +* +* ```js +wx.showLoading({ + title: '加载中', +}) + +setTimeout(function () { + wx.hideLoading() +}, 2000) +``` +* +* **注意** +* +* - [wx.showLoading](https://developers.weixin.qq.com/miniprogram/dev/api/ui/interaction/wx.showLoading.html) 和 [wx.showToast](https://developers.weixin.qq.com/miniprogram/dev/api/ui/interaction/wx.showToast.html) 同时只能显示一个 +* - [wx.showLoading](https://developers.weixin.qq.com/miniprogram/dev/api/ui/interaction/wx.showLoading.html) 应与 [wx.hideLoading](https://developers.weixin.qq.com/miniprogram/dev/api/ui/interaction/wx.hideLoading.html) 配对使用 */ + showLoading<T extends ShowLoadingOption = ShowLoadingOption>( + option: T + ): PromisifySuccessResult<T, ShowLoadingOption> + /** [wx.showModal(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/interaction/wx.showModal.html) +* +* 在插件中使用:需要基础库 `1.9.6` +* +* 显示模态对话框 +* +* **示例代码** +* +* ```js +wx.showModal({ + title: '提示', + content: '这是一个模态弹窗', + success (res) { + if (res.confirm) { + console.log('用户点击确定') + } else if (res.cancel) { + console.log('用户点击取消') + } + } +}) +``` +* +* **注意** +* +* - Android 6.7.2 以下版本,点击取消或蒙层时,回调 fail, errMsg 为 "fail cancel"; +* - Android 6.7.2 及以上版本 和 iOS 点击蒙层不会关闭模态弹窗,所以尽量避免使用「取消」分支中实现业务逻辑 +* - 自基础库 2.17.1 版本起,支持传入 editable 参数,显示带输入框的弹窗 */ + showModal<T extends ShowModalOption = ShowModalOption>( + option: T + ): PromisifySuccessResult<T, ShowModalOption> + /** [wx.showNavigationBarLoading(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/navigation-bar/wx.showNavigationBarLoading.html) + * + * 在插件中使用:需要基础库 `2.1.0` + * + * 在插件中使用时,只能在当前插件的页面中调用 + * + * 在当前页面显示导航条加载动画 */ + showNavigationBarLoading< + T extends ShowNavigationBarLoadingOption = ShowNavigationBarLoadingOption + >( + option?: T + ): PromisifySuccessResult<T, ShowNavigationBarLoadingOption> + /** [wx.showRedPackage(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/redpackage/wx.showRedPackage.html) + * + * 需要基础库: `2.10.0` + * + * 在插件中使用:不支持 + * + * 拉取h5领取红包封面页。获取参考红包封面地址参考 [微信红包封面开发平台](https://cover.weixin.qq.com/cgi-bin/mmcover-bin/readtemplate?t=page/index#/doc?page=introduce)。 */ + showRedPackage<T extends ShowRedPackageOption = ShowRedPackageOption>( + option: T + ): PromisifySuccessResult<T, ShowRedPackageOption> + /** [wx.showShareImageMenu(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/share/wx.showShareImageMenu.html) + * + * 需要基础库: `2.14.3` + * + * 在插件中使用:需要基础库 `2.16.0` + * + * 打开分享图片弹窗,可以将图片发送给朋友、收藏或下载 */ + showShareImageMenu< + T extends ShowShareImageMenuOption = ShowShareImageMenuOption + >( + option: T + ): PromisifySuccessResult<T, ShowShareImageMenuOption> + /** [wx.showShareMenu(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/share/wx.showShareMenu.html) +* +* 需要基础库: `1.1.0` +* +* 在插件中使用:需要基础库 `2.1.0` +* +* 在插件中使用时,只能在当前插件的页面中调用 +* +* 显示当前页面的转发按钮 +* +* **** +* +* ## 注意事项 +* - "shareAppMessage"表示“发送给朋友”按钮,"shareTimeline"表示“分享到朋友圈”按钮 +* - 显示“分享到朋友圈”按钮时必须同时显示“发送给朋友”按钮,显示“发送给朋友”按钮时则允许不显示“分享到朋友圈”按钮 +* +* **示例代码** +* +* ```js +wx.showShareMenu({ + withShareTicket: true, + menus: ['shareAppMessage', 'shareTimeline'] +}) +``` */ + showShareMenu<T extends ShowShareMenuOption = ShowShareMenuOption>( + option: T + ): PromisifySuccessResult<T, ShowShareMenuOption> + /** [wx.showTabBar(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/tab-bar/wx.showTabBar.html) + * + * 需要基础库: `1.9.0` + * + * 在插件中使用:不支持 + * + * 显示 tabBar */ + showTabBar<T extends ShowTabBarOption = ShowTabBarOption>( + option: T + ): PromisifySuccessResult<T, ShowTabBarOption> + /** [wx.showTabBarRedDot(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/tab-bar/wx.showTabBarRedDot.html) + * + * 需要基础库: `1.9.0` + * + * 在插件中使用:不支持 + * + * 显示 tabBar 某一项的右上角的红点 */ + showTabBarRedDot< + T extends ShowTabBarRedDotOption = ShowTabBarRedDotOption + >( + option: T + ): PromisifySuccessResult<T, ShowTabBarRedDotOption> + /** [wx.showToast(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/interaction/wx.showToast.html) +* +* 在插件中使用:需要基础库 `1.9.6` +* +* 显示消息提示框 +* +* **示例代码** +* +* ```js +wx.showToast({ + title: '成功', + icon: 'success', + duration: 2000 +}) +``` +* +* **注意** +* +* - [wx.showLoading](https://developers.weixin.qq.com/miniprogram/dev/api/ui/interaction/wx.showLoading.html) 和 [wx.showToast](https://developers.weixin.qq.com/miniprogram/dev/api/ui/interaction/wx.showToast.html) 同时只能显示一个 +* - [wx.showToast](https://developers.weixin.qq.com/miniprogram/dev/api/ui/interaction/wx.showToast.html) 应与 [wx.hideToast](https://developers.weixin.qq.com/miniprogram/dev/api/ui/interaction/wx.hideToast.html) 配对使用 */ + showToast<T extends ShowToastOption = ShowToastOption>( + option: T + ): PromisifySuccessResult<T, ShowToastOption> + /** [wx.startAccelerometer(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/accelerometer/wx.startAccelerometer.html) +* +* 需要基础库: `1.1.0` +* +* 在插件中使用:需要基础库 `1.9.6` +* +* 开始监听加速度数据。 +* +* **示例代码** +* +* ```js +wx.startAccelerometer({ + interval: 'game' +}) +``` +* +* **注意** +* +* - 根据机型性能、当前 CPU 与内存的占用情况,`interval` 的设置与实际 `wx.onAccelerometerChange()` 回调函数的执行频率会有一些出入。 */ + startAccelerometer< + T extends StartAccelerometerOption = StartAccelerometerOption + >( + option?: T + ): PromisifySuccessResult<T, StartAccelerometerOption> + /** [wx.startBeaconDiscovery(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/ibeacon/wx.startBeaconDiscovery.html) +* +* 需要基础库: `1.2.0` +* +* 在插件中使用:需要基础库 `1.9.6` +* +* 开始搜索附近的 Beacon 设备 +* +* **示例代码** +* +* ```js +wx.startBeaconDiscovery({ + success(res) { } +}) +``` */ + startBeaconDiscovery< + T extends StartBeaconDiscoveryOption = StartBeaconDiscoveryOption + >( + option: T + ): PromisifySuccessResult<T, StartBeaconDiscoveryOption> + /** [wx.startBluetoothDevicesDiscovery(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth/wx.startBluetoothDevicesDiscovery.html) +* +* 需要基础库: `1.1.0` +* +* 在插件中使用:需要基础库 `1.9.6` +* +* 开始搜寻附近的蓝牙外围设备。 +* +* **此操作比较耗费系统资源,请在搜索到需要的设备后及时调用 [wx.stopBluetoothDevicesDiscovery](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth/wx.stopBluetoothDevicesDiscovery.html) 停止搜索。** +* +* **注意** +* +* - 考虑到蓝牙功能可以间接进行定位,安卓 6.0 及以上版本,无定位权限或定位开关未打开时,无法进行设备搜索。这种情况下,安卓 8.0.16 前,接口调用成功但无法扫描设备;8.0.16 及以上版本,会返回错误。 +* +* **示例代码** +* +* [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/m7klFDmZ72i1) +* +* ```js +// 以微信硬件平台的蓝牙智能灯为例,主服务的 UUID 是 FEE7。传入这个参数,只搜索主服务 UUID 为 FEE7 的设备 +wx.startBluetoothDevicesDiscovery({ + services: ['FEE7'], + success (res) { + console.log(res) + } +}) +``` */ + startBluetoothDevicesDiscovery< + T extends StartBluetoothDevicesDiscoveryOption = StartBluetoothDevicesDiscoveryOption + >( + option: T + ): PromisifySuccessResult<T, StartBluetoothDevicesDiscoveryOption> + /** [wx.startCompass(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/compass/wx.startCompass.html) +* +* 需要基础库: `1.1.0` +* +* 在插件中使用:需要基础库 `1.9.6` +* +* 开始监听罗盘数据 +* +* **示例代码** +* +* ```js +wx.startCompass() +``` */ + startCompass<T extends StartCompassOption = StartCompassOption>( + option?: T + ): PromisifySuccessResult<T, StartCompassOption> + /** [wx.startDeviceMotionListening(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/motion/wx.startDeviceMotionListening.html) + * + * 需要基础库: `2.3.0` + * + * 在插件中使用:需要基础库 `2.9.1` + * + * 开始监听设备方向的变化。 */ + startDeviceMotionListening< + T extends StartDeviceMotionListeningOption = StartDeviceMotionListeningOption + >( + option?: T + ): PromisifySuccessResult<T, StartDeviceMotionListeningOption> + /** [wx.startGyroscope(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/gyroscope/wx.startGyroscope.html) + * + * 需要基础库: `2.3.0` + * + * 在插件中使用:需要基础库 `2.9.1` + * + * 开始监听陀螺仪数据。 */ + startGyroscope<T extends StartGyroscopeOption = StartGyroscopeOption>( + option?: T + ): PromisifySuccessResult<T, StartGyroscopeOption> + /** [wx.startHCE(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc-hce/wx.startHCE.html) +* +* 需要基础库: `1.7.0` +* +* 在插件中使用:需要基础库 `2.1.0` +* +* 初始化 NFC 模块。(HCE 模式仅安卓支持) +* +* **示例代码** +* +* ```js +wx.startHCE({ + aid_list: ['F222222222'], + success (res) { + console.log(res.errMsg) + } +}) +``` */ + startHCE<T extends StartHCEOption = StartHCEOption>( + option: T + ): PromisifySuccessResult<T, StartHCEOption> + /** [wx.startLocalServiceDiscovery(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/network/mdns/wx.startLocalServiceDiscovery.html) + * + * 需要基础库: `2.4.0` + * + * 在插件中使用:需要基础库 `2.15.0` + * + * 开始搜索局域网下的 mDNS 服务。搜索的结果会通过 wx.onLocalService* 事件返回。 + * + * **注意** + * + * 1. 由于操作系统相关能力变更,iOS 微信客户端 7.0.18 及以上版本无法使用 mDNS 相关接口,安卓版本不受影响 + * 2. wx.startLocalServiceDiscovery 是一个消耗性能的行为,开始 30 秒后会自动 stop 并执行 wx.onLocalServiceDiscoveryStop 注册的回调函数。 + * 3. 在调用 wx.startLocalServiceDiscovery 后,在这次搜索行为停止后才能发起下次 wx.startLocalServiceDiscovery。停止本次搜索行为的操作包括调用 wx.stopLocalServiceDiscovery 和 30 秒后系统自动 stop 本次搜索。 */ + startLocalServiceDiscovery< + T extends StartLocalServiceDiscoveryOption = StartLocalServiceDiscoveryOption + >( + option: T + ): PromisifySuccessResult<T, StartLocalServiceDiscoveryOption> + /** [wx.startLocationUpdate(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/location/wx.startLocationUpdate.html) + * + * 需要基础库: `2.8.0` + * + * 在插件中使用:需要基础库 `2.8.0` + * + * 开启小程序进入前台时接收位置消息。 + * ## 使用方法 + * 自 2022 年 7 月 14 日后发布的小程序,若使用该接口,需要在 app.json 中进行声明,否则将无法正常使用该接口,2022年7月14日前发布的小程序不受影响。[具体规则见公告](https://developers.weixin.qq.com/community/develop/doc/000a02f2c5026891650e7f40351c01) + * + * ## 申请开通 + * 暂只针对如下类目的小程序开放,需要先通过类目审核,再在小程序管理后台,「开发」-「开发管理」-「接口设置」中自助开通该接口权限。从2022年7月14日开始,在代码审核环节将检测该接口是否已完成开通,如未开通,将在代码提审环节进行拦截。 + * + * ### 国内主体开放类目 + * + * | 一级类目/主体类型 | 二级类目 | 应用场景 | + * | -------------- | -------| -------- | + * | 电商平台 | / | 售卖商品线下发货、收货、送货服务 | + * | 商家自营 | / | 提供售卖商品线下发货、收货、送货服务、线下商超导览、导航服务 | + * | 医疗服务 | 公立医疗机构、三级私立医疗机构、其他私立医疗机构、就医服务、其他医学健康服务、药品(非处方药)销售、非处方药销售平台、医疗器械生产企业、医疗器械自营、医疗器械经营销售平台、互联网医院血液、干细胞服务、临床试验 | 1、实际物品/药品接收服务 2、基于地理位置取号并现场报到、附近医院导航等服务 | + * | 交通服务 | / | 代驾服务、租车网点导航等相关服务 | + * | 生活服务 | / | 上门服务作业等线下场景 | + * | 物流服务 | 收件/派件、查件、邮政、装卸搬运、快递柜、货物运输 | 快递/货物收发服务 | + * | 餐饮服务 | 点餐平台、外卖平台 | 线下送餐服务 | + * | 工具 | 天气、信息查询 | 与地理位置相关的服务,比如潮汐查询、海拔查询、天气查询等 | + * | 金融 | 保险 | 提供线下网点预约、基于地理位置取号并现场报到、附近网点导航等服务 | + * | 旅游 | 景区服务 | 提供景区导航、导览服务 | + * | 政务民生 | / | 提供政务单位相关业务 | + * | 政府主体帐号 | / | 提供政务单位相关业务 | + * + * ### 海外主体开放类目 + * | 一级类目/主体类型 | 二级类目 | 应用场景 | + * | -------------- | -------| -------- | + * | 出行与交通 | / | 代驾服务、租车网点导航等相关服务 | + * | 快递业与邮政 | / | 快递/货物收发服务 | + * | 餐饮 | / | 线下送餐服务 | + * | 电商平台 | / | 售卖商品线下发货、线下收货服务 | + * | 出行与交通 | / | 代驾服务、租车网点导航等相关服务 | + * | 跨境电商 | / | 提供售卖商品线下发货、收货服务、线下商超导览、导航服务 | + * | 本地服务 | 服装/鞋/箱包、玩具、家电/数码/手机、美妆/洗护、珠宝/饰品/眼镜/钟表、运动/户外/乐器、鲜花/园艺/工艺品、家居/家饰/家纺、办公/文具、机械/电子器件、酒、食品、百货/超市/便利店、宠物食品/用品 | 提供售卖商品线下发货、线下收货服务、线下商超导览、导航服务 | + * | 生活服务 | 家政、外送 | 上门服务作业等线下场景 | + * + * **注意** + * + * - 获取位置信息需配置[地理位置用途说明](https://developers.weixin.qq.com/miniprogram/dev/reference/configuration/app.html#permission)。 */ + startLocationUpdate< + T extends StartLocationUpdateOption = StartLocationUpdateOption + >( + option: T + ): PromisifySuccessResult<T, StartLocationUpdateOption> + /** [wx.startLocationUpdateBackground(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/location/wx.startLocationUpdateBackground.html) + * + * 需要基础库: `2.8.0` + * + * 在插件中使用:不支持 + * + * 开启小程序进入前后台时均接收位置消息,需引导用户开启[授权](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/authorize.html#后台定位)。授权以后,小程序在运行中或进入后台均可接受位置消息变化。 + * ## 使用方法 + * 自 2022 年 7 月 14 日后发布的小程序,若使用该接口,需要在 app.json 中进行声明,否则将无法正常使用该接口,2022年7月14日前发布的小程序不受影响。[具体规则见公告](https://developers.weixin.qq.com/community/develop/doc/000a02f2c5026891650e7f40351c01) + * + * ## 申请开通 + * 暂只针对如下类目的小程序开放,需要先通过类目审核,再在小程序管理后台,「开发」-「开发管理」-「接口设置」中自助开通该接口权限。从2022年7月14日开始,在代码审核环节将检测该接口是否已完成开通,如未开通,将在代码提审环节进行拦截。 + * + * ### 国内主体开放类目 + * + * | 一级类目/主体类型 | 二级类目 | 应用场景 | + * | -------------- | -------| -------- | + * | 电商平台 | / | 在小程序内提供线下商超导览、导航服务 | + * | 商家自营 | / | 在小程序内提供线下商超导览、导航服务 | + * | 交通服务 | / | 代驾服务、打车出行、城市共享交通、实时导航服务等 | + * | 生活服务 | 跑腿、共享服务 | 含有B端小程序配送服务,基于地理位置共享工具类服务 | + * | 物流服务 | 收件/派件、查件、邮政、装卸搬运、快递柜、货物运输 | 提供B端小程序快递/货物收发服务 | + * | 餐饮服务 | 点餐平台、外卖平台 | 提供B端小程序餐饮配送服务、线下门店实时导航 | + * | 工具 | 健康管理 | 基于实时地理位置提供身体管理记录等服务 | + * | 旅游 | 景区服务、住宿服务 | 在小程序内提供景区导航、导览服务、酒店导航服务 | + * | 政务民生 | / | 提供政务单位相关业务 | + * | 政府主体帐号 | / | 提供政务单位相关业务 | + * + * ### 海外主体开放类目 + * | 一级类目/主体类型 | 二级类目 | 应用场景 | + * | -------------- | -------| -------- | + * | 交通服务 | / | 代驾服务、打车出行、城市共享交通、实时导航服务等 | + * | 生活服务 | 家政、外送 | 含有B端小程序配送服务,基于地理位置导航上门服务 | + * | 快递业与邮政 | / | 提供B端小程序快递/货物收发服务 | + * | 餐饮服务 | 外卖点餐 | 提供B端小程序餐饮配送服务、线下门店实时导航 | + * | 电商平台 | / | 在小程序内提供线下商超导览、导航服务 | + * | 跨境电商 | / | 在小程序内提供线下商超导览、导航服务 | + * | 本地服务 | 服装/鞋/箱包、玩具、家电/数码/手机、美妆/洗护、珠宝/饰品/眼镜/钟表、运动/户外/乐器、鲜花/园艺/工艺品、家居/家饰/家纺、办公/文具、机械/电子器件、酒、食品、百货/超市/便利店、宠物食品/用品 | 在小程序内提供线下商超导览、导航服务 | + * + * **注意** + * + * - 安卓微信7.0.6版本,iOS 7.0.5版本起支持该接口 + * - 需在app.json中配置requiredBackgroundModes: ['location']后使用 + * - 获取位置信息需配置[地理位置用途说明](https://developers.weixin.qq.com/miniprogram/dev/reference/configuration/app.html#permission)。 */ + startLocationUpdateBackground< + T extends StartLocationUpdateBackgroundOption = StartLocationUpdateBackgroundOption + >( + option: T + ): PromisifySuccessResult<T, StartLocationUpdateBackgroundOption> + /** [wx.startPullDownRefresh(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/pull-down-refresh/wx.startPullDownRefresh.html) +* +* 需要基础库: `1.5.0` +* +* 在插件中使用:需要基础库 `2.1.0` +* +* 在插件中使用时,只能在当前插件的页面中调用 +* +* 开始下拉刷新。调用后触发下拉刷新动画,效果与用户手动下拉刷新一致。 +* +* **示例代码** +* +* ```js +wx.startPullDownRefresh() +``` */ + startPullDownRefresh< + T extends StartPullDownRefreshOption = StartPullDownRefreshOption + >( + option?: T + ): PromisifySuccessResult<T, StartPullDownRefreshOption> + /** [wx.startRecord(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/recorder/wx.startRecord.html) +* +* 在插件中使用:需要基础库 `1.9.6` +* @deprecated 基础库版本 [1.6.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [wx.getRecorderManager](https://developers.weixin.qq.com/miniprogram/dev/api/media/recorder/wx.getRecorderManager.html) 替换 +* +* 开始录音。当主动调用 [wx.stopRecord](https://developers.weixin.qq.com/miniprogram/dev/api/media/recorder/wx.stopRecord.html),或者录音超过1分钟时自动结束录音。当用户离开小程序时,此接口无法调用。 +* +* **示例代码** +* +* ```js +wx.startRecord({ + success (res) { + const tempFilePath = res.tempFilePath + } +}) +setTimeout(function () { + wx.stopRecord() // 结束录音 +}, 10000) +``` */ + startRecord<T extends WxStartRecordOption = WxStartRecordOption>( + option?: T + ): PromisifySuccessResult<T, WxStartRecordOption> + /** [wx.startSoterAuthentication(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/soter/wx.startSoterAuthentication.html) +* +* 需要基础库: `1.5.0` +* +* 在插件中使用:不支持 +* +* 开始 SOTER 生物认证。验证流程请参考[说明](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/bio-auth.html)。 +* +* **resultJSON 说明** +* +* 此数据为设备TEE中,将传入的challenge和TEE内其他安全信息组成的数据进行组装而来的JSON,对下述字段的解释如下表。例子如下: +* | 字段名 | 说明 | +* |---------|-------------------------------------------------------------------------------------------| +* | raw | 调用者传入的challenge | +* | fid | (仅Android支持)本次生物识别认证的生物信息编号(如指纹识别则是指纹信息在本设备内部编号) | +* | counter | 防重放特征参数 | +* | tee_n | TEE名称(如高通或者trustonic等) | +* | tee_v | TEE版本号 | +* | fp_n | 指纹以及相关逻辑模块提供商(如FPC等) | +* | fp_v | 指纹以及相关模块版本号 | +* | cpu_id | 机器唯一识别ID | +* | uid | 概念同Android系统定义uid,即应用程序编号 | +* +* ```json +{ + "raw":"msg", + "fid":"2", + "counter":123, + "tee_n":"TEE Name", + "tee_v":"TEE Version", + "fp_n":"Fingerprint Sensor Name", + "fp_v":"Fingerprint Sensor Version", + "cpu_id":"CPU Id", + "uid":"21" +} +``` +* +* **示例代码** +* +* [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/q3tCKkmJ7g2e) +* ```js +wx.startSoterAuthentication({ + requestAuthModes: ['fingerPrint'], + challenge: '123456', + authContent: '请用指纹解锁', + success(res) { + } +}) +``` */ + startSoterAuthentication< + T extends StartSoterAuthenticationOption = StartSoterAuthenticationOption + >( + option: T + ): PromisifySuccessResult<T, StartSoterAuthenticationOption> + /** [wx.startWifi(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/wifi/wx.startWifi.html) +* +* 需要基础库: `1.6.0` +* +* 在插件中使用:需要基础库 `2.9.1` +* +* 初始化 Wi-Fi 模块。 +* +* **示例代码** +* +* [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/8P7zrkmd7r2n) +* ```js +wx.startWifi({ + success (res) { + console.log(res.errMsg) + } +}) +``` */ + startWifi<T extends StartWifiOption = StartWifiOption>( + option?: T + ): PromisifySuccessResult<T, StartWifiOption> + /** [wx.stopAccelerometer(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/accelerometer/wx.stopAccelerometer.html) +* +* 需要基础库: `1.1.0` +* +* 在插件中使用:需要基础库 `1.9.6` +* +* 停止监听加速度数据。 +* +* **示例代码** +* +* ```js +wx.stopAccelerometer() +``` */ + stopAccelerometer< + T extends StopAccelerometerOption = StopAccelerometerOption + >( + option?: T + ): PromisifySuccessResult<T, StopAccelerometerOption> + /** [wx.stopBackgroundAudio(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/wx.stopBackgroundAudio.html) +* +* 在插件中使用:需要基础库 `1.9.6` +* @deprecated 基础库版本 [1.2.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [wx.getBackgroundAudioManager](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/wx.getBackgroundAudioManager.html) 替换 +* +* 停止播放音乐。 +* +* **示例代码** +* +* ```js +wx.stopBackgroundAudio() +``` */ + stopBackgroundAudio< + T extends StopBackgroundAudioOption = StopBackgroundAudioOption + >( + option?: T + ): PromisifySuccessResult<T, StopBackgroundAudioOption> + /** [wx.stopBeaconDiscovery(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/ibeacon/wx.stopBeaconDiscovery.html) + * + * 需要基础库: `1.2.0` + * + * 在插件中使用:需要基础库 `1.9.6` + * + * 停止搜索附近的 Beacon 设备 */ + stopBeaconDiscovery< + T extends StopBeaconDiscoveryOption = StopBeaconDiscoveryOption + >( + option?: T + ): PromisifySuccessResult<T, StopBeaconDiscoveryOption> + /** [wx.stopBluetoothDevicesDiscovery(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth/wx.stopBluetoothDevicesDiscovery.html) +* +* 需要基础库: `1.1.0` +* +* 在插件中使用:需要基础库 `1.9.6` +* +* 停止搜寻附近的蓝牙外围设备。若已经找到需要的蓝牙设备并不需要继续搜索时,建议调用该接口停止蓝牙搜索。 +* +* **示例代码** +* +* [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/pQU51zmz7a3K) +* ```js +wx.stopBluetoothDevicesDiscovery({ + success (res) { + console.log(res) + } +}) +``` */ + stopBluetoothDevicesDiscovery< + T extends StopBluetoothDevicesDiscoveryOption = StopBluetoothDevicesDiscoveryOption + >( + option?: T + ): PromisifySuccessResult<T, StopBluetoothDevicesDiscoveryOption> + /** [wx.stopCompass(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/compass/wx.stopCompass.html) +* +* 需要基础库: `1.1.0` +* +* 在插件中使用:需要基础库 `1.9.6` +* +* 停止监听罗盘数据 +* +* **示例代码** +* +* ```js +wx.stopCompass() +``` */ + stopCompass<T extends StopCompassOption = StopCompassOption>( + option?: T + ): PromisifySuccessResult<T, StopCompassOption> + /** [wx.stopDeviceMotionListening(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/motion/wx.stopDeviceMotionListening.html) + * + * 需要基础库: `2.3.0` + * + * 在插件中使用:需要基础库 `2.9.1` + * + * 停止监听设备方向的变化。 */ + stopDeviceMotionListening< + T extends StopDeviceMotionListeningOption = StopDeviceMotionListeningOption + >( + option?: T + ): PromisifySuccessResult<T, StopDeviceMotionListeningOption> + /** [wx.stopFaceDetect(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ai/face/wx.stopFaceDetect.html) + * + * 需要基础库: `2.18.0` + * + * 在插件中使用:需要基础库 `2.21.3` + * @deprecated 基础库版本 [2.25.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃 + * + * 停止人脸检测。本接口不再维护,请使用 [wx.createVKSession](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/wx.createVKSession.html) 接口代替。详情参考[人脸检测指南文档](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/visionkit/face.html) */ + stopFaceDetect(option?: StopFaceDetectOption): void + /** [wx.stopGyroscope(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/gyroscope/wx.stopGyroscope.html) + * + * 需要基础库: `2.3.0` + * + * 在插件中使用:需要基础库 `2.9.1` + * + * 停止监听陀螺仪数据。 */ + stopGyroscope<T extends StopGyroscopeOption = StopGyroscopeOption>( + option?: T + ): PromisifySuccessResult<T, StopGyroscopeOption> + /** [wx.stopHCE(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc-hce/wx.stopHCE.html) +* +* 需要基础库: `1.7.0` +* +* 在插件中使用:需要基础库 `2.1.0` +* +* 关闭 NFC 模块。仅在安卓系统下有效。 +* +* **示例代码** +* +* ```js +wx.stopHCE({ + success (res) { + console.log(res.errMsg) + } +}) +``` */ + stopHCE<T extends StopHCEOption = StopHCEOption>( + option?: T + ): PromisifySuccessResult<T, StopHCEOption> + /** [wx.stopLocalServiceDiscovery(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/network/mdns/wx.stopLocalServiceDiscovery.html) + * + * 需要基础库: `2.4.0` + * + * 在插件中使用:需要基础库 `2.15.0` + * + * 停止搜索 mDNS 服务 */ + stopLocalServiceDiscovery< + T extends StopLocalServiceDiscoveryOption = StopLocalServiceDiscoveryOption + >( + option?: T + ): PromisifySuccessResult<T, StopLocalServiceDiscoveryOption> + /** [wx.stopLocationUpdate(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/location/wx.stopLocationUpdate.html) + * + * 需要基础库: `2.8.0` + * + * 在插件中使用:需要基础库 `2.8.0` + * + * 关闭监听实时位置变化,前后台都停止消息接收 */ + stopLocationUpdate< + T extends StopLocationUpdateOption = StopLocationUpdateOption + >( + option?: T + ): PromisifySuccessResult<T, StopLocationUpdateOption> + /** [wx.stopPullDownRefresh(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/pull-down-refresh/wx.stopPullDownRefresh.html) +* +* 需要基础库: `1.5.0` +* +* 在插件中使用:需要基础库 `2.1.0` +* +* 在插件中使用时,只能在当前插件的页面中调用 +* +* 停止当前页面下拉刷新。 +* +* **示例代码** +* +* ```js +Page({ + onPullDownRefresh () { + wx.stopPullDownRefresh() + } +}) +``` */ + stopPullDownRefresh< + T extends StopPullDownRefreshOption = StopPullDownRefreshOption + >( + option?: T + ): PromisifySuccessResult<T, StopPullDownRefreshOption> + /** [wx.stopRecord(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/recorder/wx.stopRecord.html) +* +* 在插件中使用:需要基础库 `1.9.6` +* @deprecated 基础库版本 [1.6.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [wx.getRecorderManager](https://developers.weixin.qq.com/miniprogram/dev/api/media/recorder/wx.getRecorderManager.html) 替换 +* +* 停止录音。 +* +* **示例代码** +* +* ```js +wx.startRecord({ + success (res) { + const tempFilePath = res.tempFilePath + } +}) +setTimeout(function () { + wx.stopRecord() // 结束录音 +}, 10000) +``` */ + stopRecord<T extends WxStopRecordOption = WxStopRecordOption>( + option?: T + ): PromisifySuccessResult<T, WxStopRecordOption> + /** [wx.stopVoice(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/wx.stopVoice.html) +* +* 在插件中使用:需要基础库 `1.9.6` +* @deprecated 基础库版本 [1.6.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [wx.createInnerAudioContext](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/wx.createInnerAudioContext.html) 替换 +* +* 结束播放语音。 +* +* **示例代码** +* +* ```js +wx.startRecord({ + success (res) { + const tempFilePath = res.tempFilePath + wx.playVoice({ + filePath: tempFilePath, + }) + + setTimeout(() => { wx.stopVoice() }, 5000) + } +}) +``` */ + stopVoice<T extends StopVoiceOption = StopVoiceOption>( + option?: T + ): PromisifySuccessResult<T, StopVoiceOption> + /** [wx.stopWifi(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/wifi/wx.stopWifi.html) +* +* 需要基础库: `1.6.0` +* +* 在插件中使用:需要基础库 `2.9.1` +* +* 关闭 Wi-Fi 模块。 +* +* **示例代码** +* +* ```js +wx.stopWifi({ + success (res) { + console.log(res.errMsg) + } +}) +``` */ + stopWifi<T extends StopWifiOption = StopWifiOption>( + option?: T + ): PromisifySuccessResult<T, StopWifiOption> + /** [wx.subscribeVoIPVideoMembers(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/voip/wx.subscribeVoIPVideoMembers.html) + * + * 需要基础库: `2.11.0` + * + * 在插件中使用:需要基础库 `2.11.0` + * + * 订阅视频画面成员。对于视频房间,当成员超过两人时需进行订阅,否则只能看到最先加入房间的两人画面。 */ + subscribeVoIPVideoMembers< + T extends SubscribeVoIPVideoMembersOption = SubscribeVoIPVideoMembersOption + >( + option: T + ): PromisifySuccessResult<T, SubscribeVoIPVideoMembersOption> + /** [wx.switchTab(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/route/wx.switchTab.html) +* +* 在插件中使用:需要基础库 `2.3.1` +* +* 在插件中使用时,只能在当前插件的页面中调用 +* +* 跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面 +* +* **示例代码** +* +* ```json +// app.json +{ + "tabBar": { + "list": [{ + "pagePath": "index", + "text": "首页" + },{ + "pagePath": "other", + "text": "其他" + }] + } +} +``` +* +* ```js +wx.switchTab({ + url: '/index' +}) +``` */ + switchTab<T extends SwitchTabOption = SwitchTabOption>( + option: T + ): PromisifySuccessResult<T, SwitchTabOption> + /** [wx.updateShareMenu(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/share/wx.updateShareMenu.html) +* +* 需要基础库: `1.2.0` +* +* 在插件中使用:需要基础库 `2.1.0` +* +* 在插件中使用时,只能在当前插件的页面中调用 +* +* 更新转发属性 +* +* **示例代码** +* +* ```js +wx.updateShareMenu({ + withShareTicket: true, + success () { } +}) +``` +* ```js +// 转发私密消息 +wx.updateShareMenu({ + isPrivateMessage: true, + activityId: 'xxx', + templateInfo: {}, + success () { }, + fail () {} +}) +``` */ + updateShareMenu< + T extends UpdateShareMenuOption = UpdateShareMenuOption + >( + option: T + ): PromisifySuccessResult<T, UpdateShareMenuOption> + /** [wx.updateVoIPChatMuteConfig(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/voip/wx.updateVoIPChatMuteConfig.html) + * + * 需要基础库: `2.7.0` + * + * 在插件中使用:需要基础库 `2.9.0` + * + * 更新实时语音静音设置 */ + updateVoIPChatMuteConfig< + T extends UpdateVoIPChatMuteConfigOption = UpdateVoIPChatMuteConfigOption + >( + option: T + ): PromisifySuccessResult<T, UpdateVoIPChatMuteConfigOption> + /** [wx.updateWeChatApp(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/base/update/wx.updateWeChatApp.html) + * + * 需要基础库: `2.12.0` + * + * 在插件中使用:需要基础库 `2.12.0` + * + * 更新客户端版本。当判断用户小程序所在客户端版本过低时,可使用该接口跳转到更新微信页面。 */ + updateWeChatApp< + T extends UpdateWeChatAppOption = UpdateWeChatAppOption + >( + option?: T + ): PromisifySuccessResult<T, UpdateWeChatAppOption> + /** [wx.vibrateLong(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/vibrate/wx.vibrateLong.html) + * + * 需要基础库: `1.2.0` + * + * 在插件中使用:需要基础库 `1.9.6` + * + * 使手机发生较长时间的振动(400 ms) */ + vibrateLong<T extends VibrateLongOption = VibrateLongOption>( + option?: T + ): PromisifySuccessResult<T, VibrateLongOption> + /** [wx.vibrateShort(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/vibrate/wx.vibrateShort.html) + * + * 需要基础库: `1.2.0` + * + * 在插件中使用:需要基础库 `1.9.6` + * + * 使手机发生较短时间的振动(15 ms)。仅在 iPhone `7 / 7 Plus` 以上及 Android 机型生效 */ + vibrateShort<T extends VibrateShortOption = VibrateShortOption>( + option: T + ): PromisifySuccessResult<T, VibrateShortOption> + /** [wx.writeBLECharacteristicValue(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.writeBLECharacteristicValue.html) +* +* 需要基础库: `1.1.0` +* +* 在插件中使用:需要基础库 `1.9.6` +* +* 向蓝牙低功耗设备特征值中写入二进制数据。注意:必须设备的特征支持 write 才可以成功调用。 +* +* **注意** +* +* - 并行调用多次会存在写失败的可能性。 +* - 小程序不会对写入数据包大小做限制,但系统与蓝牙设备会限制蓝牙 4.0 单次传输的数据大小,超过最大字节数后会发生写入错误,建议每次写入不超过 20 字节。 +* - 若单次写入数据过长,iOS 上存在系统不会有任何回调的情况(包括错误回调)。 +* - 安卓平台上,在调用 [wx.notifyBLECharacteristicValueChange](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.notifyBLECharacteristicValueChange.html) 成功后立即调用本接口,在部分机型上会发生 10008 系统错误 +* +* **示例代码** +* +* [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/pQU51zmz7a3K) +* ```js +// 向蓝牙设备发送一个0x00的16进制数据 +let buffer = new ArrayBuffer(1) +let dataView = new DataView(buffer) +dataView.setUint8(0, 0) + +wx.writeBLECharacteristicValue({ + // 这里的 deviceId 需要在 getBluetoothDevices 或 onBluetoothDeviceFound 接口中获取 + deviceId, + // 这里的 serviceId 需要在 getBLEDeviceServices 接口中获取 + serviceId, + // 这里的 characteristicId 需要在 getBLEDeviceCharacteristics 接口中获取 + characteristicId, + // 这里的value是ArrayBuffer类型 + value: buffer, + success (res) { + console.log('writeBLECharacteristicValue success', res.errMsg) + } +}) +``` */ + writeBLECharacteristicValue< + T extends WriteBLECharacteristicValueOption = WriteBLECharacteristicValueOption + >( + option: T + ): PromisifySuccessResult<T, WriteBLECharacteristicValueOption> + /** 小程序云开发 */ + cloud: WxCloud + /** 文件系统中的用户目录路径 */ + env: { USER_DATA_PATH: string } + } + + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type AccessCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type AccessFailCallback = (result: AccessFailCallbackResult) => void + /** 接口调用成功的回调函数 */ + type AccessSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type AddArcCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type AddArcFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type AddArcSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type AddCardCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type AddCardFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type AddCardSuccessCallback = (result: AddCardSuccessCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type AddCustomLayerCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type AddCustomLayerFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type AddCustomLayerSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type AddFileToFavoritesCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type AddFileToFavoritesFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type AddFileToFavoritesSuccessCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type AddGroundOverlayCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type AddGroundOverlayFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type AddGroundOverlaySuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type AddMarkersCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type AddMarkersFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type AddMarkersSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type AddPhoneCalendarCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type AddPhoneCalendarFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type AddPhoneCalendarSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type AddPhoneContactCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type AddPhoneContactFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type AddPhoneContactSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type AddPhoneRepeatCalendarCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type AddPhoneRepeatCalendarFailCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用成功的回调函数 */ + type AddPhoneRepeatCalendarSuccessCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type AddServiceCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type AddServiceFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type AddServiceSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type AddVideoToFavoritesCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type AddVideoToFavoritesFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type AddVideoToFavoritesSuccessCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type AddVisualLayerCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type AddVisualLayerFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type AddVisualLayerSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type AppendFileCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type AppendFileFailCallback = (result: AppendFileFailCallbackResult) => void + /** 接口调用成功的回调函数 */ + type AppendFileSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type AuthPrivateMessageCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type AuthPrivateMessageFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type AuthPrivateMessageSuccessCallback = ( + result: AuthPrivateMessageSuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type AuthorizeCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type AuthorizeFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type AuthorizeForMiniProgramCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type AuthorizeForMiniProgramFailCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用成功的回调函数 */ + type AuthorizeForMiniProgramSuccessCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用成功的回调函数 */ + type AuthorizeSuccessCallback = (res: GeneralCallbackResult) => void + /** 背景音频播放错误事件的监听函数 */ + type BackgroundAudioManagerOnErrorCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type BatchGetStorageCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type BatchGetStorageFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type BatchGetStorageSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type BatchSetStorageCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type BatchSetStorageFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type BatchSetStorageSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type BlurCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type BlurFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type BlurSuccessCallback = (res: GeneralCallbackResult) => void + /** 回调函数,在执行 `SelectorQuery.exec` 方法后,节点信息会在 `callback` 中返回。 */ + type BoundingClientRectCallback = ( + result: BoundingClientRectCallbackResult + ) => void + /** 接口调用成功的回调函数 */ + type CameraContextStartRecordSuccessCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用成功的回调函数 */ + type CameraContextStopRecordSuccessCallback = ( + result: StopRecordSuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type CanvasGetImageDataCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type CanvasGetImageDataFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type CanvasGetImageDataSuccessCallback = ( + result: CanvasGetImageDataSuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type CanvasPutImageDataCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type CanvasPutImageDataFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type CanvasPutImageDataSuccessCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type CanvasToTempFilePathCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type CanvasToTempFilePathFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type CanvasToTempFilePathSuccessCallback = ( + result: CanvasToTempFilePathSuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type CheckIsOpenAccessibilityCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type CheckIsOpenAccessibilityFailCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用成功的回调函数 */ + type CheckIsOpenAccessibilitySuccessCallback = ( + option: CheckIsOpenAccessibilitySuccessCallbackOption + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type CheckIsSoterEnrolledInDeviceCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type CheckIsSoterEnrolledInDeviceFailCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用成功的回调函数 */ + type CheckIsSoterEnrolledInDeviceSuccessCallback = ( + result: CheckIsSoterEnrolledInDeviceSuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type CheckIsSupportSoterAuthenticationCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type CheckIsSupportSoterAuthenticationFailCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用成功的回调函数 */ + type CheckIsSupportSoterAuthenticationSuccessCallback = ( + result: CheckIsSupportSoterAuthenticationSuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type CheckSessionCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type CheckSessionFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type CheckSessionSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type ChooseAddressCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type ChooseAddressFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type ChooseAddressSuccessCallback = ( + result: ChooseAddressSuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type ChooseContactCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type ChooseContactFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type ChooseContactSuccessCallback = ( + option: ChooseContactSuccessCallbackOption + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type ChooseImageCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type ChooseImageFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type ChooseImageSuccessCallback = ( + result: ChooseImageSuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type ChooseInvoiceCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type ChooseInvoiceFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type ChooseInvoiceSuccessCallback = ( + result: ChooseInvoiceSuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type ChooseInvoiceTitleCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type ChooseInvoiceTitleFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type ChooseInvoiceTitleSuccessCallback = ( + result: ChooseInvoiceTitleSuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type ChooseLicensePlateCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type ChooseLicensePlateFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type ChooseLicensePlateSuccessCallback = ( + result: ChooseLicensePlateSuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type ChooseLocationCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type ChooseLocationFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type ChooseLocationSuccessCallback = ( + result: ChooseLocationSuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type ChooseMediaCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type ChooseMediaFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type ChooseMediaSuccessCallback = ( + result: ChooseMediaSuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type ChooseMessageFileCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type ChooseMessageFileFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type ChooseMessageFileSuccessCallback = ( + result: ChooseMessageFileSuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type ChoosePoiCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type ChoosePoiFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type ChoosePoiSuccessCallback = ( + result: ChoosePoiSuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type ChooseVideoCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type ChooseVideoFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type ChooseVideoSuccessCallback = ( + result: ChooseVideoSuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type ClearCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type ClearFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type ClearStorageCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type ClearStorageFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type ClearStorageSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type ClearSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type CloseBLEConnectionCompleteCallback = (res: BluetoothError) => void + /** 接口调用失败的回调函数 */ + type CloseBLEConnectionFailCallback = (res: BluetoothError) => void + /** 接口调用成功的回调函数 */ + type CloseBLEConnectionSuccessCallback = (res: BluetoothError) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type CloseBluetoothAdapterCompleteCallback = (res: BluetoothError) => void + /** 接口调用失败的回调函数 */ + type CloseBluetoothAdapterFailCallback = (res: BluetoothError) => void + /** 接口调用成功的回调函数 */ + type CloseBluetoothAdapterSuccessCallback = (res: BluetoothError) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type CloseSocketCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type CloseSocketFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type CloseSocketSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type CompressImageCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type CompressImageFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type CompressImageSuccessCallback = ( + result: CompressImageSuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type CompressVideoCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type CompressVideoFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type CompressVideoSuccessCallback = ( + result: CompressVideoSuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type ConnectCompleteCallback = (res: Nfcrwerror) => void + /** 接口调用失败的回调函数 */ + type ConnectFailCallback = (res: Nfcrwerror) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type ConnectSocketCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type ConnectSocketFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type ConnectSocketSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type ConnectSuccessCallback = (res: Nfcrwerror) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type ConnectWifiCompleteCallback = (res: WifiError) => void + /** 接口调用失败的回调函数 */ + type ConnectWifiFailCallback = (res: WifiError) => void + /** 接口调用成功的回调函数 */ + type ConnectWifiSuccessCallback = (res: WifiError) => void + /** 回调函数,在执行 `SelectorQuery.exec` 方法后,返回节点信息。 */ + type ContextCallback = (result: ContextCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type CopyFileCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type CopyFileFailCallback = (result: CopyFileFailCallbackResult) => void + /** 接口调用成功的回调函数 */ + type CopyFileSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type CreateBLEConnectionCompleteCallback = (res: BluetoothError) => void + /** 接口调用失败的回调函数 */ + type CreateBLEConnectionFailCallback = (res: BluetoothError) => void + /** 接口调用成功的回调函数 */ + type CreateBLEConnectionSuccessCallback = (res: BluetoothError) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type CreateBLEPeripheralServerCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type CreateBLEPeripheralServerFailCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用成功的回调函数 */ + type CreateBLEPeripheralServerSuccessCallback = ( + result: CreateBLEPeripheralServerSuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type DisableAlertBeforeUnloadCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type DisableAlertBeforeUnloadFailCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用成功的回调函数 */ + type DisableAlertBeforeUnloadSuccessCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type DownloadFileCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type DownloadFileFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type DownloadFileSuccessCallback = ( + result: DownloadFileSuccessCallbackResult + ) => void + /** onProgressUpdate 传入的监听函数。不传此参数则移除所有监听函数。 */ + type DownloadTaskOffProgressUpdateCallback = ( + result: DownloadTaskOnProgressUpdateListenerResult + ) => void + /** 下载进度变化事件的监听函数 */ + type DownloadTaskOnProgressUpdateCallback = ( + result: DownloadTaskOnProgressUpdateListenerResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type EditImageCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type EditImageFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type EditImageSuccessCallback = ( + result: EditImageSuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type EnableAlertBeforeUnloadCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type EnableAlertBeforeUnloadFailCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用成功的回调函数 */ + type EnableAlertBeforeUnloadSuccessCallback = ( + res: GeneralCallbackResult + ) => void + /** 事件监听函数 */ + type EventCallback = ( + /** 触发事件参数 */ + ...args: any + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type ExitFullScreenCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type ExitFullScreenFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type ExitFullScreenSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type ExitMiniProgramCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type ExitMiniProgramFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type ExitMiniProgramSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type ExitPictureInPictureCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type ExitPictureInPictureFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type ExitPictureInPictureSuccessCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type ExitVoIPChatCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type ExitVoIPChatFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type ExitVoIPChatSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type FaceDetectCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type FaceDetectFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type FaceDetectSuccessCallback = ( + result: FaceDetectSuccessCallbackResult + ) => void + /** 回调函数 */ + type FieldsCallback = ( + /** 节点的相关信息 */ + res: IAnyObject + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type FileSystemManagerCloseCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type FileSystemManagerCloseFailCallback = ( + result: CloseFailCallbackResult + ) => void + /** 接口调用成功的回调函数 */ + type FileSystemManagerCloseSuccessCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type FileSystemManagerGetFileInfoFailCallback = ( + result: GetFileInfoFailCallbackResult + ) => void + /** 接口调用成功的回调函数 */ + type FileSystemManagerGetFileInfoSuccessCallback = ( + result: FileSystemManagerGetFileInfoSuccessCallbackResult + ) => void + /** 接口调用成功的回调函数 */ + type FileSystemManagerGetSavedFileListSuccessCallback = ( + result: FileSystemManagerGetSavedFileListSuccessCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type FileSystemManagerRemoveSavedFileFailCallback = ( + result: RemoveSavedFileFailCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type FileSystemManagerSaveFileFailCallback = ( + result: SaveFileFailCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type FromScreenLocationCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type FromScreenLocationFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type FromScreenLocationSuccessCallback = ( + result: GetCenterLocationSuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type FstatCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type FstatFailCallback = (result: FstatFailCallbackResult) => void + /** 接口调用成功的回调函数 */ + type FstatSuccessCallback = (result: FstatSuccessCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type FtruncateCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type FtruncateFailCallback = (result: FtruncateFailCallbackResult) => void + /** 接口调用成功的回调函数 */ + type FtruncateSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type GetAtqaCompleteCallback = (res: Nfcrwerror) => void + /** 接口调用失败的回调函数 */ + type GetAtqaFailCallback = (res: Nfcrwerror) => void + /** 接口调用成功的回调函数 */ + type GetAtqaSuccessCallback = (result: GetAtqaSuccessCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type GetAvailableAudioSourcesCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type GetAvailableAudioSourcesFailCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用成功的回调函数 */ + type GetAvailableAudioSourcesSuccessCallback = ( + result: GetAvailableAudioSourcesSuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type GetBLEDeviceCharacteristicsCompleteCallback = ( + res: BluetoothError + ) => void + /** 接口调用失败的回调函数 */ + type GetBLEDeviceCharacteristicsFailCallback = (res: BluetoothError) => void + /** 接口调用成功的回调函数 */ + type GetBLEDeviceCharacteristicsSuccessCallback = ( + result: GetBLEDeviceCharacteristicsSuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type GetBLEDeviceRSSICompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type GetBLEDeviceRSSIFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type GetBLEDeviceRSSISuccessCallback = ( + result: GetBLEDeviceRSSISuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type GetBLEDeviceServicesCompleteCallback = (res: BluetoothError) => void + /** 接口调用失败的回调函数 */ + type GetBLEDeviceServicesFailCallback = (res: BluetoothError) => void + /** 接口调用成功的回调函数 */ + type GetBLEDeviceServicesSuccessCallback = ( + result: GetBLEDeviceServicesSuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type GetBLEMTUCompleteCallback = (res: BluetoothError) => void + /** 接口调用失败的回调函数 */ + type GetBLEMTUFailCallback = (res: BluetoothError) => void + /** 接口调用成功的回调函数 */ + type GetBLEMTUSuccessCallback = ( + result: GetBLEMTUSuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type GetBackgroundAudioPlayerStateCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type GetBackgroundAudioPlayerStateFailCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用成功的回调函数 */ + type GetBackgroundAudioPlayerStateSuccessCallback = ( + result: GetBackgroundAudioPlayerStateSuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type GetBackgroundFetchDataCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type GetBackgroundFetchDataFailCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用成功的回调函数 */ + type GetBackgroundFetchDataSuccessCallback = ( + result: GetBackgroundFetchDataSuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type GetBackgroundFetchTokenCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type GetBackgroundFetchTokenFailCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用成功的回调函数 */ + type GetBackgroundFetchTokenSuccessCallback = ( + result: GetBackgroundFetchTokenSuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type GetBatteryInfoCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type GetBatteryInfoFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type GetBatteryInfoSuccessCallback = ( + result: GetBatteryInfoSuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type GetBeaconsCompleteCallback = (res: BeaconError) => void + /** 接口调用失败的回调函数 */ + type GetBeaconsFailCallback = (res: BeaconError) => void + /** 接口调用成功的回调函数 */ + type GetBeaconsSuccessCallback = ( + result: GetBeaconsSuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type GetBluetoothAdapterStateCompleteCallback = ( + res: BluetoothError + ) => void + /** 接口调用失败的回调函数 */ + type GetBluetoothAdapterStateFailCallback = (res: BluetoothError) => void + /** 接口调用成功的回调函数 */ + type GetBluetoothAdapterStateSuccessCallback = ( + result: GetBluetoothAdapterStateSuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type GetBluetoothDevicesCompleteCallback = (res: BluetoothError) => void + /** 接口调用失败的回调函数 */ + type GetBluetoothDevicesFailCallback = (res: BluetoothError) => void + /** 接口调用成功的回调函数 */ + type GetBluetoothDevicesSuccessCallback = ( + result: GetBluetoothDevicesSuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type GetCenterLocationCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type GetCenterLocationFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type GetCenterLocationSuccessCallback = ( + result: GetCenterLocationSuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type GetChannelsLiveInfoCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type GetChannelsLiveInfoFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type GetChannelsLiveInfoSuccessCallback = ( + result: GetChannelsLiveInfoSuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type GetChannelsLiveNoticeInfoCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type GetChannelsLiveNoticeInfoFailCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用成功的回调函数 */ + type GetChannelsLiveNoticeInfoSuccessCallback = ( + result: GetChannelsLiveNoticeInfoSuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type GetChannelsShareKeyCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type GetChannelsShareKeyFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type GetChannelsShareKeySuccessCallback = ( + result: GetChannelsShareKeySuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type GetClipboardDataCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type GetClipboardDataFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type GetClipboardDataSuccessCallback = ( + option: GetClipboardDataSuccessCallbackOption + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type GetConnectedBluetoothDevicesCompleteCallback = ( + res: BluetoothError + ) => void + /** 接口调用失败的回调函数 */ + type GetConnectedBluetoothDevicesFailCallback = ( + res: BluetoothError + ) => void + /** 接口调用成功的回调函数 */ + type GetConnectedBluetoothDevicesSuccessCallback = ( + result: GetConnectedBluetoothDevicesSuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type GetConnectedWifiCompleteCallback = (res: WifiError) => void + /** 接口调用失败的回调函数 */ + type GetConnectedWifiFailCallback = (res: WifiError) => void + /** 接口调用成功的回调函数 */ + type GetConnectedWifiSuccessCallback = ( + result: GetConnectedWifiSuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type GetContentsCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type GetContentsFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type GetContentsSuccessCallback = ( + result: GetContentsSuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type GetExtConfigCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type GetExtConfigFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type GetExtConfigSuccessCallback = ( + result: GetExtConfigSuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type GetFileInfoCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type GetFuzzyLocationCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type GetFuzzyLocationFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type GetFuzzyLocationSuccessCallback = ( + result: GetFuzzyLocationSuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type GetGroupEnterInfoCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type GetGroupEnterInfoFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type GetGroupEnterInfoSuccessCallback = ( + result: GetGroupEnterInfoSuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type GetHCEStateCompleteCallback = (res: NFCError) => void + /** 接口调用失败的回调函数 */ + type GetHCEStateFailCallback = (res: NFCError) => void + /** 接口调用成功的回调函数 */ + type GetHCEStateSuccessCallback = (res: NFCError) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type GetHistoricalBytesCompleteCallback = (res: Nfcrwerror) => void + /** 接口调用失败的回调函数 */ + type GetHistoricalBytesFailCallback = (res: Nfcrwerror) => void + /** 接口调用成功的回调函数 */ + type GetHistoricalBytesSuccessCallback = ( + result: GetHistoricalBytesSuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type GetImageInfoCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type GetImageInfoFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type GetImageInfoSuccessCallback = ( + result: GetImageInfoSuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type GetLatestUserKeyCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type GetLatestUserKeyFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type GetLatestUserKeySuccessCallback = ( + result: GetLatestUserKeySuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type GetLocalIPAddressCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type GetLocalIPAddressFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type GetLocalIPAddressSuccessCallback = ( + result: GetLocalIPAddressSuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type GetLocationCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type GetLocationFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type GetLocationSuccessCallback = ( + result: GetLocationSuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type GetMaxTransceiveLengthCompleteCallback = (res: Nfcrwerror) => void + /** 接口调用失败的回调函数 */ + type GetMaxTransceiveLengthFailCallback = (res: Nfcrwerror) => void + /** 接口调用成功的回调函数 */ + type GetMaxTransceiveLengthSuccessCallback = ( + result: GetMaxTransceiveLengthSuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type GetNetworkTypeCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type GetNetworkTypeFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type GetNetworkTypeSuccessCallback = ( + result: GetNetworkTypeSuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type GetRandomValuesCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type GetRandomValuesFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type GetRandomValuesSuccessCallback = ( + result: GetRandomValuesSuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type GetRegionCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type GetRegionFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type GetRegionSuccessCallback = ( + result: GetRegionSuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type GetRotateCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type GetRotateFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type GetRotateSuccessCallback = ( + result: GetRotateSuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type GetSakCompleteCallback = (res: Nfcrwerror) => void + /** 接口调用失败的回调函数 */ + type GetSakFailCallback = (res: Nfcrwerror) => void + /** 接口调用成功的回调函数 */ + type GetSakSuccessCallback = (result: GetSakSuccessCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type GetSavedFileInfoCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type GetSavedFileInfoFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type GetSavedFileInfoSuccessCallback = ( + result: GetSavedFileInfoSuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type GetSavedFileListCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type GetSavedFileListFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type GetScaleCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type GetScaleFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type GetScaleSuccessCallback = ( + result: GetScaleSuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type GetScreenBrightnessCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type GetScreenBrightnessFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type GetScreenBrightnessSuccessCallback = ( + option: GetScreenBrightnessSuccessCallbackOption + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type GetScreenRecordingStateCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type GetScreenRecordingStateFailCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用成功的回调函数 */ + type GetScreenRecordingStateSuccessCallback = ( + result: GetScreenRecordingStateSuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type GetSelectedTextRangeCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type GetSelectedTextRangeFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type GetSelectedTextRangeSuccessCallback = ( + result: GetSelectedTextRangeSuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type GetSelectionTextCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type GetSelectionTextFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type GetSelectionTextSuccessCallback = ( + result: GetSelectionTextSuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type GetSettingCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type GetSettingFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type GetSettingSuccessCallback = ( + result: GetSettingSuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type GetShareInfoCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type GetShareInfoFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type GetShareInfoSuccessCallback = ( + result: GetGroupEnterInfoSuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type GetSkewCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type GetSkewFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type GetSkewSuccessCallback = (result: GetSkewSuccessCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type GetStorageCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type GetStorageFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type GetStorageInfoCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type GetStorageInfoFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type GetStorageInfoSuccessCallback = ( + option: GetStorageInfoSuccessCallbackOption + ) => void + /** 接口调用成功的回调函数 */ + type GetStorageSuccessCallback<T = any> = ( + result: GetStorageSuccessCallbackResult<T> + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type GetSystemInfoAsyncCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type GetSystemInfoAsyncFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type GetSystemInfoAsyncSuccessCallback = (result: SystemInfo) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type GetSystemInfoCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type GetSystemInfoFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type GetSystemInfoSuccessCallback = (result: SystemInfo) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type GetUserInfoCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type GetUserInfoFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type GetUserInfoSuccessCallback = ( + result: GetUserInfoSuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type GetUserProfileCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type GetUserProfileFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type GetUserProfileSuccessCallback = ( + result: GetUserProfileSuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type GetVideoInfoCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type GetVideoInfoFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type GetVideoInfoSuccessCallback = ( + result: GetVideoInfoSuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type GetWeRunDataCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type GetWeRunDataFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type GetWeRunDataSuccessCallback = ( + result: GetWeRunDataSuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type GetWifiListCompleteCallback = (res: WifiError) => void + /** 接口调用失败的回调函数 */ + type GetWifiListFailCallback = (res: WifiError) => void + /** 接口调用成功的回调函数 */ + type GetWifiListSuccessCallback = (res: WifiError) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type HideHomeButtonCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type HideHomeButtonFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type HideHomeButtonSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type HideKeyboardCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type HideKeyboardFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type HideKeyboardSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type HideLoadingCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type HideLoadingFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type HideLoadingSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type HideNavigationBarLoadingCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type HideNavigationBarLoadingFailCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用成功的回调函数 */ + type HideNavigationBarLoadingSuccessCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type HideShareMenuCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type HideShareMenuFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type HideShareMenuSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type HideTabBarCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type HideTabBarFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type HideTabBarRedDotCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type HideTabBarRedDotFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type HideTabBarRedDotSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type HideTabBarSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type HideToastCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type HideToastFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type HideToastSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type IncludePointsCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type IncludePointsFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type IncludePointsSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type InitFaceDetectCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type InitFaceDetectFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type InitFaceDetectSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type InitMarkerClusterCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type InitMarkerClusterFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type InitMarkerClusterSuccessCallback = (res: GeneralCallbackResult) => void + /** onError 传入的监听函数。不传此参数则移除所有监听函数。 */ + type InnerAudioContextOffErrorCallback = ( + result: InnerAudioContextOnErrorListenerResult + ) => void + /** 音频播放错误事件的监听函数 */ + type InnerAudioContextOnErrorCallback = ( + result: InnerAudioContextOnErrorListenerResult + ) => void + type InnerAudioContextOnStopCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type InsertDividerCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type InsertDividerFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type InsertDividerSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type InsertImageCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type InsertImageFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type InsertImageSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type InsertTextCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type InsertTextFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type InsertTextSuccessCallback = (res: GeneralCallbackResult) => void + /** 监听相交状态变化的回调函数 */ + type IntersectionObserverObserveCallback = ( + result: IntersectionObserverObserveCallbackResult + ) => void + /** onError 传入的监听函数。不传此参数则移除所有监听函数。 */ + type InterstitialAdOffErrorCallback = ( + result: InterstitialAdOnErrorListenerResult + ) => void + /** 插屏错误事件的监听函数 */ + type InterstitialAdOnErrorCallback = ( + result: InterstitialAdOnErrorListenerResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type IsBluetoothDevicePairedCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type IsBluetoothDevicePairedFailCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用成功的回调函数 */ + type IsBluetoothDevicePairedSuccessCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type IsConnectedCompleteCallback = (res: Nfcrwerror) => void + /** 接口调用失败的回调函数 */ + type IsConnectedFailCallback = (res: Nfcrwerror) => void + /** 接口调用成功的回调函数 */ + type IsConnectedSuccessCallback = (res: Nfcrwerror) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type Join1v1ChatCompleteCallback = (res: Join1v1ChatError) => void + /** 接口调用失败的回调函数 */ + type Join1v1ChatFailCallback = (res: Join1v1ChatError) => void + /** 接口调用成功的回调函数 */ + type Join1v1ChatSuccessCallback = (res: Join1v1ChatError) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type JoinVoIPChatCompleteCallback = (res: JoinVoIPChatError) => void + /** 接口调用失败的回调函数 */ + type JoinVoIPChatFailCallback = (res: JoinVoIPChatError) => void + /** 接口调用成功的回调函数 */ + type JoinVoIPChatSuccessCallback = ( + result: JoinVoIPChatSuccessCallbackResult + ) => void + /** 接口调用成功的回调函数 */ + type LivePlayerContextSnapshotSuccessCallback = ( + result: LivePlayerContextSnapshotSuccessCallbackResult + ) => void + /** 接口调用成功的回调函数 */ + type LivePusherContextSnapshotSuccessCallback = ( + result: LivePusherContextSnapshotSuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type LoadFontFaceCompleteCallback = ( + result: LoadFontFaceCompleteCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type LoadFontFaceFailCallback = ( + result: LoadFontFaceCompleteCallbackResult + ) => void + /** 接口调用成功的回调函数 */ + type LoadFontFaceSuccessCallback = ( + result: LoadFontFaceCompleteCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type LoginCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type LoginFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type LoginSuccessCallback = (result: LoginSuccessCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type MakeBluetoothPairCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type MakeBluetoothPairFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type MakeBluetoothPairSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type MakePhoneCallCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type MakePhoneCallFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type MakePhoneCallSuccessCallback = (res: GeneralCallbackResult) => void + /** 监听 media query 状态变化的回调函数 */ + type MediaQueryObserverObserveCallback = ( + result: MediaQueryObserverObserveCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type MkdirCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type MkdirFailCallback = (result: MkdirFailCallbackResult) => void + /** 接口调用成功的回调函数 */ + type MkdirSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type MoveAlongCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type MoveAlongFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type MoveAlongSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type MoveToLocationCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type MoveToLocationFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type MoveToLocationSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type MuteCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type MuteFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type MuteSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type NavigateBackCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type NavigateBackFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type NavigateBackMiniProgramCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type NavigateBackMiniProgramFailCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用成功的回调函数 */ + type NavigateBackMiniProgramSuccessCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用成功的回调函数 */ + type NavigateBackSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type NavigateToCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type NavigateToFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type NavigateToMiniProgramCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type NavigateToMiniProgramFailCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用成功的回调函数 */ + type NavigateToMiniProgramSuccessCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用成功的回调函数 */ + type NavigateToSuccessCallback = ( + result: NavigateToSuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type NdefCloseCompleteCallback = (res: Nfcrwerror) => void + /** 接口调用失败的回调函数 */ + type NdefCloseFailCallback = (res: Nfcrwerror) => void + /** 接口调用成功的回调函数 */ + type NdefCloseSuccessCallback = (res: Nfcrwerror) => void + /** 回调函数,在执行 `SelectorQuery.exec` 方法后,返回节点信息。 */ + type NodeCallback = (result: NodeCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type NotifyBLECharacteristicValueChangeCompleteCallback = ( + res: BluetoothError + ) => void + /** 接口调用失败的回调函数 */ + type NotifyBLECharacteristicValueChangeFailCallback = ( + res: BluetoothError + ) => void + /** 接口调用成功的回调函数 */ + type NotifyBLECharacteristicValueChangeSuccessCallback = ( + res: BluetoothError + ) => void + /** onAccelerometerChange 传入的监听函数。不传此参数则移除所有监听函数。 */ + type OffAccelerometerChangeCallback = (res: GeneralCallbackResult) => void + /** onAppHide 传入的监听函数。不传此参数则移除所有监听函数。 */ + type OffAppHideCallback = (res: GeneralCallbackResult) => void + /** onAppShow 传入的监听函数。不传此参数则移除所有监听函数。 */ + type OffAppShowCallback = (res: GeneralCallbackResult) => void + /** onAudioInterruptionBegin 传入的监听函数。不传此参数则移除所有监听函数。 */ + type OffAudioInterruptionBeginCallback = ( + res: GeneralCallbackResult + ) => void + /** onAudioInterruptionEnd 传入的监听函数。不传此参数则移除所有监听函数。 */ + type OffAudioInterruptionEndCallback = (res: GeneralCallbackResult) => void + /** onBLECharacteristicValueChange 传入的监听函数。不传此参数则移除所有监听函数。 */ + type OffBLECharacteristicValueChangeCallback = ( + result: OnBLECharacteristicValueChangeListenerResult + ) => void + /** onBLEConnectionStateChange 传入的监听函数。不传此参数则移除所有监听函数。 */ + type OffBLEConnectionStateChangeCallback = ( + result: OnBLEConnectionStateChangeListenerResult + ) => void + /** onBLEMTUChange 传入的监听函数。不传此参数则移除所有监听函数。 */ + type OffBLEMTUChangeCallback = ( + result: OnBLEMTUChangeListenerResult + ) => void + /** onBLEPeripheralConnectionStateChanged 传入的监听函数。不传此参数则移除所有监听函数。 */ + type OffBLEPeripheralConnectionStateChangedCallback = ( + result: OnBLEPeripheralConnectionStateChangedListenerResult + ) => void + /** onBeaconServiceChange 传入的监听函数。不传此参数则移除所有监听函数。 */ + type OffBeaconServiceChangeCallback = (res: GeneralCallbackResult) => void + /** onBeaconUpdate 传入的监听函数。不传此参数则移除所有监听函数。 */ + type OffBeaconUpdateCallback = (res: GeneralCallbackResult) => void + /** onBindWifi 传入的监听函数。不传此参数则移除所有监听函数。 */ + type OffBindWifiCallback = (res: GeneralCallbackResult) => void + /** onBluetoothAdapterStateChange 传入的监听函数。不传此参数则移除所有监听函数。 */ + type OffBluetoothAdapterStateChangeCallback = ( + result: OnBluetoothAdapterStateChangeListenerResult + ) => void + /** onBluetoothDeviceFound 传入的监听函数。不传此参数则移除所有监听函数。 */ + type OffBluetoothDeviceFoundCallback = (res: GeneralCallbackResult) => void + /** onCanplay 传入的监听函数。不传此参数则移除所有监听函数。 */ + type OffCanplayCallback = (res: GeneralCallbackResult) => void + /** onCharacteristicReadRequest 传入的监听函数。不传此参数则移除所有监听函数。 */ + type OffCharacteristicReadRequestCallback = ( + result: OnCharacteristicReadRequestListenerResult + ) => void + /** onCharacteristicSubscribed 传入的监听函数。不传此参数则移除所有监听函数。 */ + type OffCharacteristicSubscribedCallback = ( + result: OnCharacteristicSubscribedListenerResult + ) => void + /** onCharacteristicUnsubscribed 传入的监听函数。不传此参数则移除所有监听函数。 */ + type OffCharacteristicUnsubscribedCallback = ( + result: OnCharacteristicSubscribedListenerResult + ) => void + /** onCharacteristicWriteRequest 传入的监听函数。不传此参数则移除所有监听函数。 */ + type OffCharacteristicWriteRequestCallback = ( + result: OnCharacteristicWriteRequestListenerResult + ) => void + /** onChunkReceived 传入的监听函数。不传此参数则移除所有监听函数。 */ + type OffChunkReceivedCallback = ( + result: OnChunkReceivedListenerResult + ) => void + /** onCompassChange 传入的监听函数。不传此参数则移除所有监听函数。 */ + type OffCompassChangeCallback = (res: GeneralCallbackResult) => void + /** onConnect 传入的监听函数。不传此参数则移除所有监听函数。 */ + type OffConnectCallback = (res: GeneralCallbackResult) => void + /** onCopyUrl 传入的监听函数。不传此参数则移除所有监听函数。 */ + type OffCopyUrlCallback = (result: OnCopyUrlListenerResult) => void + /** onDeviceMotionChange 传入的监听函数。不传此参数则移除所有监听函数。 */ + type OffDeviceMotionChangeCallback = (res: GeneralCallbackResult) => void + /** onDiscovered 传入的监听函数。不传此参数则移除所有监听函数。 */ + type OffDiscoveredCallback = (result: OnDiscoveredListenerResult) => void + /** onEnded 传入的监听函数。不传此参数则移除所有监听函数。 */ + type OffEndedCallback = (res: GeneralCallbackResult) => void + /** onGetWifiList 传入的监听函数。不传此参数则移除所有监听函数。 */ + type OffGetWifiListCallback = (result: OnGetWifiListListenerResult) => void + /** onHCEMessage 传入的监听函数。不传此参数则移除所有监听函数。 */ + type OffHCEMessageCallback = (result: OnHCEMessageListenerResult) => void + /** onHeadersReceived 传入的监听函数。不传此参数则移除所有监听函数。 */ + type OffHeadersReceivedCallback = ( + result: OnHeadersReceivedListenerResult + ) => void + /** onKeyboardHeightChange 传入的监听函数。不传此参数则移除所有监听函数。 */ + type OffKeyboardHeightChangeCallback = ( + result: OnKeyboardHeightChangeListenerResult + ) => void + /** onLazyLoadError 传入的监听函数。不传此参数则移除所有监听函数。 */ + type OffLazyLoadErrorCallback = ( + result: OnLazyLoadErrorListenerResult + ) => void + /** onListening 传入的监听函数。不传此参数则移除所有监听函数。 */ + type OffListeningCallback = (res: GeneralCallbackResult) => void + /** onLoad 传入的监听函数。不传此参数则移除所有监听函数。 */ + type OffLoadCallback = (res: GeneralCallbackResult) => void + /** onLocalServiceDiscoveryStop 传入的监听函数。不传此参数则移除所有监听函数。 */ + type OffLocalServiceDiscoveryStopCallback = ( + res: GeneralCallbackResult + ) => void + /** onLocalServiceFound 传入的监听函数。不传此参数则移除所有监听函数。 */ + type OffLocalServiceFoundCallback = ( + result: OnLocalServiceFoundListenerResult + ) => void + /** onLocalServiceLost 传入的监听函数。不传此参数则移除所有监听函数。 */ + type OffLocalServiceLostCallback = ( + result: OnLocalServiceLostListenerResult + ) => void + /** onLocalServiceResolveFail 传入的监听函数。不传此参数则移除所有监听函数。 */ + type OffLocalServiceResolveFailCallback = ( + result: OnLocalServiceLostListenerResult + ) => void + /** onLocationChange 传入的监听函数。不传此参数则移除所有监听函数。 */ + type OffLocationChangeCallback = ( + result: OnLocationChangeListenerResult + ) => void + /** onLocationChangeError 传入的监听函数。不传此参数则移除所有监听函数。 */ + type OffLocationChangeErrorCallback = ( + result: OnLocationChangeErrorListenerResult + ) => void + /** onMemoryWarning 传入的监听函数。不传此参数则移除所有监听函数。 */ + type OffMemoryWarningCallback = ( + result: OnMemoryWarningListenerResult + ) => void + /** onNetworkStatusChange 传入的监听函数。不传此参数则移除所有监听函数。 */ + type OffNetworkStatusChangeCallback = (res: GeneralCallbackResult) => void + /** onNetworkWeakChange 传入的监听函数。不传此参数则移除所有监听函数。 */ + type OffNetworkWeakChangeCallback = ( + result: OnNetworkWeakChangeListenerResult + ) => void + /** onPageNotFound 传入的监听函数。不传此参数则移除所有监听函数。 */ + type OffPageNotFoundCallback = ( + result: OnPageNotFoundListenerResult + ) => void + /** onPause 传入的监听函数。不传此参数则移除所有监听函数。 */ + type OffPauseCallback = (res: GeneralCallbackResult) => void + /** onPlay 传入的监听函数。不传此参数则移除所有监听函数。 */ + type OffPlayCallback = (res: GeneralCallbackResult) => void + /** onScreenRecordingStateChanged 传入的监听函数。不传此参数则移除所有监听函数。 */ + type OffScreenRecordingStateChangedCallback = ( + result: OnScreenRecordingStateChangedListenerResult + ) => void + /** onSeeked 传入的监听函数。不传此参数则移除所有监听函数。 */ + type OffSeekedCallback = (res: GeneralCallbackResult) => void + /** onSeeking 传入的监听函数。不传此参数则移除所有监听函数。 */ + type OffSeekingCallback = (res: GeneralCallbackResult) => void + /** onStop 传入的监听函数。不传此参数则移除所有监听函数。 */ + type OffStopCallback = (res: GeneralCallbackResult) => void + /** onThemeChange 传入的监听函数。不传此参数则移除所有监听函数。 */ + type OffThemeChangeCallback = (result: OnThemeChangeListenerResult) => void + /** onTimeUpdate 传入的监听函数。不传此参数则移除所有监听函数。 */ + type OffTimeUpdateCallback = (res: GeneralCallbackResult) => void + /** onUnhandledRejection 传入的监听函数。不传此参数则移除所有监听函数。 */ + type OffUnhandledRejectionCallback = ( + result: OnUnhandledRejectionListenerResult + ) => void + /** onVoIPChatInterrupted 传入的监听函数。不传此参数则移除所有监听函数。 */ + type OffVoIPChatInterruptedCallback = ( + result: OnVoIPChatInterruptedListenerResult + ) => void + /** onVoIPChatMembersChanged 传入的监听函数。不传此参数则移除所有监听函数。 */ + type OffVoIPChatMembersChangedCallback = ( + result: OnVoIPChatMembersChangedListenerResult + ) => void + /** onVoIPChatSpeakersChanged 传入的监听函数。不传此参数则移除所有监听函数。 */ + type OffVoIPChatSpeakersChangedCallback = ( + result: OnVoIPChatSpeakersChangedListenerResult + ) => void + /** onVoIPChatStateChanged 传入的监听函数。不传此参数则移除所有监听函数。 */ + type OffVoIPChatStateChangedCallback = ( + result: OnVoIPChatStateChangedListenerResult + ) => void + /** onVoIPVideoMembersChanged 传入的监听函数。不传此参数则移除所有监听函数。 */ + type OffVoIPVideoMembersChangedCallback = ( + result: OnVoIPVideoMembersChangedListenerResult + ) => void + /** onWaiting 传入的监听函数。不传此参数则移除所有监听函数。 */ + type OffWaitingCallback = (res: GeneralCallbackResult) => void + /** onWifiConnected 传入的监听函数。不传此参数则移除所有监听函数。 */ + type OffWifiConnectedCallback = ( + result: OnWifiConnectedListenerResult + ) => void + /** onWifiConnectedWithPartialInfo 传入的监听函数。不传此参数则移除所有监听函数。 */ + type OffWifiConnectedWithPartialInfoCallback = ( + result: OnWifiConnectedWithPartialInfoListenerResult + ) => void + /** onWindowResize 传入的监听函数。不传此参数则移除所有监听函数。 */ + type OffWindowResizeCallback = ( + result: OnWindowResizeListenerResult + ) => void + /** 加速度数据事件的监听函数 */ + type OnAccelerometerChangeCallback = ( + result: OnAccelerometerChangeListenerResult + ) => void + /** 小程序切后台事件的监听函数 */ + type OnAppHideCallback = (res: GeneralCallbackResult) => void + /** 小程序切前台事件的监听函数 */ + type OnAppShowCallback = ( + /** 启动参数 */ + options: LaunchOptionsApp + ) => void + /** 音频因为受到系统占用而被中断开始事件的监听函数 */ + type OnAudioInterruptionBeginCallback = (res: GeneralCallbackResult) => void + /** 音频中断结束事件的监听函数 */ + type OnAudioInterruptionEndCallback = (res: GeneralCallbackResult) => void + /** 蓝牙低功耗设备的特征值变化事件的监听函数 */ + type OnBLECharacteristicValueChangeCallback = ( + result: OnBLECharacteristicValueChangeListenerResult + ) => void + /** 蓝牙低功耗连接状态改变事件的监听函数 */ + type OnBLEConnectionStateChangeCallback = ( + result: OnBLEConnectionStateChangeListenerResult + ) => void + /** 蓝牙低功耗的最大传输单元变化事件的监听函数 */ + type OnBLEMTUChangeCallback = (result: OnBLEMTUChangeListenerResult) => void + /** 当前外围设备被连接或断开连接事件的监听函数 */ + type OnBLEPeripheralConnectionStateChangedCallback = ( + result: OnBLEPeripheralConnectionStateChangedListenerResult + ) => void + /** 音乐暂停事件的监听函数 */ + type OnBackgroundAudioPauseCallback = (res: GeneralCallbackResult) => void + /** 音乐播放事件的监听函数 */ + type OnBackgroundAudioPlayCallback = (res: GeneralCallbackResult) => void + /** 音乐停止事件的监听函数 */ + type OnBackgroundAudioStopCallback = (res: GeneralCallbackResult) => void + /** 收到 backgroundFetch 数据事件的监听函数 */ + type OnBackgroundFetchDataCallback = ( + result: OnBackgroundFetchDataListenerResult + ) => void + /** Beacon 服务状态变化事件的监听函数 */ + type OnBeaconServiceChangeCallback = ( + result: OnBeaconServiceChangeListenerResult + ) => void + /** Beacon 设备更新事件的监听函数 */ + type OnBeaconUpdateCallback = (result: OnBeaconUpdateListenerResult) => void + /** 当一个 socket 绑定当前 wifi 网络成功时触发该事件的监听函数 */ + type OnBindWifiCallback = (res: GeneralCallbackResult) => void + /** 蓝牙适配器状态变化事件的监听函数 */ + type OnBluetoothAdapterStateChangeCallback = ( + result: OnBluetoothAdapterStateChangeListenerResult + ) => void + /** 搜索到新设备的事件的监听函数 */ + type OnBluetoothDeviceFoundCallback = ( + result: OnBluetoothDeviceFoundListenerResult + ) => void + /** 回调函数 */ + type OnCameraFrameCallback = (result: OnCameraFrameCallbackResult) => void + type OnCanplayCallback = (res: GeneralCallbackResult) => void + /** 已连接的设备请求读当前外围设备的特征值事件的监听函数 */ + type OnCharacteristicReadRequestCallback = ( + result: OnCharacteristicReadRequestListenerResult + ) => void + /** 特征订阅事件的监听函数 */ + type OnCharacteristicSubscribedCallback = ( + result: OnCharacteristicSubscribedListenerResult + ) => void + /** 取消特征订阅事件的监听函数 */ + type OnCharacteristicUnsubscribedCallback = ( + result: OnCharacteristicSubscribedListenerResult + ) => void + /** 已连接的设备请求写当前外围设备的特征值事件的监听函数 */ + type OnCharacteristicWriteRequestCallback = ( + result: OnCharacteristicWriteRequestListenerResult + ) => void + /** 向微信后台请求检查更新结果事件的监听函数 */ + type OnCheckForUpdateCallback = ( + result: OnCheckForUpdateListenerResult + ) => void + /** Transfer-Encoding Chunk Received 事件的监听函数 */ + type OnChunkReceivedCallback = ( + result: OnChunkReceivedListenerResult + ) => void + /** 罗盘数据变化事件的监听函数 */ + type OnCompassChangeCallback = ( + result: OnCompassChangeListenerResult + ) => void + /** 当一个 socket 连接成功建立的时候触发该事件的监听函数 */ + type OnConnectCallback = (res: GeneralCallbackResult) => void + /** 用户点击右上角菜单的「复制链接」按钮时触发的事件的监听函数 */ + type OnCopyUrlCallback = (result: OnCopyUrlListenerResult) => void + /** 设备方向变化事件的监听函数 */ + type OnDeviceMotionChangeCallback = ( + result: OnDeviceMotionChangeListenerResult + ) => void + /** 的监听函数 */ + type OnDiscoveredCallback = (result: OnDiscoveredListenerResult) => void + type OnEndedCallback = (res: GeneralCallbackResult) => void + /** 已录制完指定帧大小的文件事件的监听函数 */ + type OnFrameRecordedCallback = ( + result: OnFrameRecordedListenerResult + ) => void + /** 获取到 Wi-Fi 列表数据事件的监听函数 */ + type OnGetWifiListCallback = (result: OnGetWifiListListenerResult) => void + /** 陀螺仪数据变化事件的监听函数 */ + type OnGyroscopeChangeCallback = ( + result: OnGyroscopeChangeListenerResult + ) => void + /** 接收 NFC 设备消息事件的监听函数 */ + type OnHCEMessageCallback = (result: OnHCEMessageListenerResult) => void + /** HTTP Response Header 事件的监听函数 */ + type OnHeadersReceivedCallback = ( + result: OnHeadersReceivedListenerResult + ) => void + /** 录音因为受到系统占用而被中断开始事件的监听函数 */ + type OnInterruptionBeginCallback = (res: GeneralCallbackResult) => void + /** 录音中断结束事件的监听函数 */ + type OnInterruptionEndCallback = (res: GeneralCallbackResult) => void + /** 键盘高度变化事件的监听函数 */ + type OnKeyboardHeightChangeCallback = ( + result: OnKeyboardHeightChangeListenerResult + ) => void + /** 小程序异步组件加载失败事件的监听函数 */ + type OnLazyLoadErrorCallback = ( + result: OnLazyLoadErrorListenerResult + ) => void + /** 开始监听数据包消息的事件的监听函数 */ + type OnListeningCallback = (res: GeneralCallbackResult) => void + type OnLoadCallback = (res: GeneralCallbackResult) => void + /** mDNS 服务停止搜索的事件的监听函数 */ + type OnLocalServiceDiscoveryStopCallback = ( + res: GeneralCallbackResult + ) => void + /** mDNS 服务发现的事件的监听函数 */ + type OnLocalServiceFoundCallback = ( + result: OnLocalServiceFoundListenerResult + ) => void + /** mDNS 服务离开的事件的监听函数 */ + type OnLocalServiceLostCallback = ( + result: OnLocalServiceLostListenerResult + ) => void + /** mDNS 服务解析失败的事件的监听函数 */ + type OnLocalServiceResolveFailCallback = ( + result: OnLocalServiceLostListenerResult + ) => void + /** 实时地理位置变化事件的监听函数 */ + type OnLocationChangeCallback = ( + result: OnLocationChangeListenerResult + ) => void + /** 的监听函数 */ + type OnLocationChangeErrorCallback = ( + result: OnLocationChangeErrorListenerResult + ) => void + /** 内存不足告警事件的监听函数 */ + type OnMemoryWarningCallback = ( + result: OnMemoryWarningListenerResult + ) => void + /** 网络状态变化事件的监听函数 */ + type OnNetworkStatusChangeCallback = ( + result: OnNetworkStatusChangeListenerResult + ) => void + /** 弱网状态变化事件的监听函数 */ + type OnNetworkWeakChangeCallback = ( + result: OnNetworkWeakChangeListenerResult + ) => void + /** 用户在系统音乐播放面板点击下一曲事件的监听函数 */ + type OnNextCallback = (res: GeneralCallbackResult) => void + /** WebSocket 连接打开事件的监听函数 */ + type OnOpenCallback = (result: OnOpenListenerResult) => void + /** 小程序要打开的页面不存在事件的监听函数 */ + type OnPageNotFoundCallback = (result: OnPageNotFoundListenerResult) => void + type OnPauseCallback = (res: GeneralCallbackResult) => void + type OnPlayCallback = (res: GeneralCallbackResult) => void + /** 用户在系统音乐播放面板点击上一曲事件的监听函数 */ + type OnPrevCallback = (res: GeneralCallbackResult) => void + /** worker线程被系统回收事件的监听函数 */ + type OnProcessKilledCallback = (res: GeneralCallbackResult) => void + /** 录音继续事件的监听函数 */ + type OnResumeCallback = (res: GeneralCallbackResult) => void + /** 用户录屏事件的监听函数 */ + type OnScreenRecordingStateChangedCallback = ( + result: OnScreenRecordingStateChangedListenerResult + ) => void + type OnSeekedCallback = (res: GeneralCallbackResult) => void + type OnSeekingCallback = (res: GeneralCallbackResult) => void + /** WebSocket 连接关闭事件的监听函数 */ + type OnSocketCloseCallback = ( + result: SocketTaskOnCloseListenerResult + ) => void + /** WebSocket 错误事件的监听函数 */ + type OnSocketErrorCallback = (result: GeneralCallbackResult) => void + /** WebSocket 接受到服务器的消息事件的监听函数 */ + type OnSocketMessageCallback = ( + result: SocketTaskOnMessageListenerResult + ) => void + /** WebSocket 连接打开事件的监听函数 */ + type OnSocketOpenCallback = (result: OnSocketOpenListenerResult) => void + /** 录音开始事件的监听函数 */ + type OnStartCallback = (res: GeneralCallbackResult) => void + /** 系统主题改变事件的监听函数 */ + type OnThemeChangeCallback = (result: OnThemeChangeListenerResult) => void + type OnTimeUpdateCallback = (res: GeneralCallbackResult) => void + /** 未处理的 Promise 拒绝事件的监听函数 */ + type OnUnhandledRejectionCallback = ( + result: OnUnhandledRejectionListenerResult + ) => void + /** 小程序更新失败事件的监听函数 */ + type OnUpdateFailedCallback = (res: GeneralCallbackResult) => void + /** 小程序有版本更新事件的监听函数 */ + type OnUpdateReadyCallback = (res: GeneralCallbackResult) => void + /** 用户主动截屏事件的监听函数 */ + type OnUserCaptureScreenCallback = (res: GeneralCallbackResult) => void + /** 被动断开实时语音通话事件的监听函数 */ + type OnVoIPChatInterruptedCallback = ( + result: OnVoIPChatInterruptedListenerResult + ) => void + /** 实时语音通话成员在线状态变化事件的监听函数 */ + type OnVoIPChatMembersChangedCallback = ( + result: OnVoIPChatMembersChangedListenerResult + ) => void + /** 实时语音通话成员通话状态变化事件的监听函数 */ + type OnVoIPChatSpeakersChangedCallback = ( + result: OnVoIPChatSpeakersChangedListenerResult + ) => void + /** 房间状态变化事件的监听函数 */ + type OnVoIPChatStateChangedCallback = ( + result: OnVoIPChatStateChangedListenerResult + ) => void + /** 实时语音通话成员视频状态变化事件的监听函数 */ + type OnVoIPVideoMembersChangedCallback = ( + result: OnVoIPVideoMembersChangedListenerResult + ) => void + /** 音频加载中事件的监听函数 */ + type OnWaitingCallback = (res: GeneralCallbackResult) => void + /** 连接上 Wi-Fi 的事件的监听函数 */ + type OnWifiConnectedCallback = ( + result: OnWifiConnectedListenerResult + ) => void + /** 连接上 Wi-Fi 的事件的监听函数 */ + type OnWifiConnectedWithPartialInfoCallback = ( + result: OnWifiConnectedWithPartialInfoListenerResult + ) => void + /** 窗口尺寸变化事件的监听函数 */ + type OnWindowResizeCallback = (result: OnWindowResizeListenerResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type OpenAppAuthorizeSettingCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type OpenAppAuthorizeSettingFailCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用成功的回调函数 */ + type OpenAppAuthorizeSettingSuccessCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type OpenBluetoothAdapterCompleteCallback = (res: BluetoothError) => void + /** 接口调用失败的回调函数 */ + type OpenBluetoothAdapterFailCallback = (res: BluetoothError) => void + /** 接口调用成功的回调函数 */ + type OpenBluetoothAdapterSuccessCallback = (res: BluetoothError) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type OpenCardCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type OpenCardFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type OpenCardSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type OpenChannelsActivityCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type OpenChannelsActivityFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type OpenChannelsActivitySuccessCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type OpenChannelsEventCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type OpenChannelsEventFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type OpenChannelsEventSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type OpenChannelsLiveCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type OpenChannelsLiveFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type OpenChannelsLiveSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type OpenChannelsUserProfileCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type OpenChannelsUserProfileFailCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用成功的回调函数 */ + type OpenChannelsUserProfileSuccessCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type OpenCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type OpenCustomerServiceChatCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type OpenCustomerServiceChatFailCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用成功的回调函数 */ + type OpenCustomerServiceChatSuccessCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type OpenDocumentCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type OpenDocumentFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type OpenDocumentSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type OpenEmbeddedMiniProgramCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type OpenEmbeddedMiniProgramFailCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用成功的回调函数 */ + type OpenEmbeddedMiniProgramSuccessCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type OpenFailCallback = (result: OpenFailCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type OpenLocationCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type OpenLocationFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type OpenLocationSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type OpenMapAppCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type OpenMapAppFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type OpenMapAppSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type OpenSettingCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type OpenSettingFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type OpenSettingSuccessCallback = ( + result: OpenSettingSuccessCallbackResult + ) => void + /** 接口调用成功的回调函数 */ + type OpenSuccessCallback = (result: OpenSuccessCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type OpenSystemBluetoothSettingCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type OpenSystemBluetoothSettingFailCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用成功的回调函数 */ + type OpenSystemBluetoothSettingSuccessCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type OpenVideoEditorCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type OpenVideoEditorFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type OpenVideoEditorSuccessCallback = ( + result: OpenVideoEditorSuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type PageScrollToCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type PageScrollToFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type PageScrollToSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type PauseBGMCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type PauseBGMFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type PauseBGMSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type PauseBackgroundAudioCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type PauseBackgroundAudioFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type PauseBackgroundAudioSuccessCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type PauseCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type PauseFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type PauseSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type PauseVoiceCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type PauseVoiceFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type PauseVoiceSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type PlayBGMCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type PlayBGMFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type PlayBGMSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type PlayBackgroundAudioCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type PlayBackgroundAudioFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type PlayBackgroundAudioSuccessCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type PlayCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type PlayFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type PlaySuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type PlayVoiceCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type PlayVoiceFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type PlayVoiceSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type PluginLoginCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type PluginLoginFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type PluginLoginSuccessCallback = ( + result: PluginLoginSuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type PreloadAssetsCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type PreloadAssetsFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type PreloadAssetsSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type PreloadSkylineViewCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type PreloadSkylineViewFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type PreloadSkylineViewSuccessCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type PreloadWebviewCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type PreloadWebviewFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type PreloadWebviewSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type PreviewImageCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type PreviewImageFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type PreviewImageSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type PreviewMediaCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type PreviewMediaFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type PreviewMediaSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type ReLaunchCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type ReLaunchFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type ReLaunchSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type ReadBLECharacteristicValueCompleteCallback = ( + res: BluetoothError + ) => void + /** 接口调用失败的回调函数 */ + type ReadBLECharacteristicValueFailCallback = (res: BluetoothError) => void + /** 接口调用成功的回调函数 */ + type ReadBLECharacteristicValueSuccessCallback = ( + res: BluetoothError + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type ReadCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type ReadCompressedFileCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type ReadCompressedFileFailCallback = ( + result: ReadCompressedFileFailCallbackResult + ) => void + /** 接口调用成功的回调函数 */ + type ReadCompressedFileSuccessCallback = ( + result: ReadCompressedFileSuccessCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type ReadFailCallback = (result: ReadFailCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type ReadFileCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type ReadFileFailCallback = (result: ReadFileFailCallbackResult) => void + /** 接口调用成功的回调函数 */ + type ReadFileSuccessCallback = ( + result: ReadFileSuccessCallbackResult + ) => void + /** 接口调用成功的回调函数 */ + type ReadSuccessCallback = (result: ReadSuccessCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type ReadZipEntryCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type ReadZipEntryFailCallback = ( + result: ReadZipEntryFailCallbackResult + ) => void + /** 接口调用成功的回调函数 */ + type ReadZipEntrySuccessCallback = ( + result: ReadZipEntrySuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type ReaddirCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type ReaddirFailCallback = (result: ReaddirFailCallbackResult) => void + /** 接口调用成功的回调函数 */ + type ReaddirSuccessCallback = (result: ReaddirSuccessCallbackResult) => void + /** 录音结束事件的监听函数 */ + type RecorderManagerOnStopCallback = (result: OnStopListenerResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type RedirectToCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type RedirectToFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type RedirectToSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type RedoCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type RedoFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type RedoSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type RemoveArcCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type RemoveArcFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type RemoveArcSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type RemoveCustomLayerCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type RemoveCustomLayerFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type RemoveCustomLayerSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type RemoveFormatCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type RemoveFormatFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type RemoveFormatSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type RemoveGroundOverlayCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type RemoveGroundOverlayFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type RemoveGroundOverlaySuccessCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type RemoveMarkersCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type RemoveMarkersFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type RemoveMarkersSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type RemoveSavedFileCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type RemoveSavedFileSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type RemoveServiceCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type RemoveServiceFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type RemoveServiceSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type RemoveStorageCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type RemoveStorageFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type RemoveStorageSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type RemoveTabBarBadgeCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type RemoveTabBarBadgeFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type RemoveTabBarBadgeSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type RemoveVisualLayerCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type RemoveVisualLayerFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type RemoveVisualLayerSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type RenameCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type RenameFailCallback = (result: RenameFailCallbackResult) => void + /** 接口调用成功的回调函数 */ + type RenameSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type RequestCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type RequestFailCallback = (err: Err) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type RequestFullScreenCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type RequestFullScreenFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type RequestFullScreenSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type RequestOrderPaymentCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type RequestOrderPaymentFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type RequestOrderPaymentSuccessCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type RequestPaymentCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type RequestPaymentFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type RequestPaymentSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type RequestPictureInPictureCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type RequestPictureInPictureFailCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用成功的回调函数 */ + type RequestPictureInPictureSuccessCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type RequestPluginPaymentCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type RequestPluginPaymentFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type RequestPluginPaymentSuccessCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type RequestSubscribeDeviceMessageCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type RequestSubscribeDeviceMessageFailCallback = ( + result: RequestSubscribeDeviceMessageFailCallbackResult + ) => void + /** 接口调用成功的回调函数 */ + type RequestSubscribeDeviceMessageSuccessCallback = ( + result: RequestSubscribeDeviceMessageSuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type RequestSubscribeMessageCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type RequestSubscribeMessageFailCallback = ( + result: RequestSubscribeMessageFailCallbackResult + ) => void + /** 接口调用成功的回调函数 */ + type RequestSubscribeMessageSuccessCallback = ( + result: RequestSubscribeMessageSuccessCallbackResult + ) => void + /** 接口调用成功的回调函数 */ + type RequestSuccessCallback< + T extends string | IAnyObject | ArrayBuffer = + | string + | IAnyObject + | ArrayBuffer + > = (result: RequestSuccessCallbackResult<T>) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type ResumeBGMCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type ResumeBGMFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type ResumeBGMSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type ResumeCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type ResumeFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type ResumeSuccessCallback = (res: GeneralCallbackResult) => void + /** onClose 传入的监听函数。不传此参数则移除所有监听函数。 */ + type RewardedVideoAdOffCloseCallback = ( + result: RewardedVideoAdOnCloseListenerResult + ) => void + /** onError 传入的监听函数。不传此参数则移除所有监听函数。 */ + type RewardedVideoAdOffErrorCallback = ( + result: RewardedVideoAdOnErrorListenerResult + ) => void + /** 用户点击 `关闭广告` 按钮的事件的监听函数 */ + type RewardedVideoAdOnCloseCallback = ( + result: RewardedVideoAdOnCloseListenerResult + ) => void + /** 激励视频错误事件的监听函数 */ + type RewardedVideoAdOnErrorCallback = ( + result: RewardedVideoAdOnErrorListenerResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type RmdirCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type RmdirFailCallback = (result: RmdirFailCallbackResult) => void + /** 接口调用成功的回调函数 */ + type RmdirSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type SaveFileCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type SaveFileSuccessCallback = ( + result: SaveFileSuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type SaveFileToDiskCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type SaveFileToDiskFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type SaveFileToDiskSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type SaveImageToPhotosAlbumCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type SaveImageToPhotosAlbumFailCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用成功的回调函数 */ + type SaveImageToPhotosAlbumSuccessCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type SaveVideoToPhotosAlbumCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type SaveVideoToPhotosAlbumFailCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用成功的回调函数 */ + type SaveVideoToPhotosAlbumSuccessCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type ScanCodeCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type ScanCodeFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type ScanCodeSuccessCallback = ( + result: ScanCodeSuccessCallbackResult + ) => void + /** 回调函数,在执行 `SelectorQuery.exec` 方法后,节点信息会在 `callback` 中返回。 */ + type ScrollOffsetCallback = (result: ScrollOffsetCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type SeekBackgroundAudioCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type SeekBackgroundAudioFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type SeekBackgroundAudioSuccessCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type SendCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type SendFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type SendHCEMessageCompleteCallback = (res: NFCError) => void + /** 接口调用失败的回调函数 */ + type SendHCEMessageFailCallback = (res: NFCError) => void + /** 接口调用成功的回调函数 */ + type SendHCEMessageSuccessCallback = (res: NFCError) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type SendMessageCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type SendMessageFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type SendMessageSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type SendSmsCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type SendSmsFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type SendSmsSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type SendSocketMessageCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type SendSocketMessageFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type SendSocketMessageSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type SendSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type SetBGMVolumeCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type SetBGMVolumeFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type SetBGMVolumeSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type SetBLEMTUCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type SetBLEMTUFailCallback = (result: SetBLEMTUFailCallbackResult) => void + /** 接口调用成功的回调函数 */ + type SetBLEMTUSuccessCallback = ( + result: SetBLEMTUSuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type SetBackgroundColorCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type SetBackgroundColorFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type SetBackgroundColorSuccessCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type SetBackgroundFetchTokenCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type SetBackgroundFetchTokenFailCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用成功的回调函数 */ + type SetBackgroundFetchTokenSuccessCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type SetBackgroundTextStyleCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type SetBackgroundTextStyleFailCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用成功的回调函数 */ + type SetBackgroundTextStyleSuccessCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type SetBoundaryCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type SetBoundaryFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type SetBoundarySuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type SetCenterOffsetCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type SetCenterOffsetFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type SetCenterOffsetSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type SetClipboardDataCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type SetClipboardDataFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type SetClipboardDataSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type SetContentsCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type SetContentsFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type SetContentsSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type SetEnable1v1ChatCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type SetEnable1v1ChatFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type SetEnable1v1ChatSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type SetEnableDebugCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type SetEnableDebugFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type SetEnableDebugSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type SetInnerAudioOptionCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type SetInnerAudioOptionFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type SetInnerAudioOptionSuccessCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type SetKeepScreenOnCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type SetKeepScreenOnFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type SetKeepScreenOnSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type SetLocMarkerIconCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type SetLocMarkerIconFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type SetLocMarkerIconSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type SetMICVolumeCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type SetMICVolumeFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type SetMICVolumeSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type SetNavigationBarColorCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type SetNavigationBarColorFailCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用成功的回调函数 */ + type SetNavigationBarColorSuccessCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type SetNavigationBarTitleCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type SetNavigationBarTitleFailCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用成功的回调函数 */ + type SetNavigationBarTitleSuccessCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type SetScreenBrightnessCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type SetScreenBrightnessFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type SetScreenBrightnessSuccessCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type SetStorageCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type SetStorageFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type SetStorageSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type SetTabBarBadgeCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type SetTabBarBadgeFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type SetTabBarBadgeSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type SetTabBarItemCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type SetTabBarItemFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type SetTabBarItemSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type SetTabBarStyleCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type SetTabBarStyleFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type SetTabBarStyleSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type SetTimeoutCompleteCallback = (res: Nfcrwerror) => void + /** 接口调用失败的回调函数 */ + type SetTimeoutFailCallback = (res: Nfcrwerror) => void + /** 接口调用成功的回调函数 */ + type SetTimeoutSuccessCallback = (res: Nfcrwerror) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type SetTopBarTextCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type SetTopBarTextFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type SetTopBarTextSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type SetVisualEffectOnCaptureCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type SetVisualEffectOnCaptureFailCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用成功的回调函数 */ + type SetVisualEffectOnCaptureSuccessCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type SetWifiListCompleteCallback = (res: WifiError) => void + /** 接口调用失败的回调函数 */ + type SetWifiListFailCallback = (res: WifiError) => void + /** 接口调用成功的回调函数 */ + type SetWifiListSuccessCallback = (res: WifiError) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type SetWindowSizeCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type SetWindowSizeFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type SetWindowSizeSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type SetZoomCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type SetZoomFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type SetZoomSuccessCallback = (result: SetZoomSuccessCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type ShareFileMessageCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type ShareFileMessageFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type ShareFileMessageSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type ShareToWeRunCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type ShareToWeRunFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type ShareToWeRunSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type ShareVideoMessageCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type ShareVideoMessageFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type ShareVideoMessageSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type ShowActionSheetCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type ShowActionSheetFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type ShowActionSheetSuccessCallback = ( + result: ShowActionSheetSuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type ShowLoadingCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type ShowLoadingFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type ShowLoadingSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type ShowModalCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type ShowModalFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type ShowModalSuccessCallback = ( + result: ShowModalSuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type ShowNavigationBarLoadingCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type ShowNavigationBarLoadingFailCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用成功的回调函数 */ + type ShowNavigationBarLoadingSuccessCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type ShowRedPackageCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type ShowRedPackageFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type ShowRedPackageSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type ShowShareImageMenuCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type ShowShareImageMenuFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type ShowShareImageMenuSuccessCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type ShowShareMenuCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type ShowShareMenuFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type ShowShareMenuSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type ShowTabBarCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type ShowTabBarFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type ShowTabBarRedDotCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type ShowTabBarRedDotFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type ShowTabBarRedDotSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type ShowTabBarSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type ShowToastCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type ShowToastFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type ShowToastSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type SnapshotCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type SnapshotFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type SocketTaskCloseFailCallback = (res: GeneralCallbackResult) => void + /** WebSocket 连接关闭事件的监听函数 */ + type SocketTaskOnCloseCallback = ( + result: SocketTaskOnCloseListenerResult + ) => void + /** WebSocket 接受到服务器的消息事件的监听函数 */ + type SocketTaskOnMessageCallback = ( + result: SocketTaskOnMessageListenerResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type StartAccelerometerCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type StartAccelerometerFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type StartAccelerometerSuccessCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type StartAdvertisingCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type StartAdvertisingFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type StartAdvertisingSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type StartBeaconDiscoveryCompleteCallback = (res: BeaconError) => void + /** 接口调用失败的回调函数 */ + type StartBeaconDiscoveryFailCallback = (res: BeaconError) => void + /** 接口调用成功的回调函数 */ + type StartBeaconDiscoverySuccessCallback = (res: BeaconError) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type StartBluetoothDevicesDiscoveryCompleteCallback = ( + res: BluetoothError + ) => void + /** 接口调用失败的回调函数 */ + type StartBluetoothDevicesDiscoveryFailCallback = ( + res: BluetoothError + ) => void + /** 接口调用成功的回调函数 */ + type StartBluetoothDevicesDiscoverySuccessCallback = ( + res: BluetoothError + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type StartCompassCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type StartCompassFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type StartCompassSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type StartCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type StartDeviceMotionListeningCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type StartDeviceMotionListeningFailCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用成功的回调函数 */ + type StartDeviceMotionListeningSuccessCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type StartDiscoveryCompleteCallback = (res: Nfcrwerror) => void + /** 接口调用失败的回调函数 */ + type StartDiscoveryFailCallback = (res: Nfcrwerror) => void + /** 接口调用成功的回调函数 */ + type StartDiscoverySuccessCallback = (res: Nfcrwerror) => void + /** 接口调用失败的回调函数 */ + type StartFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type StartGyroscopeCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type StartGyroscopeFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type StartGyroscopeSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type StartHCECompleteCallback = (res: NFCError) => void + /** 接口调用失败的回调函数 */ + type StartHCEFailCallback = (res: NFCError) => void + /** 接口调用成功的回调函数 */ + type StartHCESuccessCallback = (res: NFCError) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type StartLocalServiceDiscoveryCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type StartLocalServiceDiscoveryFailCallback = ( + result: StartLocalServiceDiscoveryFailCallbackResult + ) => void + /** 接口调用成功的回调函数 */ + type StartLocalServiceDiscoverySuccessCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type StartLocationUpdateBackgroundCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type StartLocationUpdateBackgroundFailCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用成功的回调函数 */ + type StartLocationUpdateBackgroundSuccessCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type StartLocationUpdateCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type StartLocationUpdateFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type StartLocationUpdateSuccessCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type StartPreviewCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type StartPreviewFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type StartPreviewSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type StartPullDownRefreshCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type StartPullDownRefreshFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type StartPullDownRefreshSuccessCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type StartRecordCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type StartRecordFailCallback = (res: GeneralCallbackResult) => void + /** 超过录制时长上限时会结束录像并触发此回调,录像异常退出时也会触发此回调 */ + type StartRecordTimeoutCallback = ( + result: StartRecordTimeoutCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type StartSoterAuthenticationCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type StartSoterAuthenticationFailCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用成功的回调函数 */ + type StartSoterAuthenticationSuccessCallback = ( + result: StartSoterAuthenticationSuccessCallbackResult + ) => void + /** 接口调用成功的回调函数 */ + type StartSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type StartWifiCompleteCallback = (res: WifiError) => void + /** 接口调用失败的回调函数 */ + type StartWifiFailCallback = (res: WifiError) => void + /** 接口调用成功的回调函数 */ + type StartWifiSuccessCallback = (res: WifiError) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type StatCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type StatFailCallback = (result: StatFailCallbackResult) => void + /** 接口调用成功的回调函数 */ + type StatSuccessCallback = (result: StatSuccessCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type StopAccelerometerCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type StopAccelerometerFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type StopAccelerometerSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type StopAdvertisingCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type StopAdvertisingFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type StopAdvertisingSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type StopBGMCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type StopBGMFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type StopBGMSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type StopBackgroundAudioCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type StopBackgroundAudioFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type StopBackgroundAudioSuccessCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type StopBeaconDiscoveryCompleteCallback = (res: BeaconError) => void + /** 接口调用失败的回调函数 */ + type StopBeaconDiscoveryFailCallback = (res: BeaconError) => void + /** 接口调用成功的回调函数 */ + type StopBeaconDiscoverySuccessCallback = (res: BeaconError) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type StopBluetoothDevicesDiscoveryCompleteCallback = ( + res: BluetoothError + ) => void + /** 接口调用失败的回调函数 */ + type StopBluetoothDevicesDiscoveryFailCallback = ( + res: BluetoothError + ) => void + /** 接口调用成功的回调函数 */ + type StopBluetoothDevicesDiscoverySuccessCallback = ( + res: BluetoothError + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type StopCompassCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type StopCompassFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type StopCompassSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type StopCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type StopDeviceMotionListeningCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type StopDeviceMotionListeningFailCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用成功的回调函数 */ + type StopDeviceMotionListeningSuccessCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type StopDiscoveryCompleteCallback = (res: Nfcrwerror) => void + /** 接口调用失败的回调函数 */ + type StopDiscoveryFailCallback = (res: Nfcrwerror) => void + /** 接口调用成功的回调函数 */ + type StopDiscoverySuccessCallback = (res: Nfcrwerror) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type StopFaceDetectCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type StopFaceDetectFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type StopFaceDetectSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type StopFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type StopGyroscopeCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type StopGyroscopeFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type StopGyroscopeSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type StopHCECompleteCallback = (res: NFCError) => void + /** 接口调用失败的回调函数 */ + type StopHCEFailCallback = (res: NFCError) => void + /** 接口调用成功的回调函数 */ + type StopHCESuccessCallback = (res: NFCError) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type StopLocalServiceDiscoveryCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type StopLocalServiceDiscoveryFailCallback = ( + result: StopLocalServiceDiscoveryFailCallbackResult + ) => void + /** 接口调用成功的回调函数 */ + type StopLocalServiceDiscoverySuccessCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type StopLocationUpdateCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type StopLocationUpdateFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type StopLocationUpdateSuccessCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type StopPreviewCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type StopPreviewFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type StopPreviewSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type StopPullDownRefreshCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type StopPullDownRefreshFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type StopPullDownRefreshSuccessCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type StopRecordCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type StopRecordFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type StopSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type StopVoiceCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type StopVoiceFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type StopVoiceSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type StopWifiCompleteCallback = (res: WifiError) => void + /** 接口调用失败的回调函数 */ + type StopWifiFailCallback = (res: WifiError) => void + /** 接口调用成功的回调函数 */ + type StopWifiSuccessCallback = (res: WifiError) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type SubscribeVoIPVideoMembersCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type SubscribeVoIPVideoMembersFailCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用成功的回调函数 */ + type SubscribeVoIPVideoMembersSuccessCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type SwitchCameraCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type SwitchCameraFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type SwitchCameraSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type SwitchTabCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type SwitchTabFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type SwitchTabSuccessCallback = (res: GeneralCallbackResult) => void + /** onMessage 传入的监听函数。不传此参数则移除所有监听函数。 */ + type TCPSocketOffMessageCallback = ( + result: TCPSocketOnMessageListenerResult + ) => void + /** 当接收到数据的时触发该事件的监听函数 */ + type TCPSocketOnMessageCallback = ( + result: TCPSocketOnMessageListenerResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type TakePhotoCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type TakePhotoFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type TakePhotoSuccessCallback = ( + result: TakePhotoSuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type ToScreenLocationCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type ToScreenLocationFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type ToScreenLocationSuccessCallback = ( + result: ToScreenLocationSuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type ToggleTorchCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type ToggleTorchFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type ToggleTorchSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type TransceiveCompleteCallback = (res: Nfcrwerror) => void + /** 接口调用失败的回调函数 */ + type TransceiveFailCallback = (res: Nfcrwerror) => void + /** 接口调用成功的回调函数 */ + type TransceiveSuccessCallback = ( + result: TransceiveSuccessCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type TranslateMarkerCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type TranslateMarkerFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type TranslateMarkerSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type TruncateCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type TruncateFailCallback = (result: TruncateFailCallbackResult) => void + /** 接口调用成功的回调函数 */ + type TruncateSuccessCallback = (res: GeneralCallbackResult) => void + /** onClose 传入的监听函数。不传此参数则移除所有监听函数。 */ + type UDPSocketOffCloseCallback = (res: GeneralCallbackResult) => void + /** onError 传入的监听函数。不传此参数则移除所有监听函数。 */ + type UDPSocketOffErrorCallback = (result: GeneralCallbackResult) => void + /** onMessage 传入的监听函数。不传此参数则移除所有监听函数。 */ + type UDPSocketOffMessageCallback = ( + result: UDPSocketOnMessageListenerResult + ) => void + type UDPSocketOnCloseCallback = (res: GeneralCallbackResult) => void + type UDPSocketOnErrorCallback = (result: GeneralCallbackResult) => void + /** 收到消息的事件的监听函数 */ + type UDPSocketOnMessageCallback = ( + result: UDPSocketOnMessageListenerResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type UndoCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type UndoFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type UndoSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type UnlinkCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type UnlinkFailCallback = (result: UnlinkFailCallbackResult) => void + /** 接口调用成功的回调函数 */ + type UnlinkSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type UnzipCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type UnzipFailCallback = (result: UnzipFailCallbackResult) => void + /** 接口调用成功的回调函数 */ + type UnzipSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type UpdateGroundOverlayCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type UpdateGroundOverlayFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type UpdateGroundOverlaySuccessCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type UpdateShareMenuCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type UpdateShareMenuFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type UpdateShareMenuSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type UpdateVoIPChatMuteConfigCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type UpdateVoIPChatMuteConfigFailCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用成功的回调函数 */ + type UpdateVoIPChatMuteConfigSuccessCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type UpdateWeChatAppCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type UpdateWeChatAppFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type UpdateWeChatAppSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type UploadFileCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type UploadFileFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type UploadFileSuccessCallback = ( + result: UploadFileSuccessCallbackResult + ) => void + /** onProgressUpdate 传入的监听函数。不传此参数则移除所有监听函数。 */ + type UploadTaskOffProgressUpdateCallback = ( + result: UploadTaskOnProgressUpdateListenerResult + ) => void + /** 上传进度变化事件的监听函数 */ + type UploadTaskOnProgressUpdateCallback = ( + result: UploadTaskOnProgressUpdateListenerResult + ) => void + /** 开启会话回调 */ + type VKSessionStartCallback = ( + /** 参数 status 可选值: + * - 0: 成功; + * - 2000001: 参数错误; + * - 2003000: 会话不可用; + * - 2000000: 系统错误; + * - 2000002: 设备不支持; + * - 2000003: 系统不支持; + * - 2000004: 设备不支持; + * - 2003001: 未开启系统相机权限; + * - 2003002: 未开启小程序相机权限; */ + status: + | 0 + | 2000001 + | 2003000 + | 2000000 + | 2000002 + | 2000003 + | 2000004 + | 2003001 + | 2003002 + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type VibrateLongCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type VibrateLongFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type VibrateLongSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type VibrateShortCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type VibrateShortFailCallback = ( + result: VibrateShortFailCallbackResult + ) => void + /** 接口调用成功的回调函数 */ + type VibrateShortSuccessCallback = (res: GeneralCallbackResult) => void + /** 主线程/Worker 线程向当前线程发送的消息的事件的监听函数 */ + type WorkerOnMessageCallback = ( + result: WorkerOnMessageListenerResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type WriteBLECharacteristicValueCompleteCallback = ( + res: BluetoothError + ) => void + /** 接口调用失败的回调函数 */ + type WriteBLECharacteristicValueFailCallback = (res: BluetoothError) => void + /** 接口调用成功的回调函数 */ + type WriteBLECharacteristicValueSuccessCallback = ( + res: BluetoothError + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type WriteCharacteristicValueCompleteCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用失败的回调函数 */ + type WriteCharacteristicValueFailCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用成功的回调函数 */ + type WriteCharacteristicValueSuccessCallback = ( + res: GeneralCallbackResult + ) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type WriteCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type WriteFailCallback = (result: WriteFailCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type WriteFileCompleteCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type WriteFileFailCallback = (result: WriteFileFailCallbackResult) => void + /** 接口调用成功的回调函数 */ + type WriteFileSuccessCallback = (res: GeneralCallbackResult) => void + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + type WriteNdefMessageCompleteCallback = (res: Nfcrwerror) => void + /** 接口调用失败的回调函数 */ + type WriteNdefMessageFailCallback = (res: Nfcrwerror) => void + /** 接口调用成功的回调函数 */ + type WriteNdefMessageSuccessCallback = (res: Nfcrwerror) => void + /** 接口调用成功的回调函数 */ + type WriteSuccessCallback = (result: WriteSuccessCallbackResult) => void + /** 接口调用失败的回调函数 */ + type WxGetFileInfoFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type WxGetFileInfoSuccessCallback = ( + result: WxGetFileInfoSuccessCallbackResult + ) => void + /** 接口调用成功的回调函数 */ + type WxGetSavedFileListSuccessCallback = ( + result: WxGetSavedFileListSuccessCallbackResult + ) => void + /** onError 传入的监听函数。不传此参数则移除所有监听函数。 */ + type WxOffErrorCallback = (res: GeneralCallbackResult) => void + /** 小程序错误事件的监听函数 */ + type WxOnErrorCallback = ( + /** 错误信息,包含堆栈 */ + error: string + ) => void + /** 接口调用失败的回调函数 */ + type WxRemoveSavedFileFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用失败的回调函数 */ + type WxSaveFileFailCallback = (res: GeneralCallbackResult) => void + /** 接口调用成功的回调函数 */ + type WxStartRecordSuccessCallback = ( + result: StartRecordSuccessCallbackResult + ) => void + /** 接口调用成功的回调函数 */ + type WxStopRecordSuccessCallback = (res: GeneralCallbackResult) => void +} diff --git a/scr/weichat_work/typings/types/wx/lib.wx.app.d.ts b/scr/weichat_work/typings/types/wx/lib.wx.app.d.ts new file mode 100644 index 0000000..ef90d8e --- /dev/null +++ b/scr/weichat_work/typings/types/wx/lib.wx.app.d.ts @@ -0,0 +1,270 @@ +/*! ***************************************************************************** +Copyright (c) 2022 Tencent, Inc. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +***************************************************************************** */ + +declare namespace WechatMiniprogram.App { + interface ReferrerInfo { + /** 来源小程序或公众号或App的 appId + * + * 以下场景支持返回 referrerInfo.appId: + * - 1020(公众号 profile 页相关小程序列表): appId + * - 1035(公众号自定义菜单):来源公众号 appId + * - 1036(App 分享消息卡片):来源应用 appId + * - 1037(小程序打开小程序):来源小程序 appId + * - 1038(从另一个小程序返回):来源小程序 appId + * - 1043(公众号模板消息):来源公众号 appId + */ + appId: string + /** 来源小程序传过来的数据,scene=1037或1038时支持 */ + extraData?: any + } + + type SceneValues = + | 1001 + | 1005 + | 1006 + | 1007 + | 1008 + | 1011 + | 1012 + | 1013 + | 1014 + | 1017 + | 1019 + | 1020 + | 1023 + | 1024 + | 1025 + | 1026 + | 1027 + | 1028 + | 1029 + | 1030 + | 1031 + | 1032 + | 1034 + | 1035 + | 1036 + | 1037 + | 1038 + | 1039 + | 1042 + | 1043 + | 1044 + | 1045 + | 1046 + | 1047 + | 1048 + | 1049 + | 1052 + | 1053 + | 1056 + | 1057 + | 1058 + | 1059 + | 1064 + | 1067 + | 1069 + | 1071 + | 1072 + | 1073 + | 1074 + | 1077 + | 1078 + | 1079 + | 1081 + | 1082 + | 1084 + | 1089 + | 1090 + | 1091 + | 1092 + | 1095 + | 1096 + | 1097 + | 1099 + | 1102 + | 1124 + | 1125 + | 1126 + | 1129 + + interface LaunchShowOption { + /** 打开小程序的路径 */ + path: string + /** 打开小程序的query */ + query: IAnyObject + /** 打开小程序的场景值 + * - 1001:发现栏小程序主入口,「最近使用」列表(基础库2.2.4版本起包含「我的小程序」列表) + * - 1005:微信首页顶部搜索框的搜索结果页 + * - 1006:发现栏小程序主入口搜索框的搜索结果页 + * - 1007:单人聊天会话中的小程序消息卡片 + * - 1008:群聊会话中的小程序消息卡片 + * - 1011:扫描二维码 + * - 1012:长按图片识别二维码 + * - 1013:扫描手机相册中选取的二维码 + * - 1014:小程序模板消息 + * - 1017:前往小程序体验版的入口页 + * - 1019:微信钱包(微信客户端7.0.0版本改为支付入口) + * - 1020:公众号 profile 页相关小程序列表 + * - 1023:安卓系统桌面图标 + * - 1024:小程序 profile 页 + * - 1025:扫描一维码 + * - 1026:发现栏小程序主入口,「附近的小程序」列表 + * - 1027:微信首页顶部搜索框搜索结果页「使用过的小程序」列表 + * - 1028:我的卡包 + * - 1029:小程序中的卡券详情页 + * - 1030:自动化测试下打开小程序 + * - 1031:长按图片识别一维码 + * - 1032:扫描手机相册中选取的一维码 + * - 1034:微信支付完成页 + * - 1035:公众号自定义菜单 + * - 1036:App 分享消息卡片 + * - 1037:小程序打开小程序 + * - 1038:从另一个小程序返回 + * - 1039:摇电视 + * - 1042:添加好友搜索框的搜索结果页 + * - 1043:公众号模板消息 + * - 1044:带 shareTicket 的小程序消息卡片 [详情](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/share.html) + * - 1045:朋友圈广告 + * - 1046:朋友圈广告详情页 + * - 1047:扫描小程序码 + * - 1048:长按图片识别小程序码 + * - 1049:扫描手机相册中选取的小程序码 + * - 1052:卡券的适用门店列表 + * - 1053:搜一搜的结果页 + * - 1056:聊天顶部音乐播放器右上角菜单 + * - 1057:钱包中的银行卡详情页 + * - 1058:公众号文章 + * - 1059:体验版小程序绑定邀请页 + * - 1064:微信首页连Wi-Fi状态栏 + * - 1067:公众号文章广告 + * - 1069:移动应用 + * - 1071:钱包中的银行卡列表页 + * - 1072:二维码收款页面 + * - 1073:客服消息列表下发的小程序消息卡片 + * - 1074:公众号会话下发的小程序消息卡片 + * - 1077:摇周边 + * - 1078:微信连Wi-Fi成功提示页 + * - 1079:微信游戏中心 + * - 1081:客服消息下发的文字链 + * - 1082:公众号会话下发的文字链 + * - 1084:朋友圈广告原生页 + * - 1089:微信聊天主界面下拉,「最近使用」栏(基础库2.2.4版本起包含「我的小程序」栏) + * - 1090:长按小程序右上角菜单唤出最近使用历史 + * - 1091:公众号文章商品卡片 + * - 1092:城市服务入口 + * - 1095:小程序广告组件 + * - 1096:聊天记录 + * - 1097:微信支付签约页 + * - 1099:页面内嵌插件 + * - 1102:公众号 profile 页服务预览 + * - 1124:扫“一物一码”打开小程序 + * - 1125:长按图片识别“一物一码” + * - 1126:扫描手机相册中选取的“一物一码” + * - 1129:微信爬虫访问 [详情](https://developers.weixin.qq.com/miniprogram/dev/reference/configuration/sitemap.html) + */ + scene: SceneValues + /** shareTicket,详见 [获取更多转发信息]((转发#获取更多转发信息)) */ + shareTicket: string + /** 当场景为由从另一个小程序或公众号或App打开时,返回此字段 */ + referrerInfo?: ReferrerInfo + } + + interface PageNotFoundOption { + /** 不存在页面的路径 */ + path: string + /** 打开不存在页面的 query */ + query: IAnyObject + /** 是否本次启动的首个页面(例如从分享等入口进来,首个页面是开发者配置的分享页面) */ + isEntryPage: boolean + } + + interface Option { + /** 生命周期回调—监听小程序初始化 + * + * 小程序初始化完成时触发,全局只触发一次。 + */ + onLaunch(options: LaunchShowOption): void + /** 生命周期回调—监听小程序显示 + * + * 小程序启动,或从后台进入前台显示时 + */ + onShow(options: LaunchShowOption): void + /** 生命周期回调—监听小程序隐藏 + * + * 小程序从前台进入后台时 + */ + onHide(): void + /** 错误监听函数 + * + * 小程序发生脚本错误,或者 api + */ + onError(/** 错误信息,包含堆栈 */ error: string): void + /** 页面不存在监听函数 + * + * 小程序要打开的页面不存在时触发,会带上页面信息回调该函数 + * + * **注意:** + * 1. 如果开发者没有添加 `onPageNotFound` 监听,当跳转页面不存在时,将推入微信客户端原生的页面不存在提示页面。 + * 2. 如果 `onPageNotFound` 回调中又重定向到另一个不存在的页面,将推入微信客户端原生的页面不存在提示页面,并且不再回调 `onPageNotFound`。 + * + * 最低基础库: 1.9.90 + */ + onPageNotFound(options: PageNotFoundOption): void + /** + * 小程序有未处理的 Promise 拒绝时触发。也可以使用 [wx.onUnhandledRejection](https://developers.weixin.qq.com/miniprogram/dev/api/base/app/app-event/wx.onUnhandledRejection.html) 绑定监听。注意事项请参考 [wx.onUnhandledRejection](https://developers.weixin.qq.com/miniprogram/dev/api/base/app/app-event/wx.onUnhandledRejection.html)。 + * **参数**:与 [wx.onUnhandledRejection](https://developers.weixin.qq.com/miniprogram/dev/api/base/app/app-event/wx.onUnhandledRejection.html) 一致 + */ + onUnhandledRejection: OnUnhandledRejectionCallback + /** + * 系统切换主题时触发。也可以使用 wx.onThemeChange 绑定监听。 + * + * 最低基础库: 2.11.0 + */ + onThemeChange: OnThemeChangeCallback + } + + type Instance<T extends IAnyObject> = Option & T + type Options<T extends IAnyObject> = Partial<Option> & + T & + ThisType<Instance<T>> + type TrivialInstance = Instance<IAnyObject> + + interface Constructor { + <T extends IAnyObject>(options: Options<T>): void + } + + interface GetAppOption { + /** 在 `App` 未定义时返回默认实现。当App被调用时,默认实现中定义的属性会被覆盖合并到App中。一般用于独立分包 + * + * 最低基础库: 2.2.4 + */ + allowDefault?: boolean + } + + interface GetApp { + <T extends IAnyObject = IAnyObject>(opts?: GetAppOption): Instance<T> + } +} + +declare let App: WechatMiniprogram.App.Constructor +declare let getApp: WechatMiniprogram.App.GetApp diff --git a/scr/weichat_work/typings/types/wx/lib.wx.behavior.d.ts b/scr/weichat_work/typings/types/wx/lib.wx.behavior.d.ts new file mode 100644 index 0000000..f33605b --- /dev/null +++ b/scr/weichat_work/typings/types/wx/lib.wx.behavior.d.ts @@ -0,0 +1,68 @@ +/*! ***************************************************************************** +Copyright (c) 2022 Tencent, Inc. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +***************************************************************************** */ + +declare namespace WechatMiniprogram.Behavior { + type BehaviorIdentifier = string + type Instance< + TData extends DataOption, + TProperty extends PropertyOption, + TMethod extends MethodOption, + TCustomInstanceProperty extends IAnyObject = Record<string, never> + > = Component.Instance<TData, TProperty, TMethod, TCustomInstanceProperty> + type TrivialInstance = Instance<IAnyObject, IAnyObject, IAnyObject> + type TrivialOption = Options<IAnyObject, IAnyObject, IAnyObject> + type Options< + TData extends DataOption, + TProperty extends PropertyOption, + TMethod extends MethodOption, + TCustomInstanceProperty extends IAnyObject = Record<string, never> + > = Partial<Data<TData>> & + Partial<Property<TProperty>> & + Partial<Method<TMethod>> & + Partial<OtherOption> & + Partial<Lifetimes> & + ThisType<Instance<TData, TProperty, TMethod, TCustomInstanceProperty>> + interface Constructor { + < + TData extends DataOption, + TProperty extends PropertyOption, + TMethod extends MethodOption, + TCustomInstanceProperty extends IAnyObject = Record<string, never> + >( + options: Options<TData, TProperty, TMethod, TCustomInstanceProperty> + ): BehaviorIdentifier + } + + type DataOption = Component.DataOption + type PropertyOption = Component.PropertyOption + type MethodOption = Component.MethodOption + type Data<D extends DataOption> = Component.Data<D> + type Property<P extends PropertyOption> = Component.Property<P> + type Method<M extends MethodOption> = Component.Method<M> + + type DefinitionFilter = Component.DefinitionFilter + type Lifetimes = Component.Lifetimes + + type OtherOption = Omit<Component.OtherOption, 'options'> +} +/** 注册一个 `behavior`,接受一个 `Object` 类型的参数。*/ +declare let Behavior: WechatMiniprogram.Behavior.Constructor diff --git a/scr/weichat_work/typings/types/wx/lib.wx.cloud.d.ts b/scr/weichat_work/typings/types/wx/lib.wx.cloud.d.ts new file mode 100644 index 0000000..95c43d3 --- /dev/null +++ b/scr/weichat_work/typings/types/wx/lib.wx.cloud.d.ts @@ -0,0 +1,979 @@ +/*! ***************************************************************************** +Copyright (c) 2022 Tencent, Inc. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +***************************************************************************** */ + +interface IAPIError { + errMsg: string +} + +interface IAPIParam<T = any> { + config?: ICloudConfig + success?: (res: T) => void + fail?: (err: IAPIError) => void + complete?: (val: T | IAPIError) => void +} + +interface IAPISuccessParam { + errMsg: string +} + +type IAPICompleteParam = IAPISuccessParam | IAPIError + +type IAPIFunction<T, P extends IAPIParam<T>> = (param?: P) => Promise<T> + +interface IInitCloudConfig { + env?: + | string + | { + database?: string + functions?: string + storage?: string + } + traceUser?: boolean +} + +interface ICloudConfig { + env?: string + traceUser?: boolean +} + +interface IICloudAPI { + init: (config?: IInitCloudConfig) => void + [api: string]: AnyFunction | IAPIFunction<any, any> +} + +interface ICloudService { + name: string + + getAPIs: () => { [name: string]: IAPIFunction<any, any> } +} + +interface ICloudServices { + [serviceName: string]: ICloudService +} + +interface ICloudMetaData { + session_id: string +} + +declare class InternalSymbol {} + +interface AnyObject { + [x: string]: any +} + +type AnyArray = any[] + +type AnyFunction = (...args: any[]) => any + +/** + * extend wx with cloud + */ +interface WxCloud { + init: (config?: ICloudConfig) => void + + callFunction(param: OQ<ICloud.CallFunctionParam>): void + callFunction( + param: RQ<ICloud.CallFunctionParam> + ): Promise<ICloud.CallFunctionResult> + + uploadFile(param: OQ<ICloud.UploadFileParam>): WechatMiniprogram.UploadTask + uploadFile( + param: RQ<ICloud.UploadFileParam> + ): Promise<ICloud.UploadFileResult> + + downloadFile( + param: OQ<ICloud.DownloadFileParam> + ): WechatMiniprogram.DownloadTask + downloadFile( + param: RQ<ICloud.DownloadFileParam> + ): Promise<ICloud.DownloadFileResult> + + getTempFileURL(param: OQ<ICloud.GetTempFileURLParam>): void + getTempFileURL( + param: RQ<ICloud.GetTempFileURLParam> + ): Promise<ICloud.GetTempFileURLResult> + + deleteFile(param: OQ<ICloud.DeleteFileParam>): void + deleteFile( + param: RQ<ICloud.DeleteFileParam> + ): Promise<ICloud.DeleteFileResult> + + database: (config?: ICloudConfig) => DB.Database + + CloudID: ICloud.ICloudIDConstructor + CDN: ICloud.ICDNConstructor + + callContainer(param: OQ<ICloud.CallContainerParam>): void + callContainer( + param: RQ<ICloud.CallContainerParam> + ): Promise<ICloud.CallContainerResult> + + connectContainer(param: OQ<ICloud.ConnectContainerParam>): void + connectContainer( + param: RQ<ICloud.ConnectContainerParam> + ): Promise<ICloud.ConnectContainerResult> +} + +declare namespace ICloud { + interface ICloudAPIParam<T = any> extends IAPIParam<T> { + config?: ICloudConfig + } + + // === API: callFunction === + type CallFunctionData = AnyObject + + interface CallFunctionResult extends IAPISuccessParam { + result: AnyObject | string | undefined + } + + interface CallFunctionParam extends ICloudAPIParam<CallFunctionResult> { + name: string + data?: CallFunctionData + slow?: boolean + } + // === end === + + // === API: container === + type CallContainerData = AnyObject + + interface CallContainerResult extends IAPISuccessParam { + data: any + statusCode: number + header: Record<string, any> + callID: string + } + + interface CallContainerParam extends ICloudAPIParam<CallContainerResult> { + path: string + service?: string + method?: string + header?: Record<string, any> + data?: any // string, object, ArrayBuffer + dataType?: string + responseType?: string + timeout?: number + verbose?: boolean + followRedirect?: boolean + } + + interface ConnectContainerResult extends IAPISuccessParam { + socketTask: WechatMiniprogram.SocketTask + } + + interface ConnectSocketOptions extends IAPIParam<void> { + header?: Record<string, string> + protocols?: string[] + tcpNoDelay?: boolean + perMessageDeflate?: boolean + timeout?: number + } + + type ConnectContainerParam = Omit< + ConnectSocketOptions, + 'success' | 'fail' | 'complete' + > & + ICloudAPIParam<ConnectContainerResult> & { + service: string + path?: string + } + // === end === + + // === API: uploadFile === + interface UploadFileResult extends IAPISuccessParam { + fileID: string + statusCode: number + } + + interface UploadFileParam extends ICloudAPIParam<UploadFileResult> { + cloudPath: string + filePath: string + header?: AnyObject + } + // === end === + + // === API: downloadFile === + interface DownloadFileResult extends IAPISuccessParam { + tempFilePath: string + statusCode: number + } + + interface DownloadFileParam extends ICloudAPIParam<DownloadFileResult> { + fileID: string + cloudPath?: string + } + // === end === + + // === API: getTempFileURL === + interface GetTempFileURLResult extends IAPISuccessParam { + fileList: GetTempFileURLResultItem[] + } + + interface GetTempFileURLResultItem { + fileID: string + tempFileURL: string + maxAge: number + status: number + errMsg: string + } + + interface GetTempFileURLParam extends ICloudAPIParam<GetTempFileURLResult> { + fileList: string[] + } + // === end === + + // === API: deleteFile === + interface DeleteFileResult extends IAPISuccessParam { + fileList: DeleteFileResultItem[] + } + + interface DeleteFileResultItem { + fileID: string + status: number + errMsg: string + } + + interface DeleteFileParam extends ICloudAPIParam<DeleteFileResult> { + fileList: string[] + } + // === end === + + // === API: CloudID === + abstract class CloudID { + constructor(cloudID: string) + } + + interface ICloudIDConstructor { + new (cloudId: string): CloudID + (cloudId: string): CloudID + } + // === end === + + // === API: CDN === + abstract class CDN { + target: string | ArrayBuffer | ICDNFilePathSpec + constructor(target: string | ArrayBuffer | ICDNFilePathSpec) + } + + interface ICDNFilePathSpec { + type: 'filePath' + filePath: string + } + + interface ICDNConstructor { + new (options: string | ArrayBuffer | ICDNFilePathSpec): CDN + (options: string | ArrayBuffer | ICDNFilePathSpec): CDN + } + // === end === +} + +// === Database === +declare namespace DB { + /** + * The class of all exposed cloud database instances + */ + class Database { + readonly config: ICloudConfig + readonly command: DatabaseCommand + readonly Geo: IGeo + readonly serverDate: () => ServerDate + readonly RegExp: IRegExpConstructor + + private constructor() + + collection(collectionName: string): CollectionReference + } + + class CollectionReference extends Query { + readonly collectionName: string + + private constructor(name: string, database: Database) + + doc(docId: string | number): DocumentReference + + add(options: OQ<IAddDocumentOptions>): void + add(options: RQ<IAddDocumentOptions>): Promise<IAddResult> + } + + class DocumentReference { + private constructor(docId: string | number, database: Database) + + field(object: Record<string, any>): this + + get(options: OQ<IGetDocumentOptions>): void + get(options?: RQ<IGetDocumentOptions>): Promise<IQuerySingleResult> + + set(options: OQ<ISetSingleDocumentOptions>): void + set(options?: RQ<ISetSingleDocumentOptions>): Promise<ISetResult> + + update(options: OQ<IUpdateSingleDocumentOptions>): void + update( + options?: RQ<IUpdateSingleDocumentOptions> + ): Promise<IUpdateResult> + + remove(options: OQ<IRemoveSingleDocumentOptions>): void + remove( + options?: RQ<IRemoveSingleDocumentOptions> + ): Promise<IRemoveResult> + + watch(options: IWatchOptions): RealtimeListener + } + + class RealtimeListener { + // "And Now His Watch Is Ended" + close: () => Promise<void> + } + + class Query { + where(condition: IQueryCondition): Query + + orderBy(fieldPath: string, order: string): Query + + limit(max: number): Query + + skip(offset: number): Query + + field(object: Record<string, any>): Query + + get(options: OQ<IGetDocumentOptions>): void + get(options?: RQ<IGetDocumentOptions>): Promise<IQueryResult> + + count(options: OQ<ICountDocumentOptions>): void + count(options?: RQ<ICountDocumentOptions>): Promise<ICountResult> + + watch(options: IWatchOptions): RealtimeListener + } + + interface DatabaseCommand { + eq(val: any): DatabaseQueryCommand + neq(val: any): DatabaseQueryCommand + gt(val: any): DatabaseQueryCommand + gte(val: any): DatabaseQueryCommand + lt(val: any): DatabaseQueryCommand + lte(val: any): DatabaseQueryCommand + in(val: any[]): DatabaseQueryCommand + nin(val: any[]): DatabaseQueryCommand + + geoNear(options: IGeoNearCommandOptions): DatabaseQueryCommand + geoWithin(options: IGeoWithinCommandOptions): DatabaseQueryCommand + geoIntersects( + options: IGeoIntersectsCommandOptions + ): DatabaseQueryCommand + + and( + ...expressions: Array<DatabaseLogicCommand | IQueryCondition> + ): DatabaseLogicCommand + or( + ...expressions: Array<DatabaseLogicCommand | IQueryCondition> + ): DatabaseLogicCommand + nor( + ...expressions: Array<DatabaseLogicCommand | IQueryCondition> + ): DatabaseLogicCommand + not(expression: DatabaseLogicCommand): DatabaseLogicCommand + + exists(val: boolean): DatabaseQueryCommand + + mod(divisor: number, remainder: number): DatabaseQueryCommand + + all(val: any[]): DatabaseQueryCommand + elemMatch(val: any): DatabaseQueryCommand + size(val: number): DatabaseQueryCommand + + set(val: any): DatabaseUpdateCommand + remove(): DatabaseUpdateCommand + inc(val: number): DatabaseUpdateCommand + mul(val: number): DatabaseUpdateCommand + min(val: number): DatabaseUpdateCommand + max(val: number): DatabaseUpdateCommand + rename(val: string): DatabaseUpdateCommand + bit(val: number): DatabaseUpdateCommand + + push(...values: any[]): DatabaseUpdateCommand + pop(): DatabaseUpdateCommand + shift(): DatabaseUpdateCommand + unshift(...values: any[]): DatabaseUpdateCommand + addToSet(val: any): DatabaseUpdateCommand + pull(val: any): DatabaseUpdateCommand + pullAll(val: any): DatabaseUpdateCommand + + project: { + slice(val: number | [number, number]): DatabaseProjectionCommand + } + + aggregate: { + __safe_props__?: Set<string> + + abs(val: any): DatabaseAggregateCommand + add(val: any): DatabaseAggregateCommand + addToSet(val: any): DatabaseAggregateCommand + allElementsTrue(val: any): DatabaseAggregateCommand + and(val: any): DatabaseAggregateCommand + anyElementTrue(val: any): DatabaseAggregateCommand + arrayElemAt(val: any): DatabaseAggregateCommand + arrayToObject(val: any): DatabaseAggregateCommand + avg(val: any): DatabaseAggregateCommand + ceil(val: any): DatabaseAggregateCommand + cmp(val: any): DatabaseAggregateCommand + concat(val: any): DatabaseAggregateCommand + concatArrays(val: any): DatabaseAggregateCommand + cond(val: any): DatabaseAggregateCommand + convert(val: any): DatabaseAggregateCommand + dateFromParts(val: any): DatabaseAggregateCommand + dateToParts(val: any): DatabaseAggregateCommand + dateFromString(val: any): DatabaseAggregateCommand + dateToString(val: any): DatabaseAggregateCommand + dayOfMonth(val: any): DatabaseAggregateCommand + dayOfWeek(val: any): DatabaseAggregateCommand + dayOfYear(val: any): DatabaseAggregateCommand + divide(val: any): DatabaseAggregateCommand + eq(val: any): DatabaseAggregateCommand + exp(val: any): DatabaseAggregateCommand + filter(val: any): DatabaseAggregateCommand + first(val: any): DatabaseAggregateCommand + floor(val: any): DatabaseAggregateCommand + gt(val: any): DatabaseAggregateCommand + gte(val: any): DatabaseAggregateCommand + hour(val: any): DatabaseAggregateCommand + ifNull(val: any): DatabaseAggregateCommand + in(val: any): DatabaseAggregateCommand + indexOfArray(val: any): DatabaseAggregateCommand + indexOfBytes(val: any): DatabaseAggregateCommand + indexOfCP(val: any): DatabaseAggregateCommand + isArray(val: any): DatabaseAggregateCommand + isoDayOfWeek(val: any): DatabaseAggregateCommand + isoWeek(val: any): DatabaseAggregateCommand + isoWeekYear(val: any): DatabaseAggregateCommand + last(val: any): DatabaseAggregateCommand + let(val: any): DatabaseAggregateCommand + literal(val: any): DatabaseAggregateCommand + ln(val: any): DatabaseAggregateCommand + log(val: any): DatabaseAggregateCommand + log10(val: any): DatabaseAggregateCommand + lt(val: any): DatabaseAggregateCommand + lte(val: any): DatabaseAggregateCommand + ltrim(val: any): DatabaseAggregateCommand + map(val: any): DatabaseAggregateCommand + max(val: any): DatabaseAggregateCommand + mergeObjects(val: any): DatabaseAggregateCommand + meta(val: any): DatabaseAggregateCommand + min(val: any): DatabaseAggregateCommand + millisecond(val: any): DatabaseAggregateCommand + minute(val: any): DatabaseAggregateCommand + mod(val: any): DatabaseAggregateCommand + month(val: any): DatabaseAggregateCommand + multiply(val: any): DatabaseAggregateCommand + neq(val: any): DatabaseAggregateCommand + not(val: any): DatabaseAggregateCommand + objectToArray(val: any): DatabaseAggregateCommand + or(val: any): DatabaseAggregateCommand + pow(val: any): DatabaseAggregateCommand + push(val: any): DatabaseAggregateCommand + range(val: any): DatabaseAggregateCommand + reduce(val: any): DatabaseAggregateCommand + reverseArray(val: any): DatabaseAggregateCommand + rtrim(val: any): DatabaseAggregateCommand + second(val: any): DatabaseAggregateCommand + setDifference(val: any): DatabaseAggregateCommand + setEquals(val: any): DatabaseAggregateCommand + setIntersection(val: any): DatabaseAggregateCommand + setIsSubset(val: any): DatabaseAggregateCommand + setUnion(val: any): DatabaseAggregateCommand + size(val: any): DatabaseAggregateCommand + slice(val: any): DatabaseAggregateCommand + split(val: any): DatabaseAggregateCommand + sqrt(val: any): DatabaseAggregateCommand + stdDevPop(val: any): DatabaseAggregateCommand + stdDevSamp(val: any): DatabaseAggregateCommand + strcasecmp(val: any): DatabaseAggregateCommand + strLenBytes(val: any): DatabaseAggregateCommand + strLenCP(val: any): DatabaseAggregateCommand + substr(val: any): DatabaseAggregateCommand + substrBytes(val: any): DatabaseAggregateCommand + substrCP(val: any): DatabaseAggregateCommand + subtract(val: any): DatabaseAggregateCommand + sum(val: any): DatabaseAggregateCommand + switch(val: any): DatabaseAggregateCommand + toBool(val: any): DatabaseAggregateCommand + toDate(val: any): DatabaseAggregateCommand + toDecimal(val: any): DatabaseAggregateCommand + toDouble(val: any): DatabaseAggregateCommand + toInt(val: any): DatabaseAggregateCommand + toLong(val: any): DatabaseAggregateCommand + toObjectId(val: any): DatabaseAggregateCommand + toString(val: any): DatabaseAggregateCommand + toLower(val: any): DatabaseAggregateCommand + toUpper(val: any): DatabaseAggregateCommand + trim(val: any): DatabaseAggregateCommand + trunc(val: any): DatabaseAggregateCommand + type(val: any): DatabaseAggregateCommand + week(val: any): DatabaseAggregateCommand + year(val: any): DatabaseAggregateCommand + zip(val: any): DatabaseAggregateCommand + } + } + + class DatabaseAggregateCommand {} + + enum LOGIC_COMMANDS_LITERAL { + AND = 'and', + OR = 'or', + NOT = 'not', + NOR = 'nor' + } + + class DatabaseLogicCommand { + and(...expressions: DatabaseLogicCommand[]): DatabaseLogicCommand + or(...expressions: DatabaseLogicCommand[]): DatabaseLogicCommand + nor(...expressions: DatabaseLogicCommand[]): DatabaseLogicCommand + not(expression: DatabaseLogicCommand): DatabaseLogicCommand + } + + enum QUERY_COMMANDS_LITERAL { + // comparison + EQ = 'eq', + NEQ = 'neq', + GT = 'gt', + GTE = 'gte', + LT = 'lt', + LTE = 'lte', + IN = 'in', + NIN = 'nin', + // geo + GEO_NEAR = 'geoNear', + GEO_WITHIN = 'geoWithin', + GEO_INTERSECTS = 'geoIntersects', + // element + EXISTS = 'exists', + // evaluation + MOD = 'mod', + // array + ALL = 'all', + ELEM_MATCH = 'elemMatch', + SIZE = 'size' + } + + class DatabaseQueryCommand extends DatabaseLogicCommand { + eq(val: any): DatabaseLogicCommand + neq(val: any): DatabaseLogicCommand + gt(val: any): DatabaseLogicCommand + gte(val: any): DatabaseLogicCommand + lt(val: any): DatabaseLogicCommand + lte(val: any): DatabaseLogicCommand + in(val: any[]): DatabaseLogicCommand + nin(val: any[]): DatabaseLogicCommand + + exists(val: boolean): DatabaseLogicCommand + + mod(divisor: number, remainder: number): DatabaseLogicCommand + + all(val: any[]): DatabaseLogicCommand + elemMatch(val: any): DatabaseLogicCommand + size(val: number): DatabaseLogicCommand + + geoNear(options: IGeoNearCommandOptions): DatabaseLogicCommand + geoWithin(options: IGeoWithinCommandOptions): DatabaseLogicCommand + geoIntersects( + options: IGeoIntersectsCommandOptions + ): DatabaseLogicCommand + } + + enum PROJECTION_COMMANDS_LITERAL { + SLICE = 'slice' + } + + class DatabaseProjectionCommand {} + + enum UPDATE_COMMANDS_LITERAL { + // field + SET = 'set', + REMOVE = 'remove', + INC = 'inc', + MUL = 'mul', + MIN = 'min', + MAX = 'max', + RENAME = 'rename', + // bitwise + BIT = 'bit', + // array + PUSH = 'push', + POP = 'pop', + SHIFT = 'shift', + UNSHIFT = 'unshift', + ADD_TO_SET = 'addToSet', + PULL = 'pull', + PULL_ALL = 'pullAll' + } + + class DatabaseUpdateCommand {} + + class Batch {} + + /** + * A contract that all API provider must adhere to + */ + class APIBaseContract< + PromiseReturn, + CallbackReturn, + Param extends IAPIParam, + Context = any + > { + getContext(param: Param): Context + + /** + * In case of callback-style invocation, this function will be called + */ + getCallbackReturn(param: Param, context: Context): CallbackReturn + + getFinalParam<T extends Param>(param: Param, context: Context): T + + run<T extends Param>(param: T): Promise<PromiseReturn> + } + + interface IGeoPointConstructor { + new (longitude: number, latitide: number): GeoPoint + new (geojson: IGeoJSONPoint): GeoPoint + (longitude: number, latitide: number): GeoPoint + (geojson: IGeoJSONPoint): GeoPoint + } + + interface IGeoMultiPointConstructor { + new (points: GeoPoint[] | IGeoJSONMultiPoint): GeoMultiPoint + (points: GeoPoint[] | IGeoJSONMultiPoint): GeoMultiPoint + } + + interface IGeoLineStringConstructor { + new (points: GeoPoint[] | IGeoJSONLineString): GeoLineString + (points: GeoPoint[] | IGeoJSONLineString): GeoLineString + } + + interface IGeoMultiLineStringConstructor { + new ( + lineStrings: GeoLineString[] | IGeoJSONMultiLineString + ): GeoMultiLineString + ( + lineStrings: GeoLineString[] | IGeoJSONMultiLineString + ): GeoMultiLineString + } + + interface IGeoPolygonConstructor { + new (lineStrings: GeoLineString[] | IGeoJSONPolygon): GeoPolygon + (lineStrings: GeoLineString[] | IGeoJSONPolygon): GeoPolygon + } + + interface IGeoMultiPolygonConstructor { + new (polygons: GeoPolygon[] | IGeoJSONMultiPolygon): GeoMultiPolygon + (polygons: GeoPolygon[] | IGeoJSONMultiPolygon): GeoMultiPolygon + } + + interface IGeo { + Point: IGeoPointConstructor + MultiPoint: IGeoMultiPointConstructor + LineString: IGeoLineStringConstructor + MultiLineString: IGeoMultiLineStringConstructor + Polygon: IGeoPolygonConstructor + MultiPolygon: IGeoMultiPolygonConstructor + } + + interface IGeoJSONPoint { + type: 'Point' + coordinates: [number, number] + } + + interface IGeoJSONMultiPoint { + type: 'MultiPoint' + coordinates: Array<[number, number]> + } + + interface IGeoJSONLineString { + type: 'LineString' + coordinates: Array<[number, number]> + } + + interface IGeoJSONMultiLineString { + type: 'MultiLineString' + coordinates: Array<Array<[number, number]>> + } + + interface IGeoJSONPolygon { + type: 'Polygon' + coordinates: Array<Array<[number, number]>> + } + + interface IGeoJSONMultiPolygon { + type: 'MultiPolygon' + coordinates: Array<Array<Array<[number, number]>>> + } + + type IGeoJSONObject = + | IGeoJSONPoint + | IGeoJSONMultiPoint + | IGeoJSONLineString + | IGeoJSONMultiLineString + | IGeoJSONPolygon + | IGeoJSONMultiPolygon + + abstract class GeoPoint { + longitude: number + latitude: number + + constructor(longitude: number, latitude: number) + + toJSON(): Record<string, any> + toString(): string + } + + abstract class GeoMultiPoint { + points: GeoPoint[] + + constructor(points: GeoPoint[]) + + toJSON(): IGeoJSONMultiPoint + toString(): string + } + + abstract class GeoLineString { + points: GeoPoint[] + + constructor(points: GeoPoint[]) + + toJSON(): IGeoJSONLineString + toString(): string + } + + abstract class GeoMultiLineString { + lines: GeoLineString[] + + constructor(lines: GeoLineString[]) + + toJSON(): IGeoJSONMultiLineString + toString(): string + } + + abstract class GeoPolygon { + lines: GeoLineString[] + + constructor(lines: GeoLineString[]) + + toJSON(): IGeoJSONPolygon + toString(): string + } + + abstract class GeoMultiPolygon { + polygons: GeoPolygon[] + + constructor(polygons: GeoPolygon[]) + + toJSON(): IGeoJSONMultiPolygon + toString(): string + } + + type GeoInstance = + | GeoPoint + | GeoMultiPoint + | GeoLineString + | GeoMultiLineString + | GeoPolygon + | GeoMultiPolygon + + interface IGeoNearCommandOptions { + geometry: GeoPoint + maxDistance?: number + minDistance?: number + } + + interface IGeoWithinCommandOptions { + geometry: GeoPolygon | GeoMultiPolygon + } + + interface IGeoIntersectsCommandOptions { + geometry: + | GeoPoint + | GeoMultiPoint + | GeoLineString + | GeoMultiLineString + | GeoPolygon + | GeoMultiPolygon + } + + interface IServerDateOptions { + offset: number + } + + abstract class ServerDate { + readonly options: IServerDateOptions + constructor(options?: IServerDateOptions) + } + + interface IRegExpOptions { + regexp: string + options?: string + } + + interface IRegExpConstructor { + new (options: IRegExpOptions): RegExp + (options: IRegExpOptions): RegExp + } + + abstract class RegExp { + readonly regexp: string + readonly options: string + constructor(options: IRegExpOptions) + } + + type DocumentId = string | number + + interface IDocumentData { + _id?: DocumentId + [key: string]: any + } + + type IDBAPIParam = IAPIParam + + interface IAddDocumentOptions extends IDBAPIParam { + data: IDocumentData + } + + type IGetDocumentOptions = IDBAPIParam + + type ICountDocumentOptions = IDBAPIParam + + interface IUpdateDocumentOptions extends IDBAPIParam { + data: IUpdateCondition + } + + interface IUpdateSingleDocumentOptions extends IDBAPIParam { + data: IUpdateCondition + } + + interface ISetDocumentOptions extends IDBAPIParam { + data: IUpdateCondition + } + + interface ISetSingleDocumentOptions extends IDBAPIParam { + data: IUpdateCondition + } + + interface IRemoveDocumentOptions extends IDBAPIParam { + query: IQueryCondition + } + + type IRemoveSingleDocumentOptions = IDBAPIParam + + interface IWatchOptions { + // server realtime data init & change event + onChange: (snapshot: ISnapshot) => void + // error while connecting / listening + onError: (error: any) => void + } + + interface ISnapshot { + id: number + docChanges: ISingleDBEvent[] + docs: Record<string, any> + type?: SnapshotType + } + + type SnapshotType = 'init' + + interface ISingleDBEvent { + id: number + dataType: DataType + queueType: QueueType + docId: string + doc: Record<string, any> + updatedFields?: Record<string, any> + removedFields?: string[] + } + + type DataType = 'init' | 'update' | 'replace' | 'add' | 'remove' | 'limit' + + type QueueType = 'init' | 'enqueue' | 'dequeue' | 'update' + + interface IQueryCondition { + [key: string]: any + } + + type IStringQueryCondition = string + + interface IQueryResult extends IAPISuccessParam { + data: IDocumentData[] + } + + interface IQuerySingleResult extends IAPISuccessParam { + data: IDocumentData + } + + interface IUpdateCondition { + [key: string]: any + } + + type IStringUpdateCondition = string + + interface IAddResult extends IAPISuccessParam { + _id: DocumentId + } + + interface IUpdateResult extends IAPISuccessParam { + stats: { + updated: number + // created: number, + } + } + + interface ISetResult extends IAPISuccessParam { + _id: DocumentId + stats: { + updated: number + created: number + } + } + + interface IRemoveResult extends IAPISuccessParam { + stats: { + removed: number + } + } + + interface ICountResult extends IAPISuccessParam { + total: number + } +} + +type Optional<T> = { [K in keyof T]+?: T[K] } + +type OQ< + T extends Optional< + Record<'complete' | 'success' | 'fail', (...args: any[]) => any> + > +> = + | (RQ<T> & Required<Pick<T, 'success'>>) + | (RQ<T> & Required<Pick<T, 'fail'>>) + | (RQ<T> & Required<Pick<T, 'complete'>>) + | (RQ<T> & Required<Pick<T, 'success' | 'fail'>>) + | (RQ<T> & Required<Pick<T, 'success' | 'complete'>>) + | (RQ<T> & Required<Pick<T, 'fail' | 'complete'>>) + | (RQ<T> & Required<Pick<T, 'fail' | 'complete' | 'success'>>) + +type RQ< + T extends Optional< + Record<'complete' | 'success' | 'fail', (...args: any[]) => any> + > +> = Pick<T, Exclude<keyof T, 'complete' | 'success' | 'fail'>> diff --git a/scr/weichat_work/typings/types/wx/lib.wx.component.d.ts b/scr/weichat_work/typings/types/wx/lib.wx.component.d.ts new file mode 100644 index 0000000..c744fe1 --- /dev/null +++ b/scr/weichat_work/typings/types/wx/lib.wx.component.d.ts @@ -0,0 +1,676 @@ +/*! ***************************************************************************** +Copyright (c) 2022 Tencent, Inc. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +***************************************************************************** */ + +declare namespace WechatMiniprogram.Component { + type Instance< + TData extends DataOption, + TProperty extends PropertyOption, + TMethod extends Partial<MethodOption>, + TCustomInstanceProperty extends IAnyObject = {}, + TIsPage extends boolean = false + > = InstanceProperties & + InstanceMethods<TData> & + TMethod & + (TIsPage extends true ? Page.ILifetime : {}) & + TCustomInstanceProperty & { + /** 组件数据,**包括内部数据和属性值** */ + data: TData & PropertyOptionToData<TProperty> + /** 组件数据,**包括内部数据和属性值**(与 `data` 一致) */ + properties: TData & PropertyOptionToData<TProperty> + } + type TrivialInstance = Instance< + IAnyObject, + IAnyObject, + IAnyObject, + IAnyObject + > + type TrivialOption = Options<IAnyObject, IAnyObject, IAnyObject, IAnyObject> + type Options< + TData extends DataOption, + TProperty extends PropertyOption, + TMethod extends MethodOption, + TCustomInstanceProperty extends IAnyObject = {}, + TIsPage extends boolean = false + > = Partial<Data<TData>> & + Partial<Property<TProperty>> & + Partial<Method<TMethod, TIsPage>> & + Partial<OtherOption> & + Partial<Lifetimes> & + ThisType< + Instance< + TData, + TProperty, + TMethod, + TCustomInstanceProperty, + TIsPage + > + > + interface Constructor { + < + TData extends DataOption, + TProperty extends PropertyOption, + TMethod extends MethodOption, + TCustomInstanceProperty extends IAnyObject = {}, + TIsPage extends boolean = false + >( + options: Options< + TData, + TProperty, + TMethod, + TCustomInstanceProperty, + TIsPage + > + ): string + } + type DataOption = Record<string, any> + type PropertyOption = Record<string, AllProperty> + type MethodOption = Record<string, Function> + + interface Data<D extends DataOption> { + /** 组件的内部数据,和 `properties` 一同用于组件的模板渲染 */ + data?: D + } + interface Property<P extends PropertyOption> { + /** 组件的对外属性,是属性名到属性设置的映射表 */ + properties: P + } + interface Method<M extends MethodOption, TIsPage extends boolean = false> { + /** 组件的方法,包括事件响应函数和任意的自定义方法,关于事件响应函数的使用,参见 [组件间通信与事件](https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/events.html) */ + methods: M & (TIsPage extends true ? Partial<Page.ILifetime> : {}) + } + type PropertyType = + | StringConstructor + | NumberConstructor + | BooleanConstructor + | ArrayConstructor + | ObjectConstructor + | null + type ValueType<T extends PropertyType> = T extends null + ? any + : T extends StringConstructor + ? string + : T extends NumberConstructor + ? number + : T extends BooleanConstructor + ? boolean + : T extends ArrayConstructor + ? any[] + : T extends ObjectConstructor + ? IAnyObject + : never + type FullProperty<T extends PropertyType> = { + /** 属性类型 */ + type: T + /** 属性初始值 */ + value?: ValueType<T> + /** 属性值被更改时的响应函数 */ + observer?: + | string + | (( + newVal: ValueType<T>, + oldVal: ValueType<T>, + changedPath: Array<string | number> + ) => void) + /** 属性的类型(可以指定多个) */ + optionalTypes?: ShortProperty[] + } + type AllFullProperty = + | FullProperty<StringConstructor> + | FullProperty<NumberConstructor> + | FullProperty<BooleanConstructor> + | FullProperty<ArrayConstructor> + | FullProperty<ObjectConstructor> + | FullProperty<null> + type ShortProperty = + | StringConstructor + | NumberConstructor + | BooleanConstructor + | ArrayConstructor + | ObjectConstructor + | null + type AllProperty = AllFullProperty | ShortProperty + type PropertyToData<T extends AllProperty> = T extends ShortProperty + ? ValueType<T> + : FullPropertyToData<Exclude<T, ShortProperty>> + type FullPropertyToData<T extends AllFullProperty> = ValueType<T['type']> + // type FullPropertyToData<T extends AllFullProperty> = unknown extends T['value'] ? ValueType<T['type']> : T['value'] + type PropertyOptionToData<P extends PropertyOption> = { + [name in keyof P]: PropertyToData<P[name]> + } + + interface InstanceProperties { + /** 组件的文件路径 */ + is: string + /** 节点id */ + id: string + /** 节点dataset */ + dataset: Record<string, string> + } + + interface InstanceMethods<D extends DataOption> { + /** `setData` 函数用于将数据从逻辑层发送到视图层 + *(异步),同时改变对应的 `this.data` 的值(同步)。 + * + * **注意:** + * + * 1. **直接修改 this.data 而不调用 this.setData 是无法改变页面的状态的,还会造成数据不一致**。 + * 1. 仅支持设置可 JSON 化的数据。 + * 1. 单次设置的数据不能超过1024kB,请尽量避免一次设置过多的数据。 + * 1. 请不要把 data 中任何一项的 value 设为 `undefined` ,否则这一项将不被设置并可能遗留一些潜在问题。 + */ + setData( + /** 这次要改变的数据 + * + * 以 `key: value` 的形式表示,将 `this.data` 中的 `key` 对应的值改变成 `value`。 + * + * 其中 `key` 可以以数据路径的形式给出,支持改变数组中的某一项或对象的某个属性,如 `array[2].message`,`a.b.c.d`,并且不需要在 this.data 中预先定义。 + */ + data: Partial<D> & IAnyObject, + /** setData引起的界面更新渲染完毕后的回调函数,最低基础库: `1.5.0` */ + callback?: () => void + ): void + + /** 检查组件是否具有 `behavior` (检查时会递归检查被直接或间接引入的所有behavior) */ + hasBehavior(behavior: Behavior.BehaviorIdentifier): void + /** 触发事件,参见组件事件 */ + triggerEvent<DetailType = any>( + name: string, + detail?: DetailType, + options?: TriggerEventOption + ): void + /** 创建一个 SelectorQuery 对象,选择器选取范围为这个组件实例内 */ + createSelectorQuery(): SelectorQuery + /** 创建一个 IntersectionObserver 对象,选择器选取范围为这个组件实例内 */ + createIntersectionObserver( + options: CreateIntersectionObserverOption + ): IntersectionObserver + /** 使用选择器选择组件实例节点,返回匹配到的第一个组件实例对象(会被 `wx://component-export` 影响) */ + selectComponent(selector: string): TrivialInstance + /** 使用选择器选择组件实例节点,返回匹配到的全部组件实例对象组成的数组 */ + selectAllComponents(selector: string): TrivialInstance[] + /** + * 选取当前组件节点所在的组件实例(即组件的引用者),返回它的组件实例对象(会被 `wx://component-export` 影响) + * + * 最低基础库版本:[`2.8.2`](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) + **/ + selectOwnerComponent(): TrivialInstance + /** 获取这个关系所对应的所有关联节点,参见 组件间关系 */ + getRelationNodes(relationKey: string): TrivialInstance[] + /** + * 立刻执行 callback ,其中的多个 setData 之间不会触发界面绘制(只有某些特殊场景中需要,如用于在不同组件同时 setData 时进行界面绘制同步) + * + * 最低基础库版本:[`2.4.0`](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) + **/ + groupSetData(callback?: () => void): void + /** + * 返回当前页面的 custom-tab-bar 的组件实例 + * + * 最低基础库版本:[`2.6.2`](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) + **/ + getTabBar(): TrivialInstance + /** + * 返回页面标识符(一个字符串),可以用来判断几个自定义组件实例是不是在同一个页面内 + * + * 最低基础库版本:[`2.7.1`](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) + **/ + getPageId(): string + /** + * 执行关键帧动画,详见[动画](https://developers.weixin.qq.com/miniprogram/dev/framework/view/animation.html) + * + * 最低基础库版本:[`2.9.0`](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) + **/ + animate( + selector: string, + keyFrames: KeyFrame[], + duration: number, + callback?: () => void + ): void + /** + * 执行关键帧动画,详见[动画](https://developers.weixin.qq.com/miniprogram/dev/framework/view/animation.html) + * + * 最低基础库版本:[`2.9.0`](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) + **/ + animate( + selector: string, + keyFrames: ScrollTimelineKeyframe[], + duration: number, + scrollTimeline: ScrollTimelineOption + ): void + /** + * 清除关键帧动画,详见[动画](https://developers.weixin.qq.com/miniprogram/dev/framework/view/animation.html) + * + * 最低基础库版本:[`2.9.0`](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) + **/ + clearAnimation(selector: string, callback: () => void): void + /** + * 清除关键帧动画,详见[动画](https://developers.weixin.qq.com/miniprogram/dev/framework/view/animation.html) + * + * 最低基础库版本:[`2.9.0`](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) + **/ + clearAnimation( + selector: string, + options?: ClearAnimationOptions, + callback?: () => void + ): void + /** + * 当从另一页面跳转到该页面时,获得与来源页面实例通信当事件通道,详见 [wx.navigateTo]((wx.navigateTo)) + * + * 最低基础库版本:[`2.7.3`](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) + */ + getOpenerEventChannel(): EventChannel + /** + * 获取更新性能统计信息,详见 [获取更新性能统计信息]((custom-component/update-perf-stat)) + * + * + * 最低基础库版本:[`2.12.0`](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) + */ + setUpdatePerformanceListener<WithDataPath extends boolean = false>( + options: SetUpdatePerformanceListenerOption<WithDataPath>, + callback?: UpdatePerformanceListener<WithDataPath> + ): void + } + + interface ComponentOptions { + /** + * [启用多slot支持](https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/wxml-wxss.html#组件wxml的slot) + */ + multipleSlots?: boolean + /** + * [组件样式隔离](https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/wxml-wxss.html#组件样式隔离) + */ + addGlobalClass?: boolean + /** + * [组件样式隔离](https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/wxml-wxss.html#组件样式隔离) + */ + styleIsolation?: + | 'isolated' + | 'apply-shared' + | 'shared' + | 'page-isolated' + | 'page-apply-shared' + | 'page-shared' + /** + * [纯数据字段](https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/pure-data.html) 是一些不用于界面渲染的 data 字段,可以用于提升页面更新性能。从小程序基础库版本 2.8.2 开始支持。 + */ + pureDataPattern?: RegExp + /** + * [虚拟化组件节点](https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/wxml-wxss.html#%E8%99%9A%E6%8B%9F%E5%8C%96%E7%BB%84%E4%BB%B6%E8%8A%82%E7%82%B9) 使自定义组件内部的第一层节点由自定义组件本身完全决定。从小程序基础库版本 [`2.11.2`](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 开始支持 */ + virtualHost?: boolean + } + + interface TriggerEventOption { + /** 事件是否冒泡 + * + * 默认值: `false` + */ + bubbles?: boolean + /** 事件是否可以穿越组件边界,为false时,事件将只能在引用组件的节点树上触发,不进入其他任何组件内部 + * + * 默认值: `false` + */ + composed?: boolean + /** 事件是否拥有捕获阶段 + * + * 默认值: `false` + */ + capturePhase?: boolean + } + + interface RelationOption { + /** 目标组件的相对关系 */ + type: 'parent' | 'child' | 'ancestor' | 'descendant' + /** 关系生命周期函数,当关系被建立在页面节点树中时触发,触发时机在组件attached生命周期之后 */ + linked?(target: TrivialInstance): void + /** 关系生命周期函数,当关系在页面节点树中发生改变时触发,触发时机在组件moved生命周期之后 */ + linkChanged?(target: TrivialInstance): void + /** 关系生命周期函数,当关系脱离页面节点树时触发,触发时机在组件detached生命周期之后 */ + unlinked?(target: TrivialInstance): void + /** 如果这一项被设置,则它表示关联的目标节点所应具有的behavior,所有拥有这一behavior的组件节点都会被关联 */ + target?: string + } + + interface PageLifetimes { + /** 页面生命周期回调—监听页面显示 + * + * 页面显示/切入前台时触发。 + */ + show(): void + /** 页面生命周期回调—监听页面隐藏 + * + * 页面隐藏/切入后台时触发。 如 `navigateTo` 或底部 `tab` 切换到其他页面,小程序切入后台等。 + */ + hide(): void + /** 页面生命周期回调—监听页面尺寸变化 + * + * 所在页面尺寸变化时执行 + */ + resize(size: Page.IResizeOption): void + } + + type DefinitionFilter = <T extends TrivialOption>( + /** 使用该 behavior 的 component/behavior 的定义对象 */ + defFields: T, + /** 该 behavior 所使用的 behavior 的 definitionFilter 函数列表 */ + definitionFilterArr?: DefinitionFilter[] + ) => void + + interface Lifetimes { + /** 组件生命周期声明对象,组件的生命周期:`created`、`attached`、`ready`、`moved`、`detached` 将收归到 `lifetimes` 字段内进行声明,原有声明方式仍旧有效,如同时存在两种声明方式,则 `lifetimes` 字段内声明方式优先级最高 + * + * 最低基础库: `2.2.3` */ + lifetimes: Partial<{ + /** + * 在组件实例刚刚被创建时执行,注意此时不能调用 `setData` + * + * 最低基础库版本:[`1.6.3`](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) + */ + created(): void + /** + * 在组件实例进入页面节点树时执行 + * + * 最低基础库版本:[`1.6.3`](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) + */ + attached(): void + /** + * 在组件在视图层布局完成后执行 + * + * 最低基础库版本:[`1.6.3`](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) + */ + ready(): void + /** + * 在组件实例被移动到节点树另一个位置时执行 + * + * 最低基础库版本:[`1.6.3`](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) + */ + moved(): void + /** + * 在组件实例被从页面节点树移除时执行 + * + * 最低基础库版本:[`1.6.3`](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) + */ + detached(): void + /** + * 每当组件方法抛出错误时执行 + * + * 最低基础库版本:[`2.4.1`](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) + */ + error(err: Error): void + }> + /** + * @deprecated 旧式的定义方式,基础库 `2.2.3` 起请在 lifetimes 中定义 + * + * 在组件实例刚刚被创建时执行 + * + * 最低基础库版本:[`1.6.3`](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) + */ + created(): void + /** + * @deprecated 旧式的定义方式,基础库 `2.2.3` 起请在 lifetimes 中定义 + * + * 在组件实例进入页面节点树时执行 + * + * 最低基础库版本:[`1.6.3`](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) + */ + attached(): void + /** + * @deprecated 旧式的定义方式,基础库 `2.2.3` 起请在 lifetimes 中定义 + * + * 在组件在视图层布局完成后执行 + * + * 最低基础库版本:[`1.6.3`](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) + */ + ready(): void + /** + * @deprecated 旧式的定义方式,基础库 `2.2.3` 起请在 lifetimes 中定义 + * + * 在组件实例被移动到节点树另一个位置时执行 + * + * 最低基础库版本:[`1.6.3`](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) + */ + moved(): void + /** + * @deprecated 旧式的定义方式,基础库 `2.2.3` 起请在 lifetimes 中定义 + * + * 在组件实例被从页面节点树移除时执行 + * + * 最低基础库版本:[`1.6.3`](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) + */ + detached(): void + /** + * @deprecated 旧式的定义方式,基础库 `2.2.3` 起请在 lifetimes 中定义 + * + * 每当组件方法抛出错误时执行 + * + * 最低基础库版本:[`2.4.1`](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) + */ + error(err: Error): void + } + + interface OtherOption { + /** 类似于mixins和traits的组件间代码复用机制,参见 [behaviors](https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/behaviors.html) */ + behaviors: Behavior.BehaviorIdentifier[] + /** + * 组件数据字段监听器,用于监听 properties 和 data 的变化,参见 [数据监听器](https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/observer.html) + * + * 最低基础库版本:[`2.6.1`](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) + */ + observers: Record<string, (...args: any[]) => any> + /** 组件间关系定义,参见 [组件间关系](https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/lifetimes.html) */ + relations: { + [componentName: string]: RelationOption + } + /** 组件接受的外部样式类,参见 [外部样式类](https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/wxml-wxss.html) */ + externalClasses?: string[] + /** 组件所在页面的生命周期声明对象,参见 [组件生命周期](https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/lifetimes.html) + * + * 最低基础库版本: [`2.2.3`](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) */ + pageLifetimes?: Partial<PageLifetimes> + /** 一些选项(文档中介绍相关特性时会涉及具体的选项设置,这里暂不列举) */ + options: ComponentOptions + + /** 定义段过滤器,用于自定义组件扩展,参见 [自定义组件扩展](https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/extend.html) + * + * 最低基础库版本: [`2.2.3`](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) */ + definitionFilter?: DefinitionFilter + /** + * 组件自定义导出,当使用 `behavior: wx://component-export` 时,这个定义段可以用于指定组件被 selectComponent 调用时的返回值,参见 [组件间通信与事件](https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/events.html) + * 最低基础库版本: [`2.2.3`](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) */ + export: () => IAnyObject + } + + interface KeyFrame { + /** 关键帧的偏移,范围[0-1] */ + offset?: number + /** 动画缓动函数 */ + ease?: string + /** 基点位置,即 CSS transform-origin */ + transformOrigin?: string + /** 背景颜色,即 CSS background-color */ + backgroundColor?: string + /** 底边位置,即 CSS bottom */ + bottom?: number | string + /** 高度,即 CSS height */ + height?: number | string + /** 左边位置,即 CSS left */ + left?: number | string + /** 宽度,即 CSS width */ + width?: number | string + /** 不透明度,即 CSS opacity */ + opacity?: number | string + /** 右边位置,即 CSS right */ + right?: number | string + /** 顶边位置,即 CSS top */ + top?: number | string + /** 变换矩阵,即 CSS transform matrix */ + matrix?: number[] + /** 三维变换矩阵,即 CSS transform matrix3d */ + matrix3d?: number[] + /** 旋转,即 CSS transform rotate */ + rotate?: number + /** 三维旋转,即 CSS transform rotate3d */ + rotate3d?: number[] + /** X 方向旋转,即 CSS transform rotateX */ + rotateX?: number + /** Y 方向旋转,即 CSS transform rotateY */ + rotateY?: number + /** Z 方向旋转,即 CSS transform rotateZ */ + rotateZ?: number + /** 缩放,即 CSS transform scale */ + scale?: number[] + /** 三维缩放,即 CSS transform scale3d */ + scale3d?: number[] + /** X 方向缩放,即 CSS transform scaleX */ + scaleX?: number + /** Y 方向缩放,即 CSS transform scaleY */ + scaleY?: number + /** Z 方向缩放,即 CSS transform scaleZ */ + scaleZ?: number + /** 倾斜,即 CSS transform skew */ + skew?: number[] + /** X 方向倾斜,即 CSS transform skewX */ + skewX?: number + /** Y 方向倾斜,即 CSS transform skewY */ + skewY?: number + /** 位移,即 CSS transform translate */ + translate?: Array<number | string> + /** 三维位移,即 CSS transform translate3d */ + translate3d?: Array<number | string> + /** X 方向位移,即 CSS transform translateX */ + translateX?: number | string + /** Y 方向位移,即 CSS transform translateY */ + translateY?: number | string + /** Z 方向位移,即 CSS transform translateZ */ + translateZ?: number | string + } + interface ClearAnimationOptions { + /** 基点位置,即 CSS transform-origin */ + transformOrigin?: boolean + /** 背景颜色,即 CSS background-color */ + backgroundColor?: boolean + /** 底边位置,即 CSS bottom */ + bottom?: boolean + /** 高度,即 CSS height */ + height?: boolean + /** 左边位置,即 CSS left */ + left?: boolean + /** 宽度,即 CSS width */ + width?: boolean + /** 不透明度,即 CSS opacity */ + opacity?: boolean + /** 右边位置,即 CSS right */ + right?: boolean + /** 顶边位置,即 CSS top */ + top?: boolean + /** 变换矩阵,即 CSS transform matrix */ + matrix?: boolean + /** 三维变换矩阵,即 CSS transform matrix3d */ + matrix3d?: boolean + /** 旋转,即 CSS transform rotate */ + rotate?: boolean + /** 三维旋转,即 CSS transform rotate3d */ + rotate3d?: boolean + /** X 方向旋转,即 CSS transform rotateX */ + rotateX?: boolean + /** Y 方向旋转,即 CSS transform rotateY */ + rotateY?: boolean + /** Z 方向旋转,即 CSS transform rotateZ */ + rotateZ?: boolean + /** 缩放,即 CSS transform scale */ + scale?: boolean + /** 三维缩放,即 CSS transform scale3d */ + scale3d?: boolean + /** X 方向缩放,即 CSS transform scaleX */ + scaleX?: boolean + /** Y 方向缩放,即 CSS transform scaleY */ + scaleY?: boolean + /** Z 方向缩放,即 CSS transform scaleZ */ + scaleZ?: boolean + /** 倾斜,即 CSS transform skew */ + skew?: boolean + /** X 方向倾斜,即 CSS transform skewX */ + skewX?: boolean + /** Y 方向倾斜,即 CSS transform skewY */ + skewY?: boolean + /** 位移,即 CSS transform translate */ + translate?: boolean + /** 三维位移,即 CSS transform translate3d */ + translate3d?: boolean + /** X 方向位移,即 CSS transform translateX */ + translateX?: boolean + /** Y 方向位移,即 CSS transform translateY */ + translateY?: boolean + /** Z 方向位移,即 CSS transform translateZ */ + translateZ?: boolean + } + interface ScrollTimelineKeyframe { + composite?: 'replace' | 'add' | 'accumulate' | 'auto' + easing?: string + offset?: number | null + [property: string]: string | number | null | undefined + } + interface ScrollTimelineOption { + /** 指定滚动元素的选择器(只支持 scroll-view),该元素滚动时会驱动动画的进度 */ + scrollSource: string + /** 指定滚动的方向。有效值为 horizontal 或 vertical */ + orientation?: string + /** 指定开始驱动动画进度的滚动偏移量,单位 px */ + startScrollOffset: number + /** 指定停止驱动动画进度的滚动偏移量,单位 px */ + endScrollOffset: number + /** 起始和结束的滚动范围映射的时间长度,该时间可用于与关键帧动画里的时间 (duration) 相匹配,单位 ms */ + timeRange: number + } + + interface SetUpdatePerformanceListenerOption<WithDataPath> { + /** 是否返回变更的 data 字段信息 */ + withDataPaths?: WithDataPath + } + interface UpdatePerformanceListener<WithDataPath> { + (res: UpdatePerformance<WithDataPath>): void + } + interface UpdatePerformance<WithDataPath> { + /** 此次更新过程的 ID */ + updateProcessId: number + /** 对于子更新,返回它所属的更新过程 ID */ + parentUpdateProcessId?: number + /** 是否是被合并更新,如果是,则 updateProcessId 表示被合并到的更新过程 ID */ + isMergedUpdate: boolean + /** 此次更新的 data 字段信息,只有 withDataPaths 设为 true 时才会返回 */ + dataPaths: WithDataPath extends true ? string[] : undefined + /** 此次更新进入等待队列时的时间戳 */ + pendingStartTimestamp: number + /** 更新运算开始时的时间戳 */ + updateStartTimestamp: number + /** 更新运算结束时的时间戳 */ + updateEndTimestamp: number + } +} +/** Component构造器可用于定义组件,调用Component构造器时可以指定组件的属性、数据、方法等。 + * + * * 使用 `this.data` 可以获取内部数据和属性值,但不要直接修改它们,应使用 `setData` 修改。 + * * 生命周期函数无法在组件方法中通过 `this` 访问到。 + * * 属性名应避免以 data 开头,即不要命名成 `dataXyz` 这样的形式,因为在 WXML 中, `data-xyz=""` 会被作为节点 dataset 来处理,而不是组件属性。 + * * 在一个组件的定义和使用时,组件的属性名和 data 字段相互间都不能冲突(尽管它们位于不同的定义段中)。 + * * 从基础库 `2.0.9` 开始,对象类型的属性和 data 字段中可以包含函数类型的子字段,即可以通过对象类型的属性字段来传递函数。低于这一版本的基础库不支持这一特性。 + * * `bug` : 对于 type 为 Object 或 Array 的属性,如果通过该组件自身的 `this.setData` 来改变属性值的一个子字段,则依旧会触发属性 observer ,且 observer 接收到的 `newVal` 是变化的那个子字段的值, `oldVal` 为空, `changedPath` 包含子字段的字段名相关信息。 + */ +declare let Component: WechatMiniprogram.Component.Constructor diff --git a/scr/weichat_work/typings/types/wx/lib.wx.event.d.ts b/scr/weichat_work/typings/types/wx/lib.wx.event.d.ts new file mode 100644 index 0000000..08edd87 --- /dev/null +++ b/scr/weichat_work/typings/types/wx/lib.wx.event.d.ts @@ -0,0 +1,1435 @@ +/*! ***************************************************************************** +Copyright (c) 2022 Tencent, Inc. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +***************************************************************************** */ + +declare namespace WechatMiniprogram { + interface Target<DataSet extends IAnyObject = IAnyObject> { + /** 事件组件的 id */ + id: string + /** 当前组件的类型 */ + tagName?: string + /** 事件组件上由 `data-` 开头的自定义属性组成的集合 */ + dataset: DataSet + /** 距离页面顶部的偏移量 */ + offsetTop: number + /** 距离页面左边的偏移量 */ + offsetLeft: number + } + + /** 基础事件参数 */ + interface BaseEvent< + Mark extends IAnyObject = IAnyObject, + CurrentTargetDataset extends IAnyObject = IAnyObject, + TargetDataset extends IAnyObject = CurrentTargetDataset + > { + /** 事件类型 */ + type: string + /** 页面打开到触发事件所经过的毫秒数 */ + timeStamp: number + /** 事件冒泡路径上所有由 `mark:` 开头的自定义属性组成的集合 */ + mark?: Mark + /** 触发事件的源组件 */ + target: Target<TargetDataset> + /** 事件绑定的当前组件 */ + currentTarget: Target<CurrentTargetDataset> + } + + /** 自定义事件 */ + interface CustomEvent< + Detail extends IAnyObject = IAnyObject, + Mark extends IAnyObject = IAnyObject, + CurrentTargetDataset extends IAnyObject = IAnyObject, + TargetDataset extends IAnyObject = CurrentTargetDataset + > extends BaseEvent<Mark, CurrentTargetDataset, TargetDataset> { + /** 额外的信息 */ + detail: Detail + } + + /** Touch 对象 */ + interface TouchDetail { + /** 距离页面可显示区域 (屏幕除去导航条) 左上角距离,横向为 X 轴 */ + clientX: number + /** 距离页面可显示区域 (屏幕除去导航条) 左上角距离,纵向为 Y 轴 */ + clientY: number + /** 触摸点的标识符 */ + identifier: number + /** 距离文档左上角的距离,文档的左上角为原点,横向为 X 轴 */ + pageX: number + /** 距离文档左上角的距离,文档的左上角为原点,纵向为 Y 轴 */ + pageY: number + } + + /** canvas Touch 对象 */ + interface TouchCanvasDetail { + /** 触摸点的标识符 */ + identifier: number + /** 距离 Canvas 左上角的距离,Canvas 的左上角为原点 ,横向为X轴 */ + x: number + /** 距离 Canvas 左上角的距离,Canvas 的左上角为原点 纵向为Y轴 */ + y: number + } + + /** 触摸事件 */ + interface Touch< + Detail extends IAnyObject = IAnyObject, + T extends TouchDetail | TouchCanvasDetail = TouchDetail, + Mark extends IAnyObject = IAnyObject, + CurrentTargetDataset extends IAnyObject = IAnyObject, + TargetDataset extends IAnyObject = CurrentTargetDataset + > extends CustomEvent<Detail, Mark, CurrentTargetDataset, TargetDataset> { + /** 触摸事件,当前停留在屏幕中的触摸点信息的数组 */ + touches: T[] + /** 触摸事件,当前变化的触摸点信息的数组 */ + changedTouches: T[] + } + + /** 触摸事件响应 */ + type TouchEvent< + Detail extends IAnyObject = IAnyObject, + Mark extends IAnyObject = IAnyObject, + CurrentTargetDataset extends IAnyObject = IAnyObject, + TargetDataset extends IAnyObject = CurrentTargetDataset + > = Touch<Detail, TouchDetail, Mark, CurrentTargetDataset, TargetDataset> + + /** canvas 触摸事件响应 */ + interface TouchCanvas< + Mark extends IAnyObject = IAnyObject, + TargetDataset extends IAnyObject = IAnyObject + > extends Touch<never, TouchCanvasDetail, Mark, never, TargetDataset> { + // canvas 中的触摸事件不可冒泡,所以没有 currentTarget。 + currentTarget: never + } + + /** + * 图片加载成功时触发 + * + * 最低基础库: 2.1.0 + */ + type CoverImageLoad< + Mark extends IAnyObject = IAnyObject, + TargetDataset extends IAnyObject = IAnyObject + > = CustomEvent< + { + /** 图片宽度 */ + width: number + /** 图片高度 */ + height: number + }, + Mark, + TargetDataset + > + + /** + * 图片加载失败时触发 + * + * 最低基础库: 2.1.0 + */ + type CoverImageError = CustomEvent<GeneralCallbackResult> + + /** + * 拖动过程中触发的事件,event.detail = {x, y, source} + * + * 最低基础库: 1.9.90 + */ + type MovableViewChange< + Mark extends IAnyObject = IAnyObject, + TargetDataset extends IAnyObject = IAnyObject + > = CustomEvent< + { + x: number + y: number + /** + * 产生移动的原因 + * + * - `touch` 拖动 + * - `touch-out-of-bounds` 超出移动范围 + * - `out-of-bounds` 超出移动范围后的回弹 + * - `friction` 惯性 + * - `空字符串` setData + */ + source: + | 'touch' + | 'touch-out-of-bounds' + | 'out-of-bounds' + | 'friction' + | '' + }, + Mark, + TargetDataset + > + + /** + * 缩放过程中触发的事件 + * + * event.detail = {x, y, scale} + * + * x 和 y 字段在 2.1.0 之后支持 + * + * 最低基础库: 1.9.90 + */ + type MovableViewScale< + Mark extends IAnyObject = IAnyObject, + TargetDataset extends IAnyObject = IAnyObject + > = CustomEvent< + { + /** 最低基础库: 2.1.0 */ + x: number + /** 最低基础库: 2.1.0 */ + y: number + scale: number + }, + Mark, + TargetDataset + > + + /** + * 滑动开始事件 (同时开启 enhanced 属性后生效) + * + * detail { scrollTop, scrollLeft } + * + * 最低基础库: 2.12.0 + */ + type ScrollViewDragStart< + Mark extends IAnyObject = IAnyObject, + TargetDataset extends IAnyObject = IAnyObject + > = CustomEvent< + { + scrollTop: number + scrollLeft: number + }, + Mark, + TargetDataset + > + + /** + * 滑动事件 (同时开启 enhanced 属性后生效) + * + * detail { scrollTop, scrollLeft } + * + * 最低基础库: 2.12.0 + */ + type ScrollViewDragging< + Mark extends IAnyObject = IAnyObject, + TargetDataset extends IAnyObject = IAnyObject + > = CustomEvent< + { + scrollTop: number + scrollLeft: number + }, + Mark, + TargetDataset + > + + /** + * 滑动结束事件 (同时开启 enhanced 属性后生效) + * + * detail { scrollTop, scrollLeft } + * + * 最低基础库: 2.12.0 + */ + type ScrollViewDragEnd< + Mark extends IAnyObject = IAnyObject, + TargetDataset extends IAnyObject = IAnyObject + > = CustomEvent< + { + scrollTop: number + scrollLeft: number + }, + Mark, + TargetDataset + > + + /** 滚动到顶部/左边时触发 */ + type ScrollViewScrollToUpper< + Mark extends IAnyObject = IAnyObject, + TargetDataset extends IAnyObject = IAnyObject + > = CustomEvent< + { + direction: 'top' | 'left' + }, + Mark, + TargetDataset + > + + /** 滚动到底部/右边时触发 */ + type ScrollViewScrollToLower< + Mark extends IAnyObject = IAnyObject, + TargetDataset extends IAnyObject = IAnyObject + > = CustomEvent< + { + direction: 'bottom' | 'right' + }, + Mark, + TargetDataset + > + + /** + * 滚动时触发 + * + * event.detail = {scrollLeft, scrollTop, scrollHeight, scrollWidth, deltaX, deltaY} + */ + type ScrollViewScroll< + Mark extends IAnyObject = IAnyObject, + TargetDataset extends IAnyObject = IAnyObject + > = CustomEvent< + { + scrollLeft: number + scrollTop: number + scrollHeight: number + scrollWidth: number + deltaX: number + deltaY: number + }, + Mark, + TargetDataset + > + + type ScrollViewRefresherPulling< + Mark extends IAnyObject = IAnyObject, + TargetDataset extends IAnyObject = IAnyObject + > = CustomEvent<never, Mark, TargetDataset> + + type ScrollViewRefresherRefresh< + Mark extends IAnyObject = IAnyObject, + TargetDataset extends IAnyObject = IAnyObject + > = CustomEvent<never, Mark, TargetDataset> + + type ScrollViewRefresherRestore< + Mark extends IAnyObject = IAnyObject, + TargetDataset extends IAnyObject = IAnyObject + > = CustomEvent<never, Mark, TargetDataset> + + type ScrollViewRefresherAbort< + Mark extends IAnyObject = IAnyObject, + TargetDataset extends IAnyObject = IAnyObject + > = CustomEvent<never, Mark, TargetDataset> + + /** + * current 改变时会触发 change 事件 + * + * event.detail = {current, source} + * + * **Tip**: 如果在 bindchange 的事件回调函数中使用 setData 改变 current 值,则有可能导致 setData 被不停地调用,因而通常情况下请在改变 current 值前检测 source 字段来判断是否是由于用户触摸引起。 + */ + type SwiperChange< + Mark extends IAnyObject = IAnyObject, + TargetDataset extends IAnyObject = IAnyObject + > = CustomEvent< + { + current: number + /** + * 表示导致变更的原因 + * + * - `autoplay` 自动播放导致 swiper 变化; + * - `touch` 用户划动引起 swiper 变化; + * - 其它原因将用空字符串表示。 + * + * 最低基础库: 1.4.0 + */ + source: '' | 'autoplay' | 'touch' + /** 该 swiper-item 的标识符 */ + currentItemId: string + }, + Mark, + TargetDataset + > + + /** + * swiper-item 的位置发生改变时会触发 transition 事件 + * + * event.detail = {dx: dx, dy: dy} + * + * 最低基础库: 2.4.3 + */ + type SwiperTransition< + Mark extends IAnyObject = IAnyObject, + TargetDataset extends IAnyObject = IAnyObject + > = CustomEvent< + { + dx: number + dy: number + }, + Mark, + TargetDataset + > + + /** + * 动画结束时会触发 animationfinish 事件 + * + * 最低基础库: 1.9.0 + */ + type SwiperAnimationFinish< + Mark extends IAnyObject = IAnyObject, + TargetDataset extends IAnyObject = IAnyObject + > = SwiperChange<Mark, TargetDataset> + + /** + * progress 动画完成事件 + * + * 最低基础库 2.4.1 + */ + type ProgressActiveEnd< + Mark extends IAnyObject = IAnyObject, + TargetDataset extends IAnyObject = IAnyObject + > = CustomEvent< + { + curPercent: number + }, + Mark, + TargetDataset + > + + /** + * 用户点击该按钮时,会返回获取到的用户信息,回调的 detail 数据与 `wx. getUserInfo` 返回的一致,`open-type="getUserInfo"` 时有效 + * + * 最低基础库: 1.3.0 + */ + type ButtonGetUserInfo = CustomEvent< + GeneralCallbackResult & GetUserInfoSuccessCallbackResult + > + + /** + * 客服消息回调,`open-type="contact"` 时有效 + * + * 最低基础库: 1.5.0 + */ + type ButtonContact = CustomEvent<GeneralCallbackResult> + + /** + * 获取用户手机号回调,`open-type=getPhoneNumber` 时有效 + * + * 最低基础库: 1.2.0 + */ + type ButtonGetPhoneNumber = CustomEvent< + GeneralCallbackResult & Partial<GetWeRunDataSuccessCallbackResult> + > + + /** + * 当使用开放能力时,发生错误的回调,`open-type=launchApp` 时有效 + * + * 最低基础库: 1.9.5 + */ + type ButtonError = CustomEvent<GeneralCallbackResult> + + /** + * 在打开授权设置页后回调,`open-type=openSetting` 时有效 + * + * 最低基础库: 2.0.7 + */ + type ButtonOpenSetting = CustomEvent< + GeneralCallbackResult & OpenSettingSuccessCallbackResult + > + + /** + * 打开 APP 成功的回调,`open-type=launchApp` 时有效 + * + * 最低基础库: 2.4.4 + */ + type ButtonLaunchApp = CustomEvent<GeneralCallbackResult> + + /** + * checkbox-group 中选中项发生改变时触发 change 事件 + * + * detail = { value: ['选中的checkbox 的 value 的数组'] } + */ + type CheckboxGroupChange< + Mark extends IAnyObject = IAnyObject, + TargetDataset extends IAnyObject = IAnyObject + > = CustomEvent< + { + /** 选中的 checkbox 的 value 的数组 */ + value: string[] + }, + Mark, + TargetDataset + > + + /** + * 编辑器初始化完成时触发 + * + * 最低基础库: 2.7.0 + */ + type EditorReady< + Mark extends IAnyObject = IAnyObject, + TargetDataset extends IAnyObject = IAnyObject + > = CustomEvent<never, Mark, TargetDataset> + + /** + * 编辑器聚焦时触发 + * + * event.detail = {html, text, delta} + * + * 最低基础库: 2.7.0 + */ + type EditorFocus< + Mark extends IAnyObject = IAnyObject, + TargetDataset extends IAnyObject = IAnyObject + > = CustomEvent< + { + html: string + text: string + // eslint-disable-next-line @typescript-eslint/no-explicit-any + delta: any[] + }, + Mark, + TargetDataset + > + + /** + * 编辑器失去焦点时触发 + * + * detail = {html, text, delta} + * + * 最低基础库: 2.7.0 + */ + type EditorBlur< + Mark extends IAnyObject = IAnyObject, + TargetDataset extends IAnyObject = IAnyObject + > = EditorFocus<Mark, TargetDataset> + + /** + * 编辑器内容改变时触发 + * + * detail = {html, text, delta} + * + * 最低基础库: 2.7.0 + */ + type EditorInput< + Mark extends IAnyObject = IAnyObject, + TargetDataset extends IAnyObject = IAnyObject + > = EditorFocus<Mark, TargetDataset> + + /** + * 通过 Context 方法改变编辑器内样式时触发,返回选区已设置的样式 + * + * 最低基础库: 2.7.0 + */ + type EditorStatusChange< + Mark extends IAnyObject = IAnyObject, + TargetDataset extends IAnyObject = IAnyObject + > = CustomEvent< + Partial<{ + align: 'left' | 'center' | 'right' | 'justify' + bold: 'strong' + italic: 'em' + underline: true + strike: 'del' + lineHeight: string + letterSpacing: string + marginTop: string + marginBottom: string + fontFamily: string + fontSize: string + color: string + backgroundColor: string + list: 'checked' | 'unchecked' | 'ordered' | 'bullet' + indent: number + header: number + script: 'sub' | 'super' + direction: 'rtl' + }>, + Mark, + TargetDataset + > + + /** + * 携带 form 中的数据触发 submit 事件 + * + * event.detail = {value : {'name': 'value'} , formId: ''} + */ + type FormSubmit< + Mark extends IAnyObject = IAnyObject, + TargetDataset extends IAnyObject = IAnyObject + > = CustomEvent< + { + formId?: unknown + target: Target + /** 表单中的数据,需要在表单组件中加上 name 来作为 key。 */ + value: IAnyObject + }, + Mark, + TargetDataset + > + + /** 表单重置时会触发 reset 事件 */ + type FormReset< + Mark extends IAnyObject = IAnyObject, + TargetDataset extends IAnyObject = IAnyObject + > = CustomEvent< + { + target: Target + }, + Mark, + TargetDataset + > + + /** 键盘输入时触发 + * + * event.detail = {value, cursor, keyCode} + * + * 处理函数可以直接 return 一个字符串,将替换输入框的内容。 + */ + type Input< + Mark extends IAnyObject = IAnyObject, + TargetDataset extends IAnyObject = IAnyObject + > = CustomEvent< + { + /** 输入框内容 */ + value: string + /** 光标位置 */ + cursor: number + /** keyCode 为键值 (目前工具还不支持返回keyCode参数) `2.1.0` 起支持 */ + keyCode?: number + }, + Mark, + TargetDataset + > + + /** + * 输入框聚焦时触发 + * + * event.detail = { value, height } + */ + type InputFocus< + Mark extends IAnyObject = IAnyObject, + TargetDataset extends IAnyObject = IAnyObject + > = CustomEvent< + { + /** 输入框内容 */ + value: string + /** 键盘高度, 在基础库 `1.9.90` 起支持 */ + height: number + }, + Mark, + TargetDataset + > + + /** + * 输入框失去焦点时触发 + * + * event.detail = {value: value} + */ + type InputBlur< + Mark extends IAnyObject = IAnyObject, + TargetDataset extends IAnyObject = IAnyObject + > = CustomEvent< + { + /** 输入框内容 */ + value: string + }, + Mark, + TargetDataset + > + + /** + * 点击完成按钮时触发 + * + * event.detail = {value: value} + */ + type InputConfirm< + Mark extends IAnyObject = IAnyObject, + TargetDataset extends IAnyObject = IAnyObject + > = CustomEvent< + { + /** 输入框内容 */ + value: string + }, + Mark, + TargetDataset + > + + /** + * 键盘高度发生变化的时候触发此事件 + * + * event.detail = {height: height, duration: duration} + * + * **tip**: 键盘高度发生变化,keyboardheightchange 事件可能会多次触发,开发者对于相同的 height 值应该忽略掉 + * + * 最低基础库: `2.7.0` + */ + type InputKeyboardHeightChange< + Mark extends IAnyObject = IAnyObject, + TargetDataset extends IAnyObject = IAnyObject + > = CustomEvent< + { + /** 键盘高度 */ + height: number + duration: number + }, + Mark, + TargetDataset + > + + /** + * 取消选择时触发 + * + * 最低基础库: 1.9.90 + */ + type PickerCancel< + Mark extends IAnyObject = IAnyObject, + TargetDataset extends IAnyObject = IAnyObject + > = CustomEvent<never, Mark, TargetDataset> + + /** + * value 改变时触发 change 事件 + * + * event.detail = {value} + * + * 当 mode = region 时 (最低基础库: 1.4.0) + * + * value 改变时触发 change 事件,event.detail = {value, code, postcode},其中字段 code 是统计用区划代码,postcode 是邮政编码 + */ + type PickerChange< + Mark extends IAnyObject = IAnyObject, + TargetDataset extends IAnyObject = IAnyObject + > = CustomEvent< + { + /** + * 当 mode = selector 时, 返回当前选择的 value + * + * 当 mode = multiSelector 时, 返回一个索引数组 + * + * 当 mode = time | date 时, 返回 `"12:01"` | `"2016-09-01"` + * + * 当 mode = region 时, 返回 `["广东省", "广州市", "海珠区"]` + */ + value: string | number[] | [string, string, string] + /** 统计用区划代码 当 mode = region 时有效 (最低基础库: 1.4.0) */ + code: [string, string, string] + /** 邮政编码 当 mode = region 时有效 (最低基础库: 1.4.0) */ + postcode: string + }, + Mark, + TargetDataset + > + + /** 列改变时触发 当 `mode = multiSelector` 时有效 */ + type PickerColumnChange< + Mark extends IAnyObject = IAnyObject, + TargetDataset extends IAnyObject = IAnyObject + > = CustomEvent< + { + /** 修改的列 */ + column: number + value: number + }, + Mark, + TargetDataset + > + + /** + * 滚动选择时触发 change 事件 + * + * event.detail = {value} + */ + type PickerViewChange< + Mark extends IAnyObject = IAnyObject, + TargetDataset extends IAnyObject = IAnyObject + > = CustomEvent< + { + /** value 为数组,表示 picker-view 内的 picker-view-column 当前选择的是第几项 (下标从 0 开始) */ + value: number[] + }, + Mark, + TargetDataset + > + + /** + * 当滚动选择开始时候触发事件 + * + * 最低基础库: 2.3.1 + */ + type PickerViewPickStart< + Mark extends IAnyObject = IAnyObject, + TargetDataset extends IAnyObject = IAnyObject + > = CustomEvent<never, Mark, TargetDataset> + + /** + * 当滚动选择结束时候触发事件 + * + * 最低基础库: 2.3.1 + */ + type PickerViewPickEnd< + Mark extends IAnyObject = IAnyObject, + TargetDataset extends IAnyObject = IAnyObject + > = CustomEvent<never, Mark, TargetDataset> + + /** radio-group 切换事件 */ + type RadioGroupChange< + Mark extends IAnyObject = IAnyObject, + TargetDataset extends IAnyObject = IAnyObject + > = CustomEvent< + /** radio-group 中选中项的 value */ + { + value: string + }, + Mark, + TargetDataset + > + + /** + * 完成一次拖动后触发的事件 + * + * event.detail = {value} + */ + type SliderChange< + Mark extends IAnyObject = IAnyObject, + TargetDataset extends IAnyObject = IAnyObject + > = CustomEvent< + { + /** slider 的数值 0 - 100 */ + value: number + }, + Mark, + TargetDataset + > + + /** + * 拖动过程中触发的事件 + * + * event.detail = {value} + * + * 最低基础库: 1.7.0 + */ + type SliderChanging< + Mark extends IAnyObject = IAnyObject, + TargetDataset extends IAnyObject = IAnyObject + > = SliderChange<Mark, TargetDataset> + + /** + * checked 改变时触发 change 事件 + * + * event.detail={ value} + */ + type SwitchChange< + Mark extends IAnyObject = IAnyObject, + TargetDataset extends IAnyObject = IAnyObject + > = CustomEvent< + { + value: boolean + }, + Mark, + TargetDataset + > + + /** + * 输入框聚焦时触发 + * + * event.detail = { value, height },height 为键盘高度 + * + * 在基础库 1.9.90 起支持 + */ + type TextareaFocus< + Mark extends IAnyObject = IAnyObject, + TargetDataset extends IAnyObject = IAnyObject + > = InputFocus<Mark, TargetDataset> + + /** + * 输入框失去焦点时触发 + * + * event.detail = {value, cursor} + * + * **tip**: textarea 的 blur 事件会晚于页面上的 tap 事件,如果需要在 button 的点击事件获取 textarea,可以使用 form 的 bindsubmit。 + */ + type TextareaBlur< + Mark extends IAnyObject = IAnyObject, + TargetDataset extends IAnyObject = IAnyObject + > = InputBlur<Mark, TargetDataset> + + /** + * 输入框行数变化时调用 + * + * event.detail = {height: 0, heightRpx: 0, lineCount: 0} + */ + type TextareaLineChange< + Mark extends IAnyObject = IAnyObject, + TargetDataset extends IAnyObject = IAnyObject + > = CustomEvent< + { + /** 输入框高度(px) */ + height: number + /** 输入框高度(rpx) */ + heightRpx: number + /** 行数 */ + lineCount: number + /** 行高 */ + lineHeight: number + }, + Mark, + TargetDataset + > + + /** + * 当键盘输入时,触发 input 事件 + * + * event.detail = {value, cursor, keyCode} + * + * keyCode 为键值,目前工具还不支持返回 keyCode 参数。 + * + * **tip**: 不建议在多行文本上对用户的输入进行修改,所以 **bindinput 处理函数的返回值并不会反映到 textarea 上** + */ + type TextareaInput< + Mark extends IAnyObject = IAnyObject, + TargetDataset extends IAnyObject = IAnyObject + > = Input<Mark, TargetDataset> + + /** + * 点击完成时, 触发 confirm 事件 + * + * event.detail = {value: value} + */ + type TextareaConfirm< + Mark extends IAnyObject = IAnyObject, + TargetDataset extends IAnyObject = IAnyObject + > = InputConfirm<Mark, TargetDataset> + + /** + * 键盘高度发生变化的时候触发此事件 + * + * event.detail = {height: height, duration: duration} + * + * **tip**: 键盘高度发生变化,keyboardheightchange事件可能会多次触发,开发者对于相同的height值应该忽略掉 + * + * 最低基础库: 2.7.0 + */ + type TextareaKeyboardHeightChange< + Mark extends IAnyObject = IAnyObject, + TargetDataset extends IAnyObject = IAnyObject + > = InputKeyboardHeightChange<Mark, TargetDataset> + + /** + * 功能页返回,且操作成功时触发, detail 格式与具体功能页相关 + * + * 最低基础库: 2.1.0 + */ + type FunctionalNavigatorSuccess< + Detail extends IAnyObject = IAnyObject + > = CustomEvent<Detail, never, never> + + /** + * 功能页返回,且操作失败时触发, detail 格式与具体功能页相关 + * + * 最低基础库: 2.1.0 + */ + type FunctionalNavigatorFail< + Detail extends IAnyObject = IAnyObject + > = CustomEvent<Detail, never, never> + + /** + * 当 `target="miniProgram"` 时有效,跳转小程序成功 + * + * 最低基础库: 2.0.7 + */ + type NavigatorSuccess = CustomEvent + /** + * 当 `target="miniProgram"` 时有效,跳转小程序失败 + * + * `tips`: 需要用户确认跳转 从 2.3.0 版本开始,在跳转至其他小程序前,将统一增加弹窗,询问是否跳转,用户确认后才可以跳转其他小程序。如果用户点击取消,则回调 fail cancel。 + * + * 最低基础库: 2.0.7 + */ + type NavigatorFail = CustomEvent + /** + * 当 `target="miniProgram"` 时有效,跳转小程序完成 + * + * 最低基础库: 2.0.7 + */ + type NavigatorComplete = CustomEvent + + /** + * 当发生错误时触发 error 事件 + * + * detail = {errMsg:MediaError.code} + */ + type AudioError = CustomEvent<{ + /** + * MediaError.code + * + * - 1 获取资源被用户禁止 + * - 2 网络错误 + * - 3 解码错误 + * - 4 不合适资源 + */ + errMsg: 1 | 2 | 3 | 4 + }> + + /** 当开始/继续播放时触发play事件 */ + type AudioPlay = CustomEvent + + /** 当暂停播放时触发 pause 事件 */ + type AudioPause = CustomEvent + + /** + * 当播放进度改变时触发 timeupdate 事件 + * + * detail = {currentTime, duration} + */ + type AudioTimeUpdate = CustomEvent<{ + currentTime: number + duration: number + }> + + /** 当播放到末尾时触发 ended 事件 */ + type AudioEnded = CustomEvent + + /** 摄像头在非正常终止时触发,如退出后台等情况 */ + type CameraStop = CustomEvent + + /** 用户不允许使用摄像头时触发 */ + type CameraError = CustomEvent + + /** + * 相机初始化完成时触发 + * + * 最低基础库: 2.7.0 + */ + type CameraInitDone = CustomEvent + + /** + * 在扫码识别成功时触发,仅在 mode="scanCode" 时生效 + * + * 最低基础库: 2.1.0 + */ + type CameraScanCode = CustomEvent + + /** 当错误发生时触发,event.detail = {errMsg} */ + type ImageError = CoverImageError + /** 当图片载入完毕时触发,event.detail = {height, width} */ + type ImageLoad = CoverImageLoad + + /** + * 播放状态变化事件,detail = {code} + * + * 最低基础库 1.7.0 + */ + type LivePlayerStateChange = CustomEvent<{ + /** + * 状态码 + * + * - `2001` 已经连接服务器 + * - `2002` 已经连接服务器,开始拉流 + * - `2003` 网络接收到首个视频数据包(IDR) + * - `2004` 视频播放开始 + * - `2005` 视频播放进度 + * - `2006` 视频播放结束 + * - `2007` 视频播放Loading + * - `2008` 解码器启动 + * - `2009` 视频分辨率改变 + * - `-2301` 网络断连,且经多次重连抢救无效,更多重试请自行重启播放 + * - `-2302` 获取加速拉流地址失败 + * - `2101` 当前视频帧解码失败 + * - `2102` 当前音频帧解码失败 + * - `2103` 网络断连, 已启动自动重连 + * - `2104` 网络来包不稳: 可能是下行带宽不足,或由于主播端出流不均匀 + * - `2105` 当前视频播放出现卡顿 + * - `2106` 硬解启动失败,采用软解 + * - `2107` 当前视频帧不连续,可能丢帧 + * - `2108` 当前流硬解第一个I帧失败,SDK自动切软解 + * - `3001` RTMP -DNS解析失败 + * - `3002` RTMP服务器连接失败 + * - `3003` RTMP服务器握手失败 + * - `3005` RTMP 读/写失败 + */ + code: number + }> + + /** + * 全屏变化事件,detail = {direction, fullScreen} + * + * 最低基础库 1.7.0 + */ + type LivePlayerFullScreenChange = CustomEvent<{ + direction: 'vertical' | 'horizontal' + fullScreen: boolean + }> + + /** + * 网络状态通知,detail = {info} + * + * 最低基础库 1.9.0 + */ + type LivePlayerNetStatus = CustomEvent<{ + /** + * 网络状态数据 + * + * + * - `videoBitrate` 当前视频编/码器输出的比特率,单位 kbps + * - `audioBitrate` 当前音频编/码器输出的比特率,单位 kbps + * - `videoFPS` 当前视频帧率 + * - `videoGOP` 当前视频 GOP,也就是每两个关键帧(I帧)间隔时长,单位 s + * - `netSpeed` 当前的发送/接收速度 + * - `netJitter` 网络抖动情况,抖动越大,网络越不稳定 + * - `videoWidth` 视频画面的宽度 + * - `videoHeight` 视频画面的高度 + */ + info: + | 'videoBitrate' + | 'audioBitrate' + | 'videoFPS' + | 'videoGOP' + | 'netSpeed' + | 'netJitter' + | 'videoWidth' + | 'videoHeight' + }> + + /** + * 状态变化事件,detail = {code} + * + * 最低基础库: 1.7.0 + */ + type LivePusherStateChange = CustomEvent<{ + /** + * 状态码 + * + * - `1001` 已经连接推流服务器 + * - `1002` 已经与服务器握手完毕,开始推流 + * - `1003` 打开摄像头成功 + * - `1004` 录屏启动成功 + * - `1005` 推流动态调整分辨率 + * - `1006` 推流动态调整码率 + * - `1007` 首帧画面采集完成 + * - `1008` 编码器启动 + * - `-1301` 打开摄像头失败 + * - `-1302` 打开麦克风失败 + * - `-1303` 视频编码失败 + * - `-1304` 音频编码失败 + * - `-1305` 不支持的视频分辨率 + * - `-1306` 不支持的音频采样率 + * - `-1307` 网络断连,且经多次重连抢救无效,更多重试请自行重启推流 + * - `-1308` 开始录屏失败,可能是被用户拒绝 + * - `-1309` 录屏失败,不支持的Android系统版本,需要5.0以上的系统 + * - `-1310` 录屏被其他应用打断了 + * - `-1311` Android Mic打开成功,但是录不到音频数据 + * - `-1312` 录屏动态切横竖屏失败 + * - `1101` 网络状况不佳: 上行带宽太小,上传数据受阻 + * - `1102` 网络断连, 已启动自动重连 + * - `1103` 硬编码启动失败,采用软编码 + * - `1104` 视频编码失败 + * - `1105` 新美颜软编码启动失败,采用老的软编码 + * - `1106` 新美颜软编码启动失败,采用老的软编码 + * - `3001` RTMP -DNS解析失败 + * - `3002` RTMP服务器连接失败 + * - `3003` RTMP服务器握手失败 + * - `3004` RTMP服务器主动断开,请检查推流地址的合法性或防盗链有效期 + * - `3005` RTMP 读/写失败 + */ + code: number + }> + + /** + * 网络状态通知,detail = {info} + * + * 最低基础库: 1.9.0 + */ + type LivePusherNetStatus = CustomEvent<{ + /** + * 网络状态数据 + * + * -`videoBitrate` 当前视频编/码器输出的比特率,单位 kbps + * -`audioBitrate` 当前音频编/码器输出的比特率,单位 kbps + * -`videoFPS` 当前视频帧率 + * -`videoGOP` 当前视频 GOP,也就是每两个关键帧(I帧)间隔时长,单位 s + * -`netSpeed` 当前的发送/接收速度 + * -`netJitter` 网络抖动情况,抖动越大,网络越不稳定 + * -`videoWidth` 视频画面的宽度 + * -`videoHeight` 视频画面的高度 + */ + info: + | 'videoBitrate' + | 'audioBitrate' + | 'videoFPS' + | 'videoGOP' + | 'netSpeed' + | 'netJitter' + | 'videoWidth' + | 'videoHeight' + }> + + /** + * 渲染错误事件,detail = {errMsg, errCode} + * + * `tip`: 开发者工具上暂不支持 live-pusher + * + * 最低基础库: 1.7.4 + */ + type LivePusherError = CustomEvent<{ + errMsg: string + /** + * 错误码 + * + * - `10001` 用户禁止使用摄像头 + * - `10002` 用户禁止使用录音 + * - `10003` 背景音资源 (BGM) 加载失败 + * - `10004` 等待画面资源 (waiting-image) 加载失败 + */ + errCode: number + }> + + /** + * 背景音开始播放时触发 + * + * 最低基础库: 2.4.0 + */ + type LivePusherBgmStart = CustomEvent + + /** + * 背景音进度变化时触发,detail = {progress, duration} + * + * 最低基础库: 2.4.0 + */ + type LivePusherBgmProgress = CustomEvent<{ + progress: number + duration: number + }> + + /** + * 背景音播放完成时触发 + * + * 最低基础库: 2.4.0 + */ + type LivePusherBgmComplete = CustomEvent + + /** 当开始/继续播放时触发play事件 */ + type VideoPlay = CustomEvent + + /** 当暂停播放时触发 pause 事件 */ + type VideoPause = CustomEvent + + /** 当播放到末尾时触发 ended 事件 */ + type VideoEnded = CustomEvent + + /** 播放进度变化时触发,event.detail = {currentTime, duration} 。触发频率 250ms 一次 */ + type VideoTimeUpdate = CustomEvent<{ + currentTime: number + duration: number + }> + + /** + * 视频进入和退出全屏时触发,event.detail = {fullScreen, direction} + * + * 最低基础库: 1.4.0 + */ + type VideoFullScreenChange = CustomEvent<{ + fullScreen: boolean + direction: 'vertical' | 'horizontal' + }> + + /** + * 视频出现缓冲时触发 + * + * 最低基础库: 1.7.0 + */ + type VideoWaiting = CustomEvent + + /** + * 视频播放出错时触发 + * + * 最低基础库: 1.7.0 + */ + type VideoError = CustomEvent + + /** + * 加载进度变化时触发,只支持一段加载。 + * + * 最低基础库: 2.4.0 + */ + type VideoPregress = CustomEvent<{ + /** 百分比 */ + buffered: number + }> + + /** + * 加载进度变化时触发,只支持一段加载。 + * + * 最低基础库: 2.4.0 + */ + type VoipRoomError = CustomEvent + + /** + * 点击地图时触发 + * + * 2.9.0 起返回经纬度信息 + */ + type MapTap = CustomEvent<{ + /** 经度,最低基础库 2.9.0 */ + longitude: number + /** 纬度,最低基础库 2.9.0 */ + latitude: number + }> + + /** + * 点击标记点时触发 + * + * e.detail = {markerId} + */ + type MarkerTap = CustomEvent<{ + /** 标记点 ID */ + markerId: number + }> + + /** + * 点击 label 时触发 + * + * e.detail = {markerId} + * + * 最低基础库: 2.9.0 + */ + type LabelTap = MarkerTap + + /** + * 点击控件时触发 + * + * e.detail = {controlId} + */ + type ControlTap = CustomEvent<{ + /** 控件 ID */ + controlId: number + }> + + /** + * 点击 label 时触发 + * + * e.detail = {markerId} + * + * 最低基础库: 1.2.0 + */ + type CalloutTap = MarkerTap + + /** + * 在地图渲染更新完成时触发 + * + * 最低基础库: 1.6.0 + */ + type MapUpdated = CustomEvent + + /** + * 在地图渲染更新完成时触发 + * + * 最低基础库: 1.6.0 + */ + type RegionChange = CustomEvent<{ + /** 旋转程度,最低基础库 2.3.0 */ + rotate: number + /** 缩放程度,最低基础库 2.3.0 */ + skew: number + }> & + ( + | { + /** + * 视野变化开始、结束时触发 + * + * 视野变化开始为 `begin` + */ + type: 'begin' + /** + * 导致视野变化的原因 + * + * - gesture: 用户手势 + * - update: 调用接口导致 + */ + causedBy: 'gesture' | 'update' + } + | { + /** + * 视野变化结束时触发 + * + * 视野变化结束为 `end` + */ + type: 'end' + /** + * 导致视野变化的原因 + * + * - drag: 拖动地图导致 + * - scale: 缩放导致 + * - update: 调用接口导致 + */ + causedBy: 'drag' | 'scale' | 'update' + } + ) + + /** + * 广告加载成功的回调 + * + * 最低基础库: 2.2.1 + */ + type AdLoad = CustomEvent + + /** + * 广告加载失败的回调,event.detail = {errCode: 1002} + * + * `tip`: 监听到error回调后,开发者可以针对性的处理,比如隐藏广告组件的父容器,以保证用户体验,但不要移除广告组件,否则将无法收到bindload的回调。 + * + * 最低基础库: 2.2.1 + */ + type AdError = CustomEvent<{ + /** + * 错误码 + * + * - `1000` 后端错误调用失败 该项错误不是开发者的异常情况 一般情况下忽略一段时间即可恢复。 + * - `1001` 参数错误 使用方法错误 可以前往developers.weixin.qq.com 确认具体教程 (小程序和小游戏分别有各自的教程,可以在顶部选项中,“设计”一栏的右侧进行切换)。 + * - `1002` 广告单元无效 可能是拼写错误、或者误用了其他APP的广告ID 请重新前往mp.weixin.qq.com确认广告位ID。 + * - `1003` 内部错误 该项错误不是开发者的异常情况 一般情况下忽略一段时间即可恢复。 + * - `1004` 无适合的广告 广告不是每一次都会出现,这次没有出现可能是由于该用户不适合浏览广告 属于正常情况,且开发者需要针对这种情况做形态上的兼容。 + * - `1005` 广告组件审核中 你的广告正在被审核,无法展现广告 请前往mp.weixin.qq.com确认审核状态,且开发者需要针对这种情况做形态上的兼容。 + * - `1006` 广告组件被驳回 你的广告审核失败,无法展现广告 请前往mp.weixin.qq.com确认审核状态,且开发者需要针对这种情况做形态上的兼容。 + * - `1007` 广告组件被驳回 你的广告能力已经被封禁,封禁期间无法展现广告 请前往mp.weixin.qq.com确认小程序广告封禁状态。 + * - `1008` 广告单元已关闭 该广告位的广告能力已经被关闭 请前往mp.weixin.qq.com重新打开对应广告位的展现。 + */ + errCode: number + }> + + /** + * 广告关闭的回调 + * + * 最低基础库: 2.6.5 + */ + type AdClose = CustomEvent + + /** + * 网页向小程序 postMessage 时,会在特定时机 (小程序后退、组件销毁、分享) 触发并收到消息。e.detail = { data } + * + * 最低基础库: 1.6.4 + */ + type WebviewMessage = CustomEvent<{ + /** 多次 postMessage 的参数组成的数组 */ + // eslint-disable-next-line @typescript-eslint/no-explicit-any + data: any[] + }> + + /** + * 网页加载成功时候触发此事件。e.detail = { src } + * + * 最低基础库: 1.6.4 + */ + type WebviewLoad = CustomEvent<{ + src: string + }> + + /** + * 网页加载失败的时候触发此事件。e.detail = { src } + * + * 最低基础库: 1.6.4 + */ + type WebviewError = CustomEvent<{ + src: string + }> +} diff --git a/scr/weichat_work/typings/types/wx/lib.wx.page.d.ts b/scr/weichat_work/typings/types/wx/lib.wx.page.d.ts new file mode 100644 index 0000000..4e1cb51 --- /dev/null +++ b/scr/weichat_work/typings/types/wx/lib.wx.page.d.ts @@ -0,0 +1,263 @@ +/*! ***************************************************************************** +Copyright (c) 2022 Tencent, Inc. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +***************************************************************************** */ + +declare namespace WechatMiniprogram.Page { + type Instance< + TData extends DataOption, + TCustom extends CustomOption + > = OptionalInterface<ILifetime> & + InstanceProperties & + InstanceMethods<TData> & + Data<TData> & + TCustom + type Options< + TData extends DataOption, + TCustom extends CustomOption + > = (TCustom & + Partial<Data<TData>> & + Partial<ILifetime> & { + options?: Component.ComponentOptions + }) & + ThisType<Instance<TData, TCustom>> + type TrivialInstance = Instance<IAnyObject, IAnyObject> + interface Constructor { + <TData extends DataOption, TCustom extends CustomOption>( + options: Options<TData, TCustom> + ): void + } + interface ILifetime { + /** 生命周期回调—监听页面加载 + * + * 页面加载时触发。一个页面只会调用一次,可以在 onLoad 的参数中获取打开当前页面路径中的参数。 + */ + onLoad( + /** 打开当前页面路径中的参数 */ + query: Record<string, string | undefined> + ): void | Promise<void> + /** 生命周期回调—监听页面显示 + * + * 页面显示/切入前台时触发。 + */ + onShow(): void | Promise<void> + /** 生命周期回调—监听页面初次渲染完成 + * + * 页面初次渲染完成时触发。一个页面只会调用一次,代表页面已经准备妥当,可以和视图层进行交互。 + * + + * 注意:对界面内容进行设置的 API 如`wx.setNavigationBarTitle`,请在`onReady`之后进行。 + */ + onReady(): void | Promise<void> + /** 生命周期回调—监听页面隐藏 + * + * 页面隐藏/切入后台时触发。 如 `navigateTo` 或底部 `tab` 切换到其他页面,小程序切入后台等。 + */ + onHide(): void | Promise<void> + /** 生命周期回调—监听页面卸载 + * + * 页面卸载时触发。如`redirectTo`或`navigateBack`到其他页面时。 + */ + onUnload(): void | Promise<void> + /** 监听用户下拉动作 + * + * 监听用户下拉刷新事件。 + * - 需要在`app.json`的`window`选项中或页面配置中开启`enablePullDownRefresh`。 + * - 可以通过`wx.startPullDownRefresh`触发下拉刷新,调用后触发下拉刷新动画,效果与用户手动下拉刷新一致。 + * - 当处理完数据刷新后,`wx.stopPullDownRefresh`可以停止当前页面的下拉刷新。 + */ + onPullDownRefresh(): void | Promise<void> + /** 页面上拉触底事件的处理函数 + * + * 监听用户上拉触底事件。 + * - 可以在`app.json`的`window`选项中或页面配置中设置触发距离`onReachBottomDistance`。 + * - 在触发距离内滑动期间,本事件只会被触发一次。 + */ + onReachBottom(): void | Promise<void> + /** 用户点击右上角转发 + * + * 监听用户点击页面内转发按钮(`<button>` 组件 `open-type="share"`)或右上角菜单“转发”按钮的行为,并自定义转发内容。 + * + * **注意:只有定义了此事件处理函数,右上角菜单才会显示“转发”按钮** + * + * 此事件需要 return 一个 Object,用于自定义转发内容 + */ + onShareAppMessage( + /** 分享发起来源参数 */ + options: IShareAppMessageOption + ): ICustomShareContent | void + /** + * 监听右上角菜单“分享到朋友圈”按钮的行为,并自定义分享内容 + * + * 本接口为 Beta 版本,暂只在 Android 平台支持,详见 [分享到朋友圈 (Beta)](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/share-timeline.html) + * + * 基础库 2.11.3 开始支持,低版本需做兼容处理。 + */ + onShareTimeline(): ICustomTimelineContent | void + + /** 页面滚动触发事件的处理函数 + * + * 监听用户滑动页面事件。 + */ + onPageScroll( + /** 页面滚动参数 */ + options: IPageScrollOption + ): void | Promise<void> + + /** 当前是 tab 页时,点击 tab 时触发,最低基础库: `1.9.0` */ + onTabItemTap( + /** tab 点击参数 */ + options: ITabItemTapOption + ): void | Promise<void> + + /** 窗口尺寸改变时触发,最低基础库:`2.4.0` */ + onResize( + /** 窗口尺寸参数 */ + options: IResizeOption + ): void | Promise<void> + + /** + * 监听用户点击右上角菜单“收藏”按钮的行为,并自定义收藏内容。 + * 基础库 2.10.3,安卓 7.0.15 版本起支持,iOS 暂不支持 + */ + onAddToFavorites(options: IAddToFavoritesOption): IAddToFavoritesContent + } + interface InstanceProperties { + /** 页面的文件路径 */ + is: string + + /** 到当前页面的路径 */ + route: string + + /** 打开当前页面路径中的参数 */ + options: Record<string, string | undefined> + } + + type DataOption = Record<string, any> + type CustomOption = Record<string, any> + + type InstanceMethods<D extends DataOption> = Component.InstanceMethods<D> + + interface Data<D extends DataOption> { + /** 页面的初始数据 + * + * `data` 是页面第一次渲染使用的**初始数据**。 + * + * 页面加载时,`data` 将会以`JSON`字符串的形式由逻辑层传至渲染层,因此`data`中的数据必须是可以转成`JSON`的类型:字符串,数字,布尔值,对象,数组。 + * + * 渲染层可以通过 `WXML` 对数据进行绑定。 + */ + data: D + } + + interface ICustomShareContent { + /** 转发标题。默认值:当前小程序名称 */ + title?: string + /** 转发路径,必须是以 / 开头的完整路径。默认值:当前页面 path */ + path?: string + /** 自定义图片路径,可以是本地文件路径、代码包文件路径或者网络图片路径。支持PNG及JPG。显示图片长宽比是 5:4,最低基础库: `1.5.0`。默认值:使用默认截图 */ + imageUrl?: string + } + + interface ICustomTimelineContent { + /** 自定义标题,即朋友圈列表页上显示的标题。默认值:当前小程序名称 */ + title?: string + /** 自定义页面路径中携带的参数,如 `path?a=1&b=2` 的 “?” 后面部分 默认值:当前页面路径携带的参数 */ + query?: string + /** 自定义图片路径,可以是本地文件路径、代码包文件路径或者网络图片路径。支持 PNG 及 JPG。显示图片长宽比是 1:1。默认值:默认使用小程序 Logo*/ + imageUrl?: string + } + + interface IPageScrollOption { + /** 页面在垂直方向已滚动的距离(单位px) */ + scrollTop: number + } + + interface IShareAppMessageOption { + /** 转发事件来源。 + * + * 可选值: + * - `button`:页面内转发按钮; + * - `menu`:右上角转发菜单。 + * + * 最低基础库: `1.2.4` + */ + from: 'button' | 'menu' | string + /** 如果 `from` 值是 `button`,则 `target` 是触发这次转发事件的 `button`,否则为 `undefined` + * + * 最低基础库: `1.2.4` */ + target: any + /** 页面中包含`<web-view>`组件时,返回当前`<web-view>`的url + * + * 最低基础库: `1.6.4` + */ + webViewUrl?: string + } + + interface ITabItemTapOption { + /** 被点击tabItem的序号,从0开始,最低基础库: `1.9.0` */ + index: string + /** 被点击tabItem的页面路径,最低基础库: `1.9.0` */ + pagePath: string + /** 被点击tabItem的按钮文字,最低基础库: `1.9.0` */ + text: string + } + + interface IResizeOption { + size: { + /** 变化后的窗口宽度,单位 px */ + windowWidth: number + /** 变化后的窗口高度,单位 px */ + windowHeight: number + } + } + + interface IAddToFavoritesOption { + /** 页面中包含web-view组件时,返回当前web-view的url */ + webviewUrl?: string + } + + interface IAddToFavoritesContent { + /** 自定义标题,默认值:页面标题或账号名称 */ + title?: string + /** 自定义图片,显示图片长宽比为 1:1,默认值:页面截图 */ + imageUrl?: string + /** 自定义query字段,默认值:当前页面的query */ + query?: string + } + + interface GetCurrentPages { + (): Array<Instance<IAnyObject, IAnyObject>> + } +} + +/** + * 注册小程序中的一个页面。接受一个 `Object` 类型参数,其指定页面的初始数据、生命周期回调、事件处理函数等。 + */ +declare let Page: WechatMiniprogram.Page.Constructor +/** + * 获取当前页面栈。数组中第一个元素为首页,最后一个元素为当前页面。 + + * __注意:__ + + * - __不要尝试修改页面栈,会导致路由以及页面状态错误。__ + * - 不要在 `App.onLaunch` 的时候调用 `getCurrentPages()`,此时 `page` 还没有生成。 + */ +declare let getCurrentPages: WechatMiniprogram.Page.GetCurrentPages

0aDJiH_{d=06lgSAZ&$J7VTEMhJE^I*JBMY-jZ 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�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 diff --git a/model/界面流图/界面流图-修改信息栏信息.jpg b/model/界面流图/界面流图-修改信息栏信息.jpg index a1996fe3264a101951c27d8038d7d094a1f5f69b..0334fb7f0de3f200d449f545aa346d9e23bf18bc 100644 GIT binary patch literal 64246 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