Skip to content

Commit f56441d

Browse files
committed
feat: add support for postMessage based events
1 parent 2fd9bc4 commit f56441d

File tree

3 files changed

+63
-3
lines changed

3 files changed

+63
-3
lines changed

iframe.html

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,28 @@
146146
document.addEventListener('msfullscreenchange', onFullScreenChange);
147147
document.addEventListener('mozfullscreenchange', onFullScreenChange);
148148
document.addEventListener('webkitfullscreenchange', onFullScreenChange);
149+
150+
window.addEventListener('message', function (event) {
151+
const {data} = event;
152+
153+
switch (data) {
154+
case 'playVideo':
155+
player.playVideo();
156+
break;
157+
158+
case 'pauseVideo':
159+
player.pauseVideo();
160+
break;
161+
162+
case 'muteVideo':
163+
player.mute();
164+
break;
165+
166+
case 'unMuteVideo':
167+
player.unMute();
168+
break;
169+
}
170+
});
149171
</script>
150172
</body>
151173
</html>

src/PlayerScripts.js

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,28 @@ export const MAIN_SCRIPT = (
253253
document.addEventListener('mozfullscreenchange', onFullScreenChange)
254254
document.addEventListener('msfullscreenchange', onFullScreenChange)
255255
document.addEventListener('webkitfullscreenchange', onFullScreenChange)
256+
257+
window.addEventListener('message', function (event) {
258+
const {data} = event;
259+
260+
switch (data) {
261+
case 'playVideo':
262+
player.playVideo();
263+
break;
264+
265+
case 'pauseVideo':
266+
player.pauseVideo();
267+
break;
268+
269+
case 'muteVideo':
270+
player.mute();
271+
break;
272+
273+
case 'unMuteVideo':
274+
player.unMute();
275+
break;
276+
}
277+
});
256278
</script>
257279
</body>
258280
</html>

src/YoutubeIframe.js

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -118,19 +118,35 @@ const YoutubeIframe = (props, ref) => {
118118
[],
119119
);
120120

121+
useEffect(() => {
122+
if (!playerReady) {
123+
// no instance of player is ready
124+
return;
125+
}
126+
127+
webViewRef.current.postMessage(play ? 'playVideo' : 'pauseVideo');
128+
}, [play]);
129+
130+
useEffect(() => {
131+
if (!playerReady) {
132+
// no instance of player is ready
133+
return;
134+
}
135+
136+
webViewRef.current.postMessage(mute ? 'muteVideo' : 'unMuteVideo');
137+
}, [mute]);
138+
121139
useEffect(() => {
122140
if (!playerReady) {
123141
// no instance of player is ready
124142
return;
125143
}
126144

127145
[
128-
playMode[play],
129-
soundMode[mute],
130146
PLAYER_FUNCTIONS.setVolume(volume),
131147
PLAYER_FUNCTIONS.setPlaybackRate(playbackRate),
132148
].forEach(webViewRef.current.injectJavaScript);
133-
}, [play, mute, volume, playbackRate, playerReady]);
149+
}, [volume, playbackRate, playerReady]);
134150

135151
useEffect(() => {
136152
if (!playerReady || lastVideoIdRef.current === videoId) {

0 commit comments

Comments
 (0)