Navigator: метод share()
Ограниченная доступность
Эта функция не относится к Baseline, так как она не работает во всех широко используемых браузерах.
Безопасный контекст: Эта функция доступна только в безопасных контекстах (HTTPS) в некоторых или всех поддерживающих браузерах.
Метод share() интерфейса Navigator вызывает механизм совместного использования данных устройства для обмена данными, такими как текст, URL-адреса или файлы. Доступные цели обмена зависят от устройства, но могут включать буфер обмена, приложения контактов и электронной почты, веб-сайты, Bluetooth и т.д.
Метод разрешает Promise со значением undefined. В Windows это происходит при запуске всплывающего окна обмена, а в Android обещание выполняется, как только данные успешно переданы в цель обмена.
API веб-обмена управляется политикой разрешений web-share. Метод share() будет генерировать исключения, если разрешение поддерживается, но не предоставлено.
Синтаксис
navigator.share(data)
Параметры
dataНеобязательно-
Объект, содержащий данные для обмена.
Свойства, неизвестные пользовательскому агенту, игнорируются; данные обмена оцениваются только по свойствам, понятным пользовательскому агенту. Все свойства необязательны, но должно быть указано хотя бы одно известное свойство данных.
Возможные значения:
urlНеобязательно-
Строка, представляющая URL-адрес, который нужно поделиться.
textНеобязательно-
Строка, представляющая текст, который нужно поделиться.
titleНеобязательно-
Строка, представляющая заголовок для совместного использования. Может быть проигнорировано целевым приложением.
filesНеобязательно-
Массив объектов
File, представляющих файлы, которые нужно поделиться. См. ниже для типов файлов, которые можно поделиться.
Возвращаемое значение
A Promise, который завершается значением undefined, или отклоняется с одним из исключений, указанных ниже.
Исключения
Обещание Promise может быть отклонено с одним из следующих DOMException значений:
-
InvalidStateErrorDOMException -
Документ не полностью активен или другие операции обмена находятся в процессе.
-
NotAllowedErrorDOMException -
Политика разрешений
web-sharePermissions Policy была использована для блокировки использования этой функции, окно не имеет взаимодействия с пользователем, или обмен файлами заблокирован по соображениям безопасности. TypeError-
Указанные данные для обмена не могут быть проверены. Возможные причины:
- Параметр
dataбыл опущен или содержит только свойства с неизвестными значениями. Обратите внимание, что любые свойства, которые не распознаются пользовательским агентом, игнорируются. - URL-адрес имеет неправильный формат.
- Указаны файлы, но реализация не поддерживает обмен файлами.
- Обмен указанными данными будет рассматриваться пользовательским агентом как «враждебный обмен».
- Параметр
-
AbortErrorDOMException -
Пользователь отменил операцию обмена или доступные цели обмена отсутствуют.
-
DataErrorDOMException -
Возникла проблема при запуске целевого приложения для обмена или передаче данных.
Типы файлов, которые можно поделиться
Ниже приведен список обычно поддерживаемых типов файлов. Однако всегда нужно проверять с помощью 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
-
Безопасность
Для этого метода необходимо, чтобы текущий документ имел политику разрешений web-share и временное активирование. (Он должен быть инициирован событием пользовательского интерфейса, таким как нажатие кнопки, и не может быть запущен в произвольные моменты скриптом). Кроме того, метод должен указывать валидные данные, поддерживаемые для обмена родной реализацией.
Примеры
Обмен URL-адресом
В приведенном ниже примере демонстрируется нажатие кнопки, вызывающее API веб-обмена для обмена URL-адресом MDN. Это взято из нашего теста веб-обмена (см. исходный код).
HTML
HTML просто создает кнопку для запуска обмена и абзац, в котором отображается результат теста.
<p><button>Share MDN!</button></p> <p class="result"></p>
JavaScript
const shareData = {
title: "MDN",
text: "Learn web development on MDN!",
url: "https://developer.mozilla.org",
};
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
<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 не должны иметь значения.
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 Share API # share-method |
Совместимость с браузерами
| Рабочий стол | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
share |
9381–93Поддерживается только в Windows. |
71 | 12.1 | 61 | 79 | 48 | 12.2 | 8.0 | Нет | ||
data_files_parameter |
89 | 81 | Нет | 75 | 14 | 76 | Нет | 54 | 14 | 11.0 | Нет |
data_text_parameter |
89 | 81 | 71 | 75 | 14 | 76 | Нет | 54 | 14 | 11.0 | Нет |
См. также
navigator.canShare()- https://wpt.live/web-share/ (тесты веб-платформы)
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/Navigator/share