1.跳转第三方页面方式
安卓通过连接打开第三方应用可以用window.open,ios只能用window.location
在 iOS 系统中,由于苹果的严格限制,应用程序通常无法直接退出应用,所以在h5中打开应用后无法再返回到原窗口页面
1.1 window.location
在当前窗口打开新页面
window.location.href 会生成一条历史记录
window.location.replace 不会生成一条历史记录
ios推荐用此方法
1.2 window.open(url, '_blank')
新开一个窗口打开此页面,无法回退
此方法在ios上用不了,Safari 或第三方浏览器可能会限制新标签页的打开,特别是当它们处于某些特定的模式(如无痕浏览模式)时
2.跳转后返回页面兼容处理
在跳转到第三方页面后再回来,可能会导致项目中某些组件库失效,这时需要window.location.reload()来强制刷新一下页面,在taro+react+ts开发过程中,我发现在我跳转到第三方页面像微信支付、人脸识别等页面后再回来,项目中有些Taro的方法会失效,需要在回到此页面时执行window.location.reload()来强制刷新一下页面,这样就没有问题了,这样会有一个新的问题就是window.location.reload()执行会再此触发页面加载的生命周期,所以在执行window.location.reload()操作时还需要加一个判断条件来控制,只有在第一次进来才触发,实现方法如下:
1.在跳转第三方页面前存个值来标记开启刷新
Taro.setStorageSync('PAY_RETURN_RELOAD', true)
if (getDeviceOS() === 'Android') {
window.open(payUrl, '_blank')
} else {
window.location.href = payUrl
}
2.在页面加载生命周期执行,并且执行后关闭刷新状态
useDidShow(() => {
if (Taro.getStorageSync('PAY_RETURN_RELOAD')) {
Taro.setStorageSync('PAY_RETURN_RELOAD', false)
window.location.reload()
}
})