未解决之前代码
获取当前url并处理
//去除url上的openid参数
const href = location.href.replace(/(|&)openid=([^&]*)(?=#)/, '');
//更改当前url,这里应该是历史纪录也替换掉了
history.replaceState(null, null, href);
出现的情况
进入微信页面后,点击右上角分享按钮,点击复制链接,发现粘贴的链接还是之前的url,依然带有openid参数
(这里会影响到业务)
分析可能的原因
- ios无法监听到重写url的,每次获取到的当前url都是第一次进入页面的时候的url
(但是其他ios是可以的) - 微信内置浏览器(ios用的应该是safari)无法检测到history.replaceState更改后的变化
解决方案
增加代码
//替换之前的url历史纪录
window.location.replace(href)
结果
成功解决
这样子做的话相当于刷新了页面,会导致其他问题,不太可取。
iOS Safari 中replaceState改变URL后复制问题及解决
在部分iOS设备的Safari或微信内置浏览器中,使用`history.replaceState`修改当前URL后,复制链接仍显示原始URL。这可能导致业务受影响,因为复制的链接未更新。原因可能是iOS无法正确监听URL变化。解决方案虽能解决问题,但强制页面刷新会引入其他问题,不推荐使用。
1072

被折叠的 条评论
为什么被折叠?



