小程序
小游戏
企业微信
微信支付
扫描小程序码分享
IOS13.4 iPhoneX
进入微信后调用的replaceState,导致二维码图片无法识别,去掉就好了
2 个回答
加粗
标红
插入代码
插入链接
插入图片
上传视频
// 第一版:仅针对demo做的兼容处理,可以解决长按问题。但无法解决项目中; var original = window.history.replaceState; window.history.replaceState = function() { var args = arguments; setTimeout(function() { original.apply(window.history, args); }, 0); window.history.replaceState = original; }; // 第二版:项目中尝试,延迟需要加到1s后, 但我觉得优先考虑上面的代码; let original = window.history.replaceState; let timer; let startTime = new Date(); let delay = 1000; window.history.replaceState = (...args) => { let diff = new Date() - startTime; let fn = () => { // 确保第一次都是异步的 setTimeout(() => { original.apply(window.history, args); }, 0); window.history.replaceState = original; }; if (diff < delay) { timer && clearTimeout(timer); timer = setTimeout(fn, delay - diff); } else { fn(); } }; /** * 最终版 * 同时解决二维码和签名问题 */ let schedule; let original = window.history.replaceState; window.history.replaceState = (...args) => { schedule && schedule('cancel');; Promise.race([ new Promise(r => wx.ready(r)), // 有sdk的情况下 new Promise((_, reject) => schedule = reject), // 3s这个也可以改成1s,看个人; new Promise(r => setTimeout(r, 3000)) ]) .then(() => { original.apply(window.history, args); window.history.replaceState = original; }).catch((e) => { console.log(e); }); };
你好,麻烦通过点击下方“反馈信息”按钮,提供出现问题的。
你好,微信版本是多少?麻烦给下复现的链接
关注后,可在微信内接收相应的重要提醒。
请使用微信扫描二维码关注 “微信开放社区” 公众号
// 第一版:仅针对demo做的兼容处理,可以解决长按问题。但无法解决项目中; var original = window.history.replaceState; window.history.replaceState = function() { var args = arguments; setTimeout(function() { original.apply(window.history, args); }, 0); window.history.replaceState = original; }; // 第二版:项目中尝试,延迟需要加到1s后, 但我觉得优先考虑上面的代码; let original = window.history.replaceState; let timer; let startTime = new Date(); let delay = 1000; window.history.replaceState = (...args) => { let diff = new Date() - startTime; let fn = () => { // 确保第一次都是异步的 setTimeout(() => { original.apply(window.history, args); }, 0); window.history.replaceState = original; }; if (diff < delay) { timer && clearTimeout(timer); timer = setTimeout(fn, delay - diff); } else { fn(); } }; /** * 最终版 * 同时解决二维码和签名问题 */ let schedule; let original = window.history.replaceState; window.history.replaceState = (...args) => { schedule && schedule('cancel');; Promise.race([ new Promise(r => wx.ready(r)), // 有sdk的情况下 new Promise((_, reject) => schedule = reject), // 3s这个也可以改成1s,看个人; new Promise(r => setTimeout(r, 3000)) ]) .then(() => { original.apply(window.history, args); window.history.replaceState = original; }).catch((e) => { console.log(e); }); };
你好,微信版本是多少?麻烦给下复现的链接
微信版本:7.0.12
手机型号:iPhone11 Pro Max 13.4.1