UNPKG

my-uniapp-tools

Version:

一个简洁稳定的 uni-app 开发工具库,提供剪贴板、本地存储、导航、系统信息等常用功能

2 lines (1 loc) 2.27 kB
import{ErrorHandler as e,UniAppToolsError as t}from"../core.js";const s=e.getInstance(),o="https://gw.alipayobjects.com/as/g/h5-lib/alipayjsapi/3.1.1/alipayjsapi.min.js";let n=!1,c=null;const r=()=>{n=!1,c=null},a=(e=o,r={})=>{const a="string"==typeof e&&""!==e.trim()?e:o,i=r&&"object"==typeof r?r:{},d="number"==typeof i.timeoutMs&&Number.isFinite(i.timeoutMs)&&i.timeoutMs>0?i.timeoutMs:1e4;return"undefined"!=typeof window&&window.document?n||window.ap?(n=!0,Promise.resolve(!0)):c||(c=new Promise(e=>{const o={settled:!1,timeoutId:null,script:null,createdByThisCall:!1},r=r=>{o.settled||(o.settled=!0,o.timeoutId&&(clearTimeout(o.timeoutId),o.timeoutId=null),r.success?n=!0:s.handleError(new t(r.code,r.message,"payment"),"payment"),c=null,e(r.success))};try{let e;try{e=new URL(a,window.location.href).href}catch{return void r({success:!1,code:"ALIPAY_SDK_INVALID_URL",message:`无效的 JSSDK 地址: ${a}`})}const t=Array.from(document.getElementsByTagName("script")).find(t=>t.src===e),s=t??document.createElement("script");o.script=s,o.createdByThisCall=!t;const n=()=>{setTimeout(()=>{window.ap?r({success:!0}):r({success:!1,code:"ALIPAY_SDK_INIT_ERROR",message:"支付宝 JSSDK 加载成功但未能初始化 window.ap"})},50)},c=e=>{o.createdByThisCall&&s.parentNode&&s.parentNode.removeChild(s),r({success:!1,code:"ALIPAY_SDK_LOAD_ERROR",message:`支付宝 JSSDK 加载失败: ${String(e?.type||"error")}`})};s.addEventListener("load",n,{once:!0}),s.addEventListener("error",c,{once:!0}),o.timeoutId=setTimeout(()=>{o.createdByThisCall&&s.parentNode&&s.parentNode.removeChild(s),r({success:!1,code:"ALIPAY_SDK_LOAD_TIMEOUT",message:"支付宝 JSSDK 加载超时"})},d),o.createdByThisCall&&(s.type="text/javascript",s.src=e,s.async=!0,s.setAttribute("data-uniapp-tools","alipay-jssdk"),(document.head||document.body||document.documentElement).appendChild(s)),window.ap&&r({success:!0})}catch(e){r({success:!1,code:"ALIPAY_SDK_UNEXPECTED_ERROR",message:`支付宝 JSSDK 注入过程发生意外异常: ${e instanceof Error?e.message:String(e)}`})}}),c):(s.handleError(new t("ALIPAY_SDK_ENV_ERROR","不在浏览器环境中,无法注入支付宝 JSSDK","payment"),"payment"),Promise.resolve(!1))};export{a as injectAlipayJsSdk,r as resetAlipayJsSdk};