Web Share API: нативна кнопка «Поділитися» з fallback

Користувачі все частіше очікують, що поділитися контентом з сайту можна через нативний діалог операційної системи — як у мобільних застосунках. Замість громіздких блоків з десятком кнопок соцмереж достатньо однієї кнопки «Поділитися», яка викликає системний інтерфейс: Telegram, WhatsApp, Notes, AirD

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 2062 послуг
Web Share API: нативна кнопка «Поділитися» з fallback
Простий
~2-3 години

Наші компетенції:

Часті запитання

Останні роботи

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1467
  • Розробка веб-додатків для компанії FEEDME
    Розробка веб-додатків для компанії FEEDME
    1317
  • Розробка веб-сайту для компанії БЕЛФІНГРУП
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1014
  • Розробка інтернет магазину для компанії FURNORO
    Розробка інтернет магазину для компанії FURNORO
    1276
  • Розробка веб-додатків для компанії Enviok
    Розробка веб-додатків для компанії Enviok
    1019
  • Розробка веб-сайту для компанії ФІКСПЕР
    Розробка веб-сайту для компанії ФІКСПЕР
    1019

Користувачі все частіше очікують, що поділитися контентом з сайту можна через нативний діалог операційної системи — як у мобільних застосунках. Замість громіздких блоків з десятком кнопок соцмереж достатньо однієї кнопки «Поділитися», яка викликає системний інтерфейс: Telegram, WhatsApp, Notes, AirDrop та інші застосунки. Web Share API — вбудована можливість браузера — дає це без встановлення сторонніх SDK. Ми вже реалізували такий шарінг для 15+ проєктів, і він стабільно працює на iOS та Android. Наш досвід у нативних API — понад 5 років, і ми гарантуємо коректну роботу на всіх підтримуваних браузерах.

Однак у API є особливості. На десктопах підтримка неповна: у Firefox та Safari macOS нативний діалог не відкривається. Тому критично важливо передбачити fallback — копіювання посилання в буфер обміну. У цій статті розберемо, як правильно інтегрувати Web Share API з урахуванням усіх нюансів: перевірка підтримки, шарінг файлів, обробка помилок та React-компонент із запасним варіантом.

Чому Web Share API кращий за кастомні кнопки?

Кастомні кнопки соцмереж вимагають інтеграції окремого SDK для кожної платформи, оновлення при змінах API і не дають нативного UX. Web Share API вирішує все однією функцією:

Критерій Web Share API Кастомні кнопки соцмереж
Кількість коду 1 функція ~10 різних інтеграцій
Підтримка файлів Так Ні або складно
Нативний UX Так Ні
Робота на десктопі Частково (Chrome, Edge) Так (якщо є SDK)
Обслуговування Одна точка N точок при оновленні API

API вбудовано в браузер, не вимагає завантаження скриптів і працює навіть офлайн (якщо сторінка завантажена).

Що таке Web Share API і як він працює?

Web Share API — це вбудований метод браузера navigator.share(). Ви передаєте об'єкт з полями title, text, url або files, і браузер відкриває системний діалог вибору застосунків. Згідно зі специфікацією MDN, API підтримується на iOS Safari 12.1+, Android Chrome 61+, Edge 79+. На десктопних Chrome та Edge (Windows) API працює, Firefox і Safari macOS — ні.

Які дані можна шейрити через Web Share API?

