@@ -41,6 +41,25 @@ class UpcomingMediaCard extends HTMLElement {
41
41
iframeContainer . style . maxWidth = '1600px' ;
42
42
iframeContainer . style . maxHeight = '900px' ;
43
43
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 ) ;
44
63
const closeButton = document . createElement ( 'button' ) ;
45
64
closeButton . innerHTML = '×' ;
46
65
closeButton . style . position = 'absolute' ;
@@ -86,14 +105,19 @@ class UpcomingMediaCard extends HTMLElement {
86
105
const iframe = document . createElement ( 'iframe' ) ;
87
106
iframe . style . width = '100%' ;
88
107
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 ` ;
90
109
iframe . frameBorder = '0' ;
91
110
iframe . allow = 'accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture' ;
92
111
iframe . allowFullscreen = true ;
112
+ checkVideoEndedInterval = setInterval ( ( ) => {
113
+ iframe . contentWindow . postMessage ( '{"event":"listening"}' , '*' ) ;
114
+ } , 1000 ) ;
93
115
iframeContainer . appendChild ( iframe ) ;
94
116
iframeContainer . appendChild ( closeButton ) ;
95
117
overlay . appendChild ( iframeContainer ) ;
96
118
const closeOverlay = ( ) => {
119
+ clearInterval ( checkVideoEndedInterval ) ;
120
+ window . removeEventListener ( 'message' , handleMessage ) ;
97
121
document . body . removeChild ( overlay ) ;
98
122
document . body . style . overflow = '' ;
99
123
} ;
0 commit comments