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

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

W tym artykule omawiamy potencjalną zmianę powodującą niezgodność wsteczną w interfejsie Web Share API. Ta zmiana jest już dostępna w przeglądarce Firefox, a w Chrome pojawi się w wersji 110. Oczekujemy, że wkrótce zostanie wprowadzona w Safari.

Web Share API umożliwia udostępnianie tekstu, adresów URL i plików. W najprostszej postaci kod udostępniania wygląda tak:

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

Jeśli udostępnianie ma się odbywać w ramce iframe innej firmy, niedawna zmiana specyfikacji wymaga wyraźnego zezwolenia na tę operację. Aby to zrobić, dodaj atrybut allow do tagu <iframe> z wartością web-share. Informuje to przeglądarkę, że witryna umieszczająca zezwala na wywoływanie działania udostępniania przez umieszczony element iframe innej firmy.

<!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 działa, w wersji demonstracyjnej na GitHubie i wyświetlić kod źródłowy. Jeśli nie podasz tego atrybutu, pojawi się błąd NotAllowedError z komunikatem Failed to execute 'share' on 'Navigator': Permission denied. To ograniczenie zostało uzgodnione przez wszystkich dostawców przeglądarek w celu zwiększenia prywatności i bezpieczeństwa użytkowników oraz zapobiegania nieoczekiwanym działaniom związanym z udostępnianiem, które mogą być wywoływane przez nieuczciwe podmioty, np. za pomocą reklam naruszających zasady.