小程序跳转外部链接

Jiafeng

分类: 微信小程序 0 0

前言:小程序的安全限制

微信对小程序的外部链接有严格限制:

  • 只能通过 <WebView /> 组件来加载 H5 页面。

    • 这个 H5 的域名,必须提前在 小程序后台 → 开发设置 → 业务域名 配置。
    • 没配置的域名,一律打不开。

    所以,解决问题的第一步就是搞清楚: 👉 目标链接的域名是否可控、能否添加到业务域名里。


方案一:业务域名 + WebView

如果域名可控,那就很简单:

(1)后台配置业务域名

微信公众平台开发 → 开发管理 → 开发设置 里,把外部系统的域名加到「业务域名」里。

(2)封装一个 Webview 页面

新建一个 pages/webview/index.tsx 页面:

import { WebView } from '@tarojs/components'
import { useRouter } from '@tarojs/taro'

export default function WebviewPage() {
  const router = useRouter()
  const { url } = router.params   // 从路由参数里取出外部链接

  return (
    
  )
}

(3)点击跳转时传递外部链接

Taro.navigateTo({
  url: /pages/webview/index?url=${encodeURIComponent(course.link)}
})

这样就能在小程序里「无缝」打开外部网页,用户体验和原生浏览器几乎一样。


方案二:域名不可控 → 自动复制链接

有些情况,外部系统的域名是公司内网的,根本没法加到微信后台的「业务域名」里。 这时 WebView 打不开,只能换个思路:直接复制链接 → 提示用户去内网环境手动打开。

实现也很简单,用 Taro 的 setClipboardData

 {
    Taro.setClipboardData({
      data: course.link,
      success: () => {
        Taro.showToast({
          title: '链接已复制',
          icon: 'success',
          duration: 2000
        })
      }
    })
  }}
>
  {course.className}

这样用户点击课程名时,会复制到剪贴板,配合一个 Toast 提示,交互也很自然。


进阶:自动判断策略

在项目里,我们甚至可以做一个「自动判断」:

  • 如果 course.link 的域名在白名单里 → 走 WebView。

    • 否则 → 自动复制。
    const whiteList = ['example.com', 'study.company.com']
    const openLink = (link) => {
     const domain = new URL(link).hostname
    
     if (whiteList.includes(domain)) {
       Taro.navigateTo({
         url: /pages/webview/index?url=${encodeURIComponent(link)}
       })
    } else {
       Taro.setClipboardData({
         data: link,
         success: () => {
           Taro.showToast({ title: '链接已复制', icon: 'success' })
         }
       })
    }
    }

    这样在不同环境下都能兜底,用户体验更统一。


总结

  • 微信小程序里 不能直接跳转外部网页,只能走 <WebView />
    • 能加业务域名 → WebView 打开
    • 不能加 → 复制链接兜底
    • 最佳实践:写一个 统一的打开链接函数,自动选择策略。
  • 0人 Love
  • 0人 Haha
  • 0人 Wow
  • 0人 Sad
  • 0人 Angry
webview、小程序

作者简介: Jiafeng

共 0 条评论关于 “小程序跳转外部链接”

Loading...