Skip to content

Commit f1646c1

Browse files
committed
feat: add post-message handlers for volume and playback-rate
1 parent 87d0418 commit f1646c1

File tree

2 files changed

+28
-26
lines changed

2 files changed

+28
-26
lines changed

iframe.html

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,8 +152,9 @@
152152

153153
try {
154154
const parsedData = JSON.parse(data);
155+
const {eventName, meta} = parsedData;
155156

156-
switch (parsedData.eventName) {
157+
switch (eventName) {
157158
case 'playVideo':
158159
player.playVideo();
159160
break;
@@ -169,6 +170,14 @@
169170
case 'unMuteVideo':
170171
player.unMute();
171172
break;
173+
174+
case 'setVolume':
175+
player.setVolume(meta.volume);
176+
break;
177+
178+
case 'setPlaybackRate':
179+
player.setPlaybackRate(meta.playbackRate);
180+
break;
172181
}
173182
} catch (error) {
174183
console.error('Error parsing data', event, error);

src/YoutubeIframe.js

Lines changed: 18 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -55,10 +55,17 @@ const YoutubeIframe = (props, ref) => {
5555
const webViewRef = useRef(null);
5656
const eventEmitter = useRef(new EventEmitter());
5757

58-
const sendPostMessage = useCallback((eventName, meta) => {
59-
const message = JSON.stringify({eventName, meta});
60-
webViewRef.current.postMessage(message);
61-
}, []);
58+
const sendPostMessage = useCallback(
59+
(eventName, meta) => {
60+
if (!playerReady) {
61+
return;
62+
}
63+
64+
const message = JSON.stringify({eventName, meta});
65+
webViewRef.current.postMessage(message);
66+
},
67+
[playerReady],
68+
);
6269

6370
useImperativeHandle(
6471
ref,
@@ -119,42 +126,28 @@ const YoutubeIframe = (props, ref) => {
119126
);
120127

121128
useEffect(() => {
122-
if (!playerReady) {
123-
// no instance of player is ready
124-
return;
125-
}
126-
127129
if (play) {
128130
sendPostMessage('playVideo', {});
129131
} else {
130132
sendPostMessage('pauseVideo', {});
131133
}
132-
}, [play, playerReady, sendPostMessage]);
134+
}, [play, sendPostMessage]);
133135

134136
useEffect(() => {
135-
if (!playerReady) {
136-
// no instance of player is ready
137-
return;
138-
}
139-
140137
if (mute) {
141138
sendPostMessage('muteVideo', {});
142139
} else {
143140
sendPostMessage('unMuteVideo', {});
144141
}
145-
}, [mute, playerReady, sendPostMessage]);
142+
}, [mute, sendPostMessage]);
146143

147144
useEffect(() => {
148-
if (!playerReady) {
149-
// no instance of player is ready
150-
return;
151-
}
145+
sendPostMessage('setVolume', {volume});
146+
}, [sendPostMessage, volume]);
152147

153-
[
154-
PLAYER_FUNCTIONS.setVolume(volume),
155-
PLAYER_FUNCTIONS.setPlaybackRate(playbackRate),
156-
].forEach(webViewRef.current.injectJavaScript);
157-
}, [volume, playbackRate, playerReady]);
148+
useEffect(() => {
149+
sendPostMessage('setPlaybackRate', {playbackRate});
150+
}, [sendPostMessage, playbackRate]);
158151

159152
useEffect(() => {
160153
if (!playerReady || lastVideoIdRef.current === videoId) {

0 commit comments

Comments
 (0)