Skip to content

useShare

调用系统原生分享功能,分享文本、链接和文件。

前置依赖

依赖参数

参数名类型说明
deps.vue.ref<T>(value: T) => Ref<T>Vue ref 函数
deps.navigatorNavigatorShareNavigator Share API

环境要求

浏览器 API: Web Share API

平台支持:

  • 移动端(iOS Safari、Android Chrome)- 完全支持
  • Windows(Chrome、Edge)- 支持
  • macOS(Safari)- 支持
  • ⚠️ Linux - 部分浏览器支持

需要 HTTPS 环境(localhost 除外)。

函数签名

typescript
function useShare(
  deps: UseShareDeps
): UseShareReturn

interface UseShareDeps {
  vue: VueCompositionAPI
  navigator: NavigatorShare
}

interface UseShareReturn {
  isSupported: Ref<boolean>
  isSharing: Ref<boolean>
  error: Ref<string | null>
  share: (data: ShareData) => Promise<boolean>
}

interface ShareData {
  title?: string
  text?: string
  url?: string
  files?: File[]
}

参数

参数名类型必填说明
depsUseShareDeps依赖注入对象

返回值

属性类型说明
isSupportedRef<boolean>是否支持 Share API
isSharingRef<boolean>是否正在分享
errorRef<string | null>错误信息
share(data: ShareData) => Promise<boolean>分享内容,返回是否成功

工作原理

  1. 检查浏览器是否支持 Web Share API
  2. 检查分享数据是否有效(使用 canShare
  3. 调用系统分享面板
  4. 用户选择分享目标应用
  5. 返回分享结果(用户取消不算错误)

分享目标:

  • 移动端:微信、微博、邮件、短信、复制链接等
  • 桌面端:邮件、OneNote、Twitter 等

注意:

  • 用户取消分享不会设置 error,而是返回 false
  • 分享文件功能为实验性,并非所有浏览器都支持

异常

无异常抛出