diff --git a/common/lib/xmodule/xmodule/js/src/video/01_initialize.js b/common/lib/xmodule/xmodule/js/src/video/01_initialize.js index 1ff8b591b7f..c43ab4b1693 100644 --- a/common/lib/xmodule/xmodule/js/src/video/01_initialize.js +++ b/common/lib/xmodule/xmodule/js/src/video/01_initialize.js @@ -90,7 +90,7 @@ function(VideoPlayer, i18n, moment, _) { _youtubeApiDeferred = null, _oldOnYouTubeIframeAPIReady; - const setupOnYouTubeIframeAPIReadyMaxCalls=3; + const setupOnYouTubeIframeAPIReadyMaxCalls=5; Initialize.prototype = methodsDict; @@ -174,30 +174,31 @@ function(VideoPlayer, i18n, moment, _) { throw new Error('Too many OnYouTubeIframeAPIReady retries after TypeError...giving up.'); } - _oldOnYouTubeIframeAPIReady = window.onYouTubeIframeAPIReady || undefined; + try { + _oldOnYouTubeIframeAPIReady = window.onYouTubeIframeAPIReady || undefined; - window.onYouTubeIframeAPIReady = function() { - window.onYouTubeIframeAPIReady.resolve(); - }; + window.onYouTubeIframeAPIReady = function() { + window.onYouTubeIframeAPIReady.resolve(); + }; - try { window.onYouTubeIframeAPIReady.resolve = _youtubeApiDeferred.resolve; + window.onYouTubeIframeAPIReady.done = _youtubeApiDeferred.done; + + if (_oldOnYouTubeIframeAPIReady) { + window.onYouTubeIframeAPIReady.done(_oldOnYouTubeIframeAPIReady); + } } catch (e) { console.error('Error while trying to resolve the Deferred object responsible for calling OnYouTubeIframeAPIReady callbacks.'); console.error('window.onYouTubeIframeAPIReady is ' + window.onYouTubeIframeAPIReady); console.error(e); if (e instanceof TypeError) { - setupOnYouTubeIframeAPIReady(); // Try again up to defined max calls. + setTimeout(setupOnYouTubeIframeAPIReady, 500); // Try again up to defined max calls. } else { throw e; } } - window.onYouTubeIframeAPIReady.done = _youtubeApiDeferred.done; - if (_oldOnYouTubeIframeAPIReady) { - window.onYouTubeIframeAPIReady.done(_oldOnYouTubeIframeAPIReady); - } }; // If a Deferred object hasn't been created yet, create one now. It will