夜猫子的知识栈 夜猫子的知识栈
首页
  • 前端文章

    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《Web Api》
    • 《ES6教程》
    • 《Vue》
    • 《React》
    • 《TypeScript》
    • 《Git》
    • 《Uniapp》
    • 小程序笔记
    • 《Electron》
    • JS设计模式总结
  • 《前端架构》

    • 《微前端》
    • 《权限控制》
    • monorepo
  • 全栈项目

    • 任务管理日历
    • 无代码平台
    • 图书管理系统
  • HTML
  • CSS
  • Nodejs
  • Midway
  • Nest
  • MySql
  • 其他
  • 技术文档
  • GitHub技巧
  • 博客搭建
  • Ajax
  • Vite
  • Vitest
  • Nuxt
  • UI库文章
  • Docker
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

夜猫子

前端练习生
首页
  • 前端文章

    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《Web Api》
    • 《ES6教程》
    • 《Vue》
    • 《React》
    • 《TypeScript》
    • 《Git》
    • 《Uniapp》
    • 小程序笔记
    • 《Electron》
    • JS设计模式总结
  • 《前端架构》

    • 《微前端》
    • 《权限控制》
    • monorepo
  • 全栈项目

    • 任务管理日历
    • 无代码平台
    • 图书管理系统
  • HTML
  • CSS
  • Nodejs
  • Midway
  • Nest
  • MySql
  • 其他
  • 技术文档
  • GitHub技巧
  • 博客搭建
  • Ajax
  • Vite
  • Vitest
  • Nuxt
  • UI库文章
  • Docker
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • canvas
  • clipboard
  • fetch
  • fontface
  • formdata
  • geolocation
  • headers
  • intersectionObserver
  • intl-relativetimeformat
  • intl-segmenter
  • offline
  • page-lifecycle
  • page-visibility
  • pointer-lock
  • postmessage
  • request
  • response
  • server-sent-events
  • service-worker
  • svg
  • url
  • urlpattern
  • urlsearchparams
  • web-share-api
    • 概述
    • 接口细节
    • 分享文件
    • 参考链接
  • webaudio
  • webcomponents
  • websocket
  • 《Web Api》笔记
夜猫子
2024-09-06
目录

web-share-api

# Web Share API

# 概述

网页内容如果要分享到其他应用,通常要自己实现分享接口,逐一给出目标应用的连接方式。这样很麻烦,也对网页性能有一定影响。Web Share API 就是为了解决这个问题而提出的,允许网页调用操作系统的分享接口,实质是 Web App 与本机的应用程序交换信息的一种方式。

这个 API 不仅可以改善网页性能,而且不限制分享目标的数量和类型。社交媒体应用、电子邮件、即时消息、以及本地系统安装的、且接受分享的应用,都会出现在系统的分享弹窗,这对手机网页尤其有用。另外,使用这个接口只需要一个分享按钮,而传统的网页分享有多个分享目标,就有多少个分享按钮。

目前,桌面的 Safari 浏览器,手机的安卓 Chrome 浏览器和 iOS Safari 浏览器,支持这个 API。

这个 API 要求网站必须启用 HTTPS 协议,但是本地 Localhost 开发可以使用 HTTP 协议。另外,这个 API 不能直接调用,只能用来响应用户的操作(比如click事件)。

# 接口细节

该接口部署在navigator.share,可以用下面的代码检查本机是否支持该接口。

if (navigator.share) {
  // 支持
} else {
  // 不支持
}
1
2
3
4
5

navigator.share是一个函数方法,接受一个配置对象作为参数。

navigator.share({
  title: 'WebShare API Demo',
  url: 'https://codepen.io/ayoisaiah/pen/YbNazJ',
  text: '我正在看《Web Share API》'
})
1
2
3
4
5

配置对象有三个属性,都是可选的,但至少必须指定一个。

  • title:分享文档的标题。
  • url:分享的 URL。
  • text:分享的内容。

一般来说,url是当前网页的网址,title是当前网页的标题,可以采用下面的写法获取。

const title = document.title;
const url = document.querySelector('link[rel=canonical]') ?
  document.querySelector('link[rel=canonical]').href :
  document.location.href;
1
2
3
4

navigator.share的返回值是一个 Promise 对象。这个方法调用之后,会立刻弹出系统的分享弹窗,用户操作完毕之后,Promise 对象就会变为resolved状态。

navigator.share({
  title: 'WebShare API Demo',
  url: 'https://codepen.io/ayoisaiah/pen/YbNazJ'
}).then(() => {
  console.log('Thanks for sharing!');
}).catch((error) => {
  console.error('Sharing error', error);
});
1
2
3
4
5
6
7
8

由于返回值是 Promise 对象,所以也可以使用await命令。

shareButton.addEventListener('click', async () => {
  try {
    await navigator.share({ title: 'Example Page', url: '' });
    console.log('Data was shared successfully');
  } catch (err) {
    console.error('Share failed:', err.message);
  }
});
1
2
3
4
5
6
7
8

# 分享文件

这个 API 还可以分享文件,先使用navigator.canShare()方法,判断一下目标文件是否可以分享。因为不是所有文件都允许分享的,目前图像,视频,音频和文本文件可以分享2。

if (navigator.canShare && navigator.canShare({ files: filesArray })) {
  // ...
}
1
2
3

上面代码中,navigator.canShare()方法的参数对象,就是navigator.share()方法的参数对象。这里的关键是files属性,它的值是一个FileList实例对象。

navigator.canShare()方法返回一个布尔值,如果为true,就可以使用navigator.share()方法分享文件了。

if (navigator.canShare && navigator.canShare({ files: filesArray })) {
  navigator.share({
    files: filesArray,
    title: 'Vacation Pictures',
    text: 'Photos from September 27 to October 14.',
  })
  .then(() => console.log('Share was successful.'))
  .catch((error) => console.log('Sharing failed', error));
}
1
2
3
4
5
6
7
8
9

# 参考链接

  • How to Use the Web Share API (opens new window), Ayooluwa Isaiah
  • Web Share API - Level 1 (opens new window), W3C
  • Introducing the Web Share API (opens new window), Paul Kinlan, Sam Thorogood
  • Share like a native app with the Web Share API (opens new window), Joe Medley
编辑 (opens new window)
上次更新: 2024/9/6 12:14:45
urlsearchparams
webaudio

← urlsearchparams webaudio→

最近更新
01
IoC 解决了什么痛点问题?
03-10
02
如何调试 Nest 项目
03-10
03
Provider注入对象
03-10
更多文章>
Copyright © 2019-2025 Study | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式