Новые требования к API Web Share в сторонних iframe

Для повышения конфиденциальности и безопасности вызовы Web Share API в сторонних iframe теперь необходимо явно разрешить.

В этой статье рассматривается потенциально критическое изменение в API веб-ресурса. Это изменение уже есть в Firefox, появится в Chrome начиная с версии 110 и, как ожидается, скоро появится в Safari .

API Web Share позволяет обмениваться текстом, URL-адресами или файлами. В простейшей форме общий код выглядит примерно так:

try {
  await navigator.share({
    title: 'Title',
    text: 'Text',
    url: location.href,
  });
} catch (err) {
  console.error(`${err.name}: ${err.message}`);
}

Если действие общего доступа должно произойти в стороннем iframe, недавнее изменение спецификации требует, чтобы вы явно разрешили эту операцию. Для этого добавьте allow в тег <iframe> со значением web-share . Это сообщает браузеру, что сайт внедрения позволяет встроенному стороннему iframe инициировать действие общего доступа.

<!DOCTYPE html>
<html lang="en">
  <body>
    <h1>Web Share in third-party iframes</h1>
    <!-- The embedding page is hosted on https://example.com/index.html. -->
    <iframe allow="web-share" src="https://third-party.example.com/iframe.html"></iframe>
  </body>
</html>

Вы можете увидеть это в действии в демо-версии на Glitch и просмотреть исходный код . Если атрибут не указан, это приведет к ошибке NotAllowedError с сообщением Failed to execute 'share' on 'Navigator': Permission denied . Это ограничение было согласовано всеми поставщиками браузеров, чтобы улучшить конфиденциальность и безопасность пользователей и не допустить, чтобы злоумышленники, например оскорбительная реклама, инициировали неожиданные действия по обмену информацией.