为什么会有这个需求:
原生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 直接关闭