JS返回浏览器历史第一页

为什么会有这个需求

原生APP内嵌网页

我没法关闭Android webview浏览器,IOS可以, 安卓不可以是因为以前的版本没加这个功能。但是现在安卓不可以发版本,如果发版本又被老板叼一顿,说什么每次都要升级版本才能解决问题。

我们做了一个网页支付,他是APP内嵌网页进行的。 那肯定会有填写资料 下一步 下一步。 现在的问题是到最后一步点击完成,网页直接控制关闭APP webview浏览器就能回到首页了。

但是安卓不行, 只能让用户点击左上角返回上一层,这样就会导致体验问题,要点击很多次返回上一层。 这个时候就想到了能不能直接回退到历史第一页? 然后用户直接点击返回上一层就回到APP首页了。


尝试解决方案一

我想到的是直接-999 不就好了吗?因为我压根就不知道到底有多少条历史记录。 直接-999应该能做到。 这个时候我就尝试了以下,mmp不行...

window.history.go(-999);

尝试解决方案二

定义了一个变量i=13因为一个支付流程不可能会有这么多页, 我尝试用while循环去调用history.go, 他只要发现可以回退这么多条记录,后面循环就终止了 直接跳到第一页了。 答案:经过测试可以;第二天测试的妹子说IOS存在不停刷新的问题,但是已经判断了只有非safari才这么做。 我猜想跟我的判断有问题。 会不会有更好的方法呢?

var i = 13;
while(i--) {
    // -12 => -11 => -10 => -9 ...
    window.history.go(-i);
}

在这段时间我没时间去解决这个问题了,要发版本了。 只能靠万能的百度 Google了, 不过都是利用window.history.go(-1)去返回上一层, 这个并不能解决我的问题。

成功解决方案三

第二天中午,我在浏览器控制台敲了 window.history 其实我想看看还有哪些API,他输出了以下信息,我看到length 这个属性让我眼前一亮,其他2个我不关心。

{
    length: 2,
    scrollRestoration: "auto",
    state: null
}

我尝试用length 去回退, 不成功!

window.history.go(-2);

我再尝试用length去减1, 成功了, 我猜应该是跟新标签页有关吧。 那我不管了,我已经有答案了

window.history.go(-1);

最后代码

var historyLen = window.history;
window.history.go(-(historyLen - 1));

测试了3个浏览器, 都是第一次打开浏览器测试

Chrome 会直接返回到新标签页
Safari 我这里测试是返回到百度,可能是我的设置问题
Firefox 直接关闭
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值