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

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

В этой статье рассматривается потенциально критически важное изменение в API Web Share. Это изменение уже реализовано в 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>

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