jump.js 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. import Taro from '@tarojs/taro'
  2. const PAGE_WEBVIEW = '/pages/webview/webview'
  3. /**
  4. * // NOTE 后端返回的 url 可能是网页链接,需要在 webview 中打开
  5. * 也可能是小程序自身的链接,只能用 navigate/redirect 之类的打开
  6. * 就需要有个地方统一判断处理
  7. */
  8. export default function jump(options) {
  9. const { url, title = '', payload = {}, method = 'navigateTo' } = options
  10. if (/^https?:\/\//.test(url)) {
  11. Taro[method]({
  12. url: urlStringify(PAGE_WEBVIEW, { url, title })
  13. })
  14. } else if (/^\/pages\//.test(url)) {
  15. // TODO H5 不支持 switchTab,暂时 hack 下
  16. if (process.env.TARO_ENV === 'h5' && method === 'switchTab') {
  17. Taro.navigateBack({ delta: Taro.getCurrentPages().length - 1 })
  18. setTimeout(() => { Taro.redirectTo({ url }) }, 100)
  19. return
  20. }
  21. Taro[method]({
  22. url: urlStringify(url, payload)
  23. })
  24. }
  25. }
  26. function urlStringify(url, payload, encode = true) {
  27. const arr = Object.keys(payload).map(key =>
  28. `${key}=${encode ? encodeURIComponent(payload[key]) : payload[key]}`
  29. )
  30. // NOTE 注意支付宝小程序跳转链接如果没有参数,就不要带上 ?,否则可能无法跳转
  31. return arr.length ? `${url}?${arr.join('&')}` : url
  32. }