如题:
我的webview页面打开的h5页面是一个中间页,中间页进行一系列判断逻辑后,会跳转最终的目标页。
但是这个中间页的逻辑只能执行一次,我不希望用户点击返回上一页时再回到这个页面。
因此,我使用 location.replace(url) 方式跳转页面。
但是在 ios 环境,我发现 location.replace() 跳转后的表现跟location.href 一样,在返回上一页时,仍然回到了这个中间页。
导致页面逻辑再次执行,发生错误。
解决方案:
使用 history.replaceState(newState, '', newUrl) + location.reload 替代 location.replace,重新封装一个replace方法。
javascript
function locationReplaceUrl(url) {
// 判断是否为iOS环境
const isIOS = /(iPhone|iPad|iPod)/i.test(navigator.userAgent) && !window.MSStream; // 排除IE/Edge
if(isIOS) {
try {
// 替换当前历史记录条目,url可以是相对路径或绝对路径
history.replaceState(null, '', url);
location.reload();
} catch (err) {
location.replace(url);
}
}else {
location.replace(url);
}
}