6060 viewportEl . parentNode . removeChild ( viewportEl ) ;
6161 }
6262
63- onNavigate ( 0 ) ;
63+ // Wait until video has loaded the first frame to force quality change.
64+ // This prevents the infinite spinner problem.
65+ // See https://github.com/MozillaReality/FirefoxReality/issues/1433
66+ var video = document . getElementsByTagName ( "video" ) [ 0 ] ;
67+ if ( video . readyState >= 2 ) {
68+ onNavigate ( 0 ) ;
69+ } else {
70+ video . addEventListener ( "loadeddata" , ( ) => onNavigate ( 0 ) ) ;
71+ }
6472 } ) ;
6573
6674 window . addEventListener ( 'pushstate' , onNavigate ) ;
@@ -275,7 +283,7 @@ try {
275283 log ( `Changed quality from "${ currentQuality } " to "${ newBestQuality } "` ) ;
276284 } ;
277285
278- window . onYouTubePlayerReady = evt => {
286+ window . wrappedJSObject . onYouTubePlayerReady = evt => {
279287 log ( '`onYouTubePlayerReady` called' ) ;
280288 window . ytImprover ( 1 ) ;
281289 evt . addEventListener ( 'onStateChange' , 'ytImprover' ) ;
@@ -284,9 +292,9 @@ try {
284292
285293 window . addEventListener ( 'spfready' , ( ) => {
286294 log ( '`spfready` event fired' ) ;
287- if ( typeof window . ytplayer === 'object' && window . ytplayer . config ) {
295+ if ( window . wrappedJSObject . ytplayer && window . wrappedJSObject . ytplayer . config ) {
288296 log ( '`window.ytplayer.config.args.jsapicallback` set' ) ;
289- window . ytplayer . config . args . jsapicallback = 'onYouTubePlayerReady' ;
297+ window . wrappedJSObject . ytplayer . config . args . jsapicallback = 'onYouTubePlayerReady' ;
290298 }
291299 } ) ;
292300
0 commit comments