my-uniapp-tools
Version:
一个简洁稳定的 uni-app 开发工具库,提供剪贴板、本地存储、导航、系统信息等常用功能
2 lines (1 loc) • 2.28 kB
JavaScript
;var e=require("../core.cjs");const t=e.ErrorHandler.getInstance(),s="https://gw.alipayobjects.com/as/g/h5-lib/alipayjsapi/3.1.1/alipayjsapi.min.js";let o=!1,r=null;exports.injectAlipayJsSdk=(n=s,a={})=>{const c="string"==typeof n&&""!==n.trim()?n:s,i=a&&"object"==typeof a?a:{},d="number"==typeof i.timeoutMs&&Number.isFinite(i.timeoutMs)&&i.timeoutMs>0?i.timeoutMs:1e4;return"undefined"!=typeof window&&window.document?o||window.ap?(o=!0,Promise.resolve(!0)):r||(r=new Promise(s=>{const n={settled:!1,timeoutId:null,script:null,createdByThisCall:!1},a=a=>{n.settled||(n.settled=!0,n.timeoutId&&(clearTimeout(n.timeoutId),n.timeoutId=null),a.success?o=!0:t.handleError(new e.UniAppToolsError(a.code,a.message,"payment"),"payment"),r=null,s(a.success))};try{let e;try{e=new URL(c,window.location.href).href}catch{return void a({success:!1,code:"ALIPAY_SDK_INVALID_URL",message:`无效的 JSSDK 地址: ${c}`})}const t=Array.from(document.getElementsByTagName("script")).find(t=>t.src===e),s=t??document.createElement("script");n.script=s,n.createdByThisCall=!t;const o=()=>{setTimeout(()=>{window.ap?a({success:!0}):a({success:!1,code:"ALIPAY_SDK_INIT_ERROR",message:"支付宝 JSSDK 加载成功但未能初始化 window.ap"})},50)},r=e=>{n.createdByThisCall&&s.parentNode&&s.parentNode.removeChild(s),a({success:!1,code:"ALIPAY_SDK_LOAD_ERROR",message:`支付宝 JSSDK 加载失败: ${String(e?.type||"error")}`})};s.addEventListener("load",o,{once:!0}),s.addEventListener("error",r,{once:!0}),n.timeoutId=setTimeout(()=>{n.createdByThisCall&&s.parentNode&&s.parentNode.removeChild(s),a({success:!1,code:"ALIPAY_SDK_LOAD_TIMEOUT",message:"支付宝 JSSDK 加载超时"})},d),n.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&&a({success:!0})}catch(e){a({success:!1,code:"ALIPAY_SDK_UNEXPECTED_ERROR",message:`支付宝 JSSDK 注入过程发生意外异常: ${e instanceof Error?e.message:String(e)}`})}}),r):(t.handleError(new e.UniAppToolsError("ALIPAY_SDK_ENV_ERROR","不在浏览器环境中,无法注入支付宝 JSSDK","payment"),"payment"),Promise.resolve(!1))},exports.resetAlipayJsSdk=()=>{o=!1,r=null};