Skip to content

Commit a02958c

Browse files
committed
Automatically close video trailer overlay when video ends when 'enable_trailers: true' is used
1 parent a10e795 commit a02958c

File tree

2 files changed

+26
-2
lines changed

2 files changed

+26
-2
lines changed

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
0.5.8
1+
0.5.9

upcoming-media-card.js

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,25 @@ class UpcomingMediaCard extends HTMLElement {
4141
iframeContainer.style.maxWidth = '1600px';
4242
iframeContainer.style.maxHeight = '900px';
4343
iframeContainer.style.position = 'relative';
44+
let checkVideoEndedInterval;
45+
const closeOverlayAndCleanup = () => {
46+
clearInterval(checkVideoEndedInterval);
47+
window.removeEventListener('message', handleMessage);
48+
closeOverlay();
49+
};
50+
const handleMessage = (event) => {
51+
if (event.source === iframe.contentWindow) {
52+
try {
53+
const data = JSON.parse(event.data);
54+
if (data.event === 'infoDelivery' && data.info && data.info.playerState === 0) {
55+
closeOverlayAndCleanup();
56+
}
57+
} catch (e) {
58+
console.error('Error parsing message:', e);
59+
}
60+
}
61+
};
62+
window.addEventListener('message', handleMessage);
4463
const closeButton = document.createElement('button');
4564
closeButton.innerHTML = '×';
4665
closeButton.style.position = 'absolute';
@@ -86,14 +105,19 @@ class UpcomingMediaCard extends HTMLElement {
86105
const iframe = document.createElement('iframe');
87106
iframe.style.width = '100%';
88107
iframe.style.height = '100%';
89-
iframe.src = `https://www.youtube.com/embed/${videoId}?autoplay=1&controls=1&rel=0&fs=1&modestbranding=1`;
108+
iframe.src = `https://www.youtube.com/embed/${videoId}?autoplay=1&controls=1&rel=0&fs=1&modestbranding=1&enablejsapi=1`;
90109
iframe.frameBorder = '0';
91110
iframe.allow = 'accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture';
92111
iframe.allowFullscreen = true;
112+
checkVideoEndedInterval = setInterval(() => {
113+
iframe.contentWindow.postMessage('{"event":"listening"}', '*');
114+
}, 1000);
93115
iframeContainer.appendChild(iframe);
94116
iframeContainer.appendChild(closeButton);
95117
overlay.appendChild(iframeContainer);
96118
const closeOverlay = () => {
119+
clearInterval(checkVideoEndedInterval);
120+
window.removeEventListener('message', handleMessage);
97121
document.body.removeChild(overlay);
98122
document.body.style.overflow = '';
99123
};

0 commit comments

Comments
 (0)