Skip to content

Commit be2b9c6

Browse files
committed
main - 883466e fix(youtube-player): error when interacting with the player before the API has been loaded (#29127)
1 parent 3b9dfb5 commit be2b9c6

File tree

3 files changed

+46
-18
lines changed

3 files changed

+46
-18
lines changed

esm2022/youtube-player.mjs

Lines changed: 23 additions & 9 deletions
Large diffs are not rendered by default.

fesm2022/youtube-player.mjs

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,19 @@ const DEFAULT_PLAYER_HEIGHT = 390;
7878
function coerceTime(value) {
7979
return value == null ? value : numberAttribute(value, 0);
8080
}
81+
/**
82+
* Equivalent of `YT.PlayerState` which we can't use, because it's meant to
83+
* be read off the `window` which we can't do before the API has been loaded.
84+
*/
85+
var PlayerState;
86+
(function (PlayerState) {
87+
PlayerState[PlayerState["UNSTARTED"] = -1] = "UNSTARTED";
88+
PlayerState[PlayerState["ENDED"] = 0] = "ENDED";
89+
PlayerState[PlayerState["PLAYING"] = 1] = "PLAYING";
90+
PlayerState[PlayerState["PAUSED"] = 2] = "PAUSED";
91+
PlayerState[PlayerState["BUFFERING"] = 3] = "BUFFERING";
92+
PlayerState[PlayerState["CUED"] = 5] = "CUED";
93+
})(PlayerState || (PlayerState = {}));
8194
/**
8295
* Angular component that renders a YouTube player via the YouTube player
8396
* iframe API.
@@ -170,7 +183,8 @@ class YouTubePlayer {
170183
this._player.playVideo();
171184
}
172185
else {
173-
this._getPendingState().playbackState = YT.PlayerState.PLAYING;
186+
this._getPendingState().playbackState = PlayerState.PLAYING;
187+
this._load(true);
174188
}
175189
}
176190
/** See https://developers.google.com/youtube/iframe_api_reference#pauseVideo */
@@ -179,7 +193,7 @@ class YouTubePlayer {
179193
this._player.pauseVideo();
180194
}
181195
else {
182-
this._getPendingState().playbackState = YT.PlayerState.PAUSED;
196+
this._getPendingState().playbackState = PlayerState.PAUSED;
183197
}
184198
}
185199
/** See https://developers.google.com/youtube/iframe_api_reference#stopVideo */
@@ -189,7 +203,7 @@ class YouTubePlayer {
189203
}
190204
else {
191205
// It seems like YouTube sets the player to CUED when it's stopped.
192-
this._getPendingState().playbackState = YT.PlayerState.CUED;
206+
this._getPendingState().playbackState = PlayerState.CUED;
193207
}
194208
}
195209
/** See https://developers.google.com/youtube/iframe_api_reference#seekTo */
@@ -286,7 +300,7 @@ class YouTubePlayer {
286300
if (this._pendingPlayerState && this._pendingPlayerState.playbackState != null) {
287301
return this._pendingPlayerState.playbackState;
288302
}
289-
return YT.PlayerState.UNSTARTED;
303+
return PlayerState.UNSTARTED;
290304
}
291305
/** See https://developers.google.com/youtube/iframe_api_reference#getCurrentTime */
292306
getCurrentTime() {
@@ -428,7 +442,7 @@ class YouTubePlayer {
428442
// Only cue the player when it either hasn't started yet or it's cued,
429443
// otherwise cuing it can interrupt a player with autoplay enabled.
430444
const state = player.getPlayerState();
431-
if (state === YT.PlayerState.UNSTARTED || state === YT.PlayerState.CUED || state == null) {
445+
if (state === PlayerState.UNSTARTED || state === PlayerState.CUED || state == null) {
432446
this._cuePlayer();
433447
}
434448
this._changeDetectorRef.markForCheck();
@@ -441,13 +455,13 @@ class YouTubePlayer {
441455
_applyPendingPlayerState(player, pendingState) {
442456
const { playbackState, playbackRate, volume, muted, seek } = pendingState;
443457
switch (playbackState) {
444-
case YT.PlayerState.PLAYING:
458+
case PlayerState.PLAYING:
445459
player.playVideo();
446460
break;
447-
case YT.PlayerState.PAUSED:
461+
case PlayerState.PAUSED:
448462
player.pauseVideo();
449463
break;
450-
case YT.PlayerState.CUED:
464+
case PlayerState.CUED:
451465
player.stopVideo();
452466
break;
453467
}

fesm2022/youtube-player.mjs.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)