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.