Navigator:share() 方法
share()
是 Navigator
接口的一种方法,它调用设备的原生共享机制来共享数据,例如文本、URL 或文件。可用的共享目标取决于设备,但可能包括剪贴板、联系人及电子邮件应用程序、网站、蓝牙等。
该方法解析一个 Promise
,并返回 undefined
。在 Windows 上,当共享弹出窗口启动时发生这种情况,而在 Android 上,一旦数据成功传递到共享目标,该 promise 就会解析。
Web 共享 API 受 web-share 权限策略控制。如果支持该权限但尚未授予,则 share()
方法将抛出异常。
语法
js
navigator.share(data)
参数
返回值
异常
Promise
可能会因以下 DOMException
值而被拒绝
InvalidStateError
DOMException
-
文档未完全激活,或其他共享操作正在进行中。
NotAllowedError
DOMException
TypeError
-
无法验证指定的共享数据。可能的原因包括:
data
参数完全省略或仅包含具有未知值的属性。请注意,用户代理无法识别的任何属性都会被忽略。- URL 格式错误。
- 指定了文件,但实现不支持文件共享。
- 用户代理会将共享指定数据视为“恶意共享”。
AbortError
DOMException
-
用户取消了共享操作或没有可用的共享目标。
DataError
DOMException
-
启动共享目标或传输数据时出现问题。
可共享的文件类型
以下是通常可共享的文件类型列表。但是,您应该始终使用 navigator.canShare()
测试共享是否成功。
- 应用程序
.pdf
-application/pdf
- 音频
.flac
-audio/flac
.m4a
-audio/x-m4a
.mp3
-audio/mpeg
(也接受audio/mp3
).oga
-audio/ogg
.ogg
-audio/ogg
.opus
-audio/ogg
.wav
-audio/wav
.weba
-audio/webm
- 图像
.avif
-image/avif
.bmp
-image/bmp
.gif
-image/gif
.ico
-image/x-icon
.jfif
-image/jpeg
.jpeg
-image/jpeg
.jpg
-image/jpeg
.pjp
-image/jpeg
.pjpeg
-image/jpeg
.png
-image/png
.svg
-image/svg+xml
.svgz
-image/svg+xml
.tif
-image/tiff
.tiff
-image/tiff
.webp
-image/webp
.xbm
-image/x-xbitmap
- 文本
.css
-text/css
.csv
-text/csv
.ehtml
-text/html
.htm
-text/html
.html
-text/html
.shtm
-text/html
.shtml
-text/html
.text
-text/plain
.txt
-text/plain
- 视频
.m4v
-video/mp4
.mp4
-video/mp4
.mpeg
-video/mpeg
.mpg
-video/mpeg
.ogm
-video/ogg
.ogv
-video/ogg
.webm
-video/webm
安全
示例
共享 URL
以下示例显示了按钮点击调用 Web Share API 以共享 MDN 的 URL。这取自我们的 Web 共享测试(查看源代码)。
HTML
HTML 只创建了一个按钮来触发共享,以及一个段落来显示测试结果。
html
<p><button>Share MDN!</button></p>
<p class="result"></p>
JavaScript
js
const shareData = {
title: "MDN",
text: "Learn web development on MDN!",
url: "https://mdn.org.cn",
};
const btn = document.querySelector("button");
const resultPara = document.querySelector(".result");
// Share must be triggered by "user activation"
btn.addEventListener("click", async () => {
try {
await navigator.share(shareData);
resultPara.textContent = "MDN shared successfully";
} catch (err) {
resultPara.textContent = `Error: ${err}`;
}
});
结果
点击按钮在您的平台上启动共享对话框。按钮下方将显示文本,指示共享是否成功或提供错误代码。
共享文件
要共享文件,请首先测试并调用 navigator.canShare()
。然后在对 navigator.share()
的调用中包含文件列表。
HTML
html
<div>
<label for="files">Select images to share:</label>
<input id="files" type="file" accept="image/*" multiple />
</div>
<button id="share" type="button">Share your images!</button>
<output id="output"></output>
JavaScript
请注意,传递给 navigator.canShare()
的数据对象仅包含 files
属性,因为 title
和 text
不重要。
js
const input = document.getElementById("files");
const output = document.getElementById("output");
document.getElementById("share").addEventListener("click", async () => {
const files = input.files;
if (files.length === 0) {
output.textContent = "No files selected.";
return;
}
// feature detecting navigator.canShare() also implies
// the same for the navigator.share()
if (!navigator.canShare) {
output.textContent = `Your browser doesn't support the Web Share API.`;
return;
}
if (navigator.canShare({ files })) {
try {
await navigator.share({
files,
title: "Images",
text: "Beautiful images",
});
output.textContent = "Shared!";
} catch (error) {
output.textContent = `Error: ${error.message}`;
}
} else {
output.textContent = `Your system doesn't support sharing these files.`;
}
});
结果
规范
规范 |
---|
Web 共享 API # share-method |
浏览器兼容性
BCD 表格仅在启用 JavaScript 的浏览器中加载。