Nowe wymagania dotyczące interfejsu Web Share API w elementach iframe innych firm

Aby zapewnić lepszą prywatność i bezpieczeństwo, wywołania interfejsu Web Share API w elementach iframe innych firm muszą być teraz wyraźnie dozwolone.

W tym artykule opisano potencjalnie nieprawidłową zmianę w interfejsie Web Share API. Ta zmiana jest już w Firefoksie, zostanie wprowadzona w Chrome od wersji 110, a wkrótce pojawi się też w Safari.

Web Share API pozwala na udostępnianie tekstu, adresów URL i plików. W najprostszej postaci kod udostępniania wygląda mniej więcej tak:

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

Jeśli działanie udostępniania musi mieć miejsce w zewnętrznym elemencie iframe, po ostatniej zmianie specyfikacji musisz wyraźnie zezwolić na tę operację. Aby to zrobić, dodaj do tagu <iframe> atrybut allow o wartości web-share. Informuje to przeglądarkę, że witryna, w której umieszczono treść, zezwala zewnętrznemu elementowi iframe na uruchamianie udostępniania.

<!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>

Możesz zobaczyć, jak to wygląda w praktyce w wersji demonstracyjnej Glitch i wyświetlić kod źródłowy. Jeśli nie podasz tego atrybutu, będzie się wyświetlać NotAllowedError z komunikatem Failed to execute 'share' on 'Navigator': Permission denied. Ograniczenie to zostało zaakceptowane przez wszystkich dostawców przeglądarek, aby poprawić prywatność i bezpieczeństwo użytkowników oraz zapobiec uruchamianiu nieoczekiwanych działań przez nieuczciwe podmioty, np. przez reklamy wprowadzające w błąd.