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()
    } 
})

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