API дозволяє шейрити:

  • Текст і URL (обов'язково хоча б одне)
  • Файли: зображення, PDF, відео — через властивість files
  • Дані з Canvas після конвертації в Blob

Для перевірки підтримуваного типу даних використовуйте navigator.canShare(). Якщо дані не підтримуються, викинеться помилка — її потрібно перехопити та виконати fallback.

Базовий шарінг

interface ShareData { title?: string text?: string url?: string files?: File[] } async function share(data: ShareData): Promise<void> { if (!navigator.share) { throw new Error('Web Share API не підтримується') } // Перевірка, що браузер підтримує конкретний набір даних if (!navigator.canShare(data)) { throw new Error('Цей тип контенту не підтримується для шарінгу') } await navigator.share(data) } 

Ця утиліта — база для будь-якої інтеграції. Зверніть увагу: canShare необов'язковий, але без нього помилка може виникнути лише під час виклику.

Шарінг файлів

async function shareFile(file: File, title?: string): Promise<void> { const data: ShareData = { files: [file], title } if (!navigator.canShare?.(data)) { // Fallback: запропонувати завантажити файл const url = URL.createObjectURL(file) const a = document.createElement('a') a.href = url a.download = file.name a.click() URL.revokeObjectURL(url) return } await navigator.share(data) } // Шарінг Canvas як зображення async function shareCanvas( canvas: HTMLCanvasElement, filename: string, title?: string ): Promise<void> { const blob = await new Promise<Blob>((resolve, reject) => canvas.toBlob((b) => (b ? resolve(b) : reject(new Error('Помилка'))), 'image/png') ) const file = new File([blob], filename, { type: 'image/png' }) await shareFile(file, title) } 

React-компонент з fallback

interface ShareButtonProps { url: string title?: string text?: string fallbackCopy?: boolean } function ShareButton({ url, title, text, fallbackCopy = true }: ShareButtonProps) { const [copied, setCopied] = useState(false) const supportsShare = typeof navigator !== 'undefined' && 'share' in navigator const handleShare = async () => { if (supportsShare) { try { await navigator.share({ url, title, text }) } catch (e) { // Користувач скасував — не вважається помилкою if (e instanceof Error && e.name !== 'AbortError') { console.error('Share error:', e) } } return } if (fallbackCopy) { await navigator.clipboard?.writeText(url) setCopied(true) setTimeout(() => setCopied(false), 2000) } } return ( <button onClick={handleShare}> {supportsShare ? 'Поділитися' : copied ? 'Посилання скопійовано' : 'Копіювати посилання'} </button> ) } 

Як обробити помилки при шарінгу?

Основна помилка — AbortError, коли користувач закриває діалог. Її слід ігнорувати. Інші помилки (наприклад, непідтримуваний тип даних) потрібно логувати і, за необхідності, показувати fallback. У нашому компоненті ми вже обробили AbortError, а інші помилки логуємо. Якщо API недоступне, компонент автоматично перемикається на копіювання посилання.

Коли використовувати fallback для копіювання?

Fallback обов'язковий на всіх десктопних браузерах, крім Chrome і Edge (Windows). Навіть на мобільних пристроях деякі старі версії iOS не підтримують API — для них також потрібен fallback. Ми реалізуємо автоматичне визначення підтримки: якщо navigator.share не існує, копіюємо URL в буфер обміну через navigator.clipboard.writeText().

Процес роботи над інтеграцією під ключ

Ми пропонуємо готове рішення «під ключ» за 2–4 години. Процес включає:

  1. Аналіз вимог та аудит поточної архітектури шарінгу.
  2. Проектування: вибір стратегії fallback, визначення підтримуваних даних (текст, URL, файли).
  3. Реалізація утиліти share з перевірками та обробкою помилок.
  4. Інтеграція React-компонента (або компонента для іншої бібліотеки — Vue, Angular).
  5. Тестування на реальних пристроях: мобільні (iOS, Android), десктопні браузери (Chrome, Firefox, Edge, Safari).
  6. Деплой та моніторинг помилок.
Етап Опис Приблизні трудозатрати
Аналіз Аудит поточних кнопок, визначення сценаріїв 30–60 хв
Проектування Вибір fallback, дизайн API 15–30 хв
Реалізація Код утиліти та компонента 60–90 хв
Тестування Перевірка на пристроях 30–60 хв
Деплой Розгортання та моніторинг 15–30 хв

Строки: від 2 до 4 годин залежно від складності (підтримка файлів, кастомний UI). Зв'яжіться з нами, щоб оцінити ваш проєкт та отримати консультацію з інтеграції Web Share API. Ми гарантуємо коректну роботу на всіх підтримуваних браузерах і документуємо код.

Що входить в роботу

Утиліта share з перевіркою підтримки та canShare, React-компонент з fallback (копіювання в буфер), підтримка файлів та зображень за необхідності, обробка AbortError (користувач закрив діалог).

Строк: 2–3 години.

Замовте інтеграцію нативного шарінгу через Web Share API — заощадьте до 95% часу на розробку кастомних кнопок. Отримайте консультацію наших інженерів.