ios、安卓、鸿蒙大部分用户初次使用该h5应用,首次打开扫码应用都会出现卡死情况,无法扫码识别并且点击左上角返回按钮点击无效,需要关闭微信后台再次进入才可以顺利扫码。测试过程重复打开扫码页面多次,一般第三次时也会导致卡死。调试模式下调用扫码sdk提示正常,进入页面后卡死无法退出和扫码。
引用了
<script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
// 全局初始化微信SDK
export const initWechatSDK = async () => {
if (isInitialized) return Promise.resolve(); // 已初始化直接返回
if (initPromise) return initPromise; // 正在初始化,等待结果
// 生成当前页面URL(去除hash,避免签名错误)
const currentUrl = window.location.href.split('#')[0];
initPromise = new Promise(async (resolve, reject) => {
try {
const res = await getSignature(currentUrl);
wx.config({
debug: false,
appId: res.data.appId,
timestamp: res.data.timestamp,
nonceStr: res.data.nonceStr,
signature: res.data.signature,
jsApiList: ['scanQRCode'],
openTagList: ['wx-open-subscribe'],
});
wx.ready(() => {
isInitialized = true;
resolve();
});
wx.error((err) => {
console.error('微信SDK初始化失败:', err);
isInitialized = false;
reject(err);
});
} catch (err) {
console.error('获取签名失败:', err);
reject(err);
} finally {
initPromise = null; // 重置初始化Promise
}
});
return initPromise;
};
const handleScan = async () => {
if (isScanning.value) return; // 防止重复触发
try {
// 确保SDK已初始化
await initWechatSDK();
// 执行扫码
isScanning.value = true;
wx.scanQRCode({
needResult: 1, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,
scanType: ['barCode'], // 可以指定扫二维码还是一维码,默认二者都有
success: function (res) {
emit('scanVal', res);
},
fail: function (res) {
uni.showToast({
title: '识别失败',
icon: 'error'
})
},
});
} catch (err) {
console.error('扫码失败:', err);
// 根据错误类型提示用户
if (err.message.includes('不支持扫码')) {
uni.showToast({ title: '当前环境不支持扫码', icon: 'error' });
} else if (err.message.includes('cancel')) {
uni.showToast({ title: '已取消扫码', icon: 'none' });
} else {
uni.showToast({ title: '扫码失败,请重试', icon: 'error' });
}
} finally {
isScanning.value = false; // 无论成功失败,最终重置状态
}
};

你好,麻烦提供下机型,微信版本号和复现链接