https://github.com/oveleon/contao-co...ent-2248347173
Im Template ccb_element_blocker.html5 muss dies ergänzt werden, damit die src des iFrames mit der des YouTube Videos übereinstimmt, die YouTube-API greift hier also nicht.
Das src-Attribut ist hier weiterhin die Block-URL, die Weiterleitung findet aber im iFrame selber statt.
ccb_element_blocker.html5
Dieser Abschnitt
HTML-Code:
<script>
// Check if the cookie bar is ready, otherwise respond to document load (#148)
if(parent.cookiebar){
redirectIfNecessary()
}else{
parent.addEventListener('load', () => {
redirectIfNecessary()
})
}
function redirectIfNecessary(){
if(parent.cookiebar.issetCookie(<?=$this->id?>)){
const decoder = document.createElement('textarea');
decoder.innerHTML = '<?=$this->redirect?>';
window.location.href = decoder.value;
}
}
</script>
muss zu
HTML-Code:
<script>
// Check if the cookie bar is ready, otherwise respond to document load (#148)
if(parent.cookiebar){
redirectIfNecessary()
}else{
parent.addEventListener('load', () => {
redirectIfNecessary()
})
}
function redirectIfNecessary(){
if(parent.cookiebar.issetCookie(<?=$this->id?>)){
const decoder = document.createElement('textarea');
decoder.innerHTML = '<?=$this->redirect?>';
window.frameElement.src = '<?=$this->redirect?>';
window.location.href = decoder.value;
}
}
</script>
werden.
Mit dem zusätzlichen Code
HTML-Code:
window.frameElement.src = '<?=$this->redirect?>';
wird hierbei die source des iFrames noch vor dem Redirect verändert, sodass das geladene YouTube-Video nun die Attribute erkennt.
Damit wäre Fullscreen also wieder aktiviert.
Edit
Nochmal eine etwas bessere Erklärung:
- Das iFrame wird geladen und diese Attribute (fullscreen, etc.) werden nicht mitgeschickt.
- Normalerweise werden diese "speziellen Attribute" vom YouTube-embed über "parent", das heißt der Usprungsseite, eingelesen. Aber auch nur, wenn die iFrame src übereinstimmt.
- Da aber das iFrame src-Attribut serverseitig durch die Cookiebar auf "/cookiebar/block/{id}?{urlencoded-youtube-url}" gesetzt wird, wird diese nicht erkannt bzw. durch YouTube nicht akzeptiert.
- Beim ersten Unblock des Embeds (Aus dem iFrame heraus), wird eine andere Methode des `cookiebar.js` aufgerufen, sodass hier das src-Attribut des iFrames ausgetauscht wird.
- Nachdem schon akzeptiert wurde, läuft das Handling aus dem iFrame heraus, nicht über die `cookiebar.js`. Das iFrame weiß lediglich, dass die Cookiebar das "Anzeigen" erlaubt hat.