From f72b77fe0d14a6b9da4756618c50af3be467682c Mon Sep 17 00:00:00 2001 From: sexygoat <1538832180@qq.com> Date: Fri, 17 Apr 2026 11:03:04 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E6=89=AB=E4=B8=80?= =?UTF-8?q?=E6=89=AB=E7=99=BB=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- utils/wxsdk.js | 77 ++++++++++++++++++++++++++------------------------ 1 file changed, 40 insertions(+), 37 deletions(-) diff --git a/utils/wxsdk.js b/utils/wxsdk.js index 5c22fd9..1b858dd 100644 --- a/utils/wxsdk.js +++ b/utils/wxsdk.js @@ -3,54 +3,54 @@ import { wechatApi } from '@/api/index.js'; // 动态加载微信 JSSDK const loadWxJSSDK = () => { return new Promise((resolve, reject) => { + console.log('[JSSDK] 开始检查加载状态...'); + console.log('[JSSDK] window.wx =', window.wx); + console.log('[JSSDK] typeof window.wx =', typeof window.wx); + // 如果已经加载,直接返回 if (window.wx && typeof window.wx.config === 'function') { - console.log('微信JSSDK已存在'); + console.log('[JSSDK] 已存在,直接使用'); resolve(); return; } - // 检查是否已经有 script 标签在加载 - const existingScript = document.querySelector('script[src*="jweixin"]'); - if (existingScript) { - console.log('检测到JSSDK脚本标签,等待加载完成...'); - // 等待已有的脚本加载完成 - let count = 0; - const maxCount = 50; - const timer = setInterval(() => { - count++; - if (window.wx && typeof window.wx.config === 'function') { - clearInterval(timer); - console.log('微信JSSDK加载成功'); - resolve(); - } else if (count >= maxCount) { - clearInterval(timer); - reject(new Error('微信JSSDK加载超时')); - } - }, 100); - return; - } - - console.log('开始动态加载微信JSSDK...'); + console.log('[JSSDK] 未加载,开始动态加载...'); // 动态创建 script 标签 const script = document.createElement('script'); script.type = 'text/javascript'; script.src = 'https://res.wx.qq.com/open/js/jweixin-1.6.0.js'; script.onload = () => { - console.log('微信JSSDK脚本加载完成'); - if (window.wx && typeof window.wx.config === 'function') { - resolve(); - } else { - reject(new Error('微信JSSDK脚本加载失败')); - } + console.log('[JSSDK] 脚本加载完成,等待wx对象初始化...'); + + // 脚本加载完成后,需要等待一小段时间让wx对象被赋值 + // 使用轮询检查wx对象是否可用 + let checkCount = 0; + const maxCheckCount = 20; // 最多检查2秒 (20 * 100ms) + + const checkWx = setInterval(() => { + checkCount++; + console.log(`[JSSDK] 检查wx对象 (${checkCount}/${maxCheckCount})`, window.wx); + + if (window.wx && typeof window.wx.config === 'function') { + clearInterval(checkWx); + console.log('[JSSDK] wx对象已就绪'); + resolve(); + } else if (checkCount >= maxCheckCount) { + clearInterval(checkWx); + console.error('[JSSDK] wx对象初始化超时'); + console.error('[JSSDK] window.wx =', window.wx); + reject(new Error('微信JSSDK初始化超时,请在微信中打开')); + } + }, 100); }; - script.onerror = () => { - console.error('微信JSSDK脚本加载失败'); + script.onerror = (err) => { + console.error('[JSSDK] 脚本加载失败', err); reject(new Error('微信JSSDK脚本加载失败,请检查网络')); }; + console.log('[JSSDK] 插入 script 标签到 head'); document.head.appendChild(script); }); }; @@ -58,13 +58,16 @@ const loadWxJSSDK = () => { export const initWxSdk = async () => { // #ifdef H5 try { + console.log('[initWxSdk] 开始初始化...'); + // 动态加载微信 JSSDK await loadWxJSSDK(); const currentUrl = window.location.href.split('#')[0]; - console.log('JSSDK URL:', currentUrl); + console.log('[initWxSdk] 当前URL:', currentUrl); + const data = await wechatApi.getJssdkConfig(currentUrl); - console.log('JSSDK Config:', data); + console.log('[initWxSdk] 获取到配置:', data); window.wx.config({ debug: true, @@ -77,17 +80,17 @@ export const initWxSdk = async () => { return new Promise((resolve) => { window.wx.ready(() => { - console.log('微信SDK配置成功'); + console.log('[initWxSdk] SDK配置成功'); resolve({ success: true }); }); window.wx.error((err) => { - console.error('wx.config error:', err); + console.error('[initWxSdk] SDK配置失败:', err); resolve({ success: false, error: err.errMsg || '微信配置失败' }); }); }); } catch (e) { - console.error('WX SDK init failed', e); - return { success: false, error: e.message || '微信JSSDK未加载,请在微信中打开' }; + console.error('[initWxSdk] 初始化失败:', e); + return { success: false, error: e.message || '初始化失败' }; } // #endif // #ifndef H5