Skip to content

Commit 5caaea8

Browse files
committed
referrerpolicy für YouTube/Vimeo automatisch im Helper setzen, README-Doku ergänzt, Version 1.7.3
1 parent 17cbaf4 commit 5caaea8

3 files changed

Lines changed: 64 additions & 4 deletions

File tree

README.md

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,45 @@ echo '<script src="' . rex_url::addonAssets('vidstack', 'vidstack_helper.js') .
3030

3131
Was passiert hier? Wir benutzen `rex_url::addonAssets()`, um die richtigen URLs für unsere Assets zu generieren. Das ist wie ein Zauberstab, der immer auf die korrekten Dateien in deinem REDAXO-Setup zeigt, egal wo sie sich versteckt haben.
3232

33-
Die `vidstack.css` und `vidstack.js` sind die Hauptdarsteller - sie bringen den Video-Player zum Laufen. Die `*_helper`-Dateien sind wie die fleißigen Backstage-Helfer. Sie kümmern sich um Extras wie die DSGVO-Abfrage und andere nützliche Funktionen.
33+
34+
Die `vidstack.css` und `vidstack.js` sind die Hauptdarsteller - sie bringen den Video-Player zum Laufen. Die `*_helper`-Dateien sind wie die fleißigen Backstage-Helfer. Sie kümmern sich um Extras wie die DSGVO-Abfrage, technische Workarounds und andere nützliche Funktionen.
35+
36+
### Hinweis zu YouTube/Vimeo & `referrerpolicy`
37+
38+
**Wichtig:** Für YouTube- und Vimeo-Embeds wird automatisch das Attribut `referrerpolicy="strict-origin-when-cross-origin"` gesetzt, wenn die `vidstack_helper.js` eingebunden ist. Dies ist notwendig, um Einbindungsfehler (z. B. YouTube Error 153) und Datenschutzprobleme zu vermeiden.
39+
40+
**Du nutzt die Helper nicht?**
41+
42+
Wenn du die Helper-JS nicht einbindest, musst du das Attribut selbst setzen! Beispiel für Vanilla-JS:
43+
44+
```js
45+
document.addEventListener('provider-change', function(e) {
46+
const provider = e.detail;
47+
if (provider && (provider.type === 'youtube' || provider.type === 'vimeo')) {
48+
provider.referrerPolicy = 'strict-origin-when-cross-origin';
49+
if (provider.iframe) {
50+
provider.iframe.referrerPolicy = 'strict-origin-when-cross-origin';
51+
}
52+
}
53+
}, true);
54+
```
55+
56+
Oder in React:
57+
58+
```js
59+
const handleProviderChange = (e) => {
60+
const provider = e.detail;
61+
if (provider && (provider.type === 'youtube' || provider.type === 'vimeo')) {
62+
provider.referrerPolicy = 'strict-origin-when-cross-origin';
63+
if (provider.iframe) {
64+
provider.iframe.referrerPolicy = 'strict-origin-when-cross-origin';
65+
}
66+
}
67+
};
68+
<MediaPlayer onProviderChange={handleProviderChange} ... />
69+
```
70+
71+
**Empfehlung:** Für maximale Kompatibilität und weniger Wartungsaufwand immer die Helper-Dateien nutzen!
3472

3573
Übrigens: Wenn du nur die `generate()`-Methode verwendest und auf den ganzen Schnickschnack wie Consent-Abfragen verzichten möchtest, kannst du die Helper-Dateien weglassen. Aber für das volle Programm mit `generateFull()` braucht man alle vier Dateien.
3674

assets/vidstack_helper.js

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,6 @@
138138
const platform = player.dataset.videoPlatform;
139139
if (hasConsent(platform)) {
140140
const videoId = player.dataset.videoId;
141-
142141
// Check if src is already set - if so, the player is already properly configured
143142
if (player.hasAttribute('src')) {
144143
// Make sure the player is visible and the placeholder is hidden
@@ -147,15 +146,38 @@
147146
if (placeholder?.classList.contains('consent-placeholder')) {
148147
placeholder.style.display = 'none';
149148
}
149+
// --- ReferrerPolicy Patch für YouTube/Vimeo ---
150+
setReferrerPolicyOnProvider(player);
150151
return;
151152
}
152-
153153
// Only recreate the player if no src is set
154154
const placeholder = player.previousElementSibling;
155155
rebuildMediaPlayer(player, platform, videoId, placeholder);
156156
}
157157
}
158158

159+
// Setzt referrerPolicy auf YouTube/Vimeo-Provider, falls vorhanden
160+
function setReferrerPolicyOnProvider(player) {
161+
// Warte, bis der Provider geladen ist
162+
player.addEventListener('provider-change', function handler(e) {
163+
const provider = e.detail;
164+
if (!provider) return;
165+
// YouTube oder Vimeo Provider?
166+
if (provider.type === 'youtube' || provider.type === 'vimeo') {
167+
try {
168+
provider.referrerPolicy = 'strict-origin-when-cross-origin';
169+
if (provider.iframe) {
170+
provider.iframe.referrerPolicy = 'strict-origin-when-cross-origin';
171+
}
172+
} catch (err) {
173+
// Ignorieren, falls nicht möglich
174+
}
175+
}
176+
// Nur einmal ausführen
177+
player.removeEventListener('provider-change', handler);
178+
});
179+
}
180+
159181
function applyTranslations() {
160182
['media-video-layout', 'media-audio-layout'].forEach(selector => {
161183
document.querySelectorAll(selector).forEach(layout => {

package.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
package: vidstack
2-
version: '1.7.2'
2+
version: '1.7.3'
33
author: 'Friends Of REDAXO'
44
supportpage: https://github.com/FriendsOfREDAXO/vidstack
55
requires:

0 commit comments

Comments
 (0)