diff options
author | Sam Potts <sam@potts.es> | 2019-06-01 18:46:56 +1000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-06-01 18:46:56 +1000 |
commit | 34d79a54432804dfd0bcfb9f70155eb48e03eef9 (patch) | |
tree | d5c118a1bc4da72d162acd288354185b686a38d6 /src | |
parent | 5ddd9e02def654bb677c988403dbefbc4a32787c (diff) | |
parent | 97a6e72e104b6a47abefaa7d6216f0a6c45f0ce9 (diff) | |
download | plyr-34d79a54432804dfd0bcfb9f70155eb48e03eef9.tar.lz plyr-34d79a54432804dfd0bcfb9f70155eb48e03eef9.tar.xz plyr-34d79a54432804dfd0bcfb9f70155eb48e03eef9.zip |
Merge pull request #1453 from aFarkas/develop
youtube multiple small issues
Diffstat (limited to 'src')
-rw-r--r-- | src/js/plugins/youtube.js | 40 |
1 files changed, 24 insertions, 16 deletions
diff --git a/src/js/plugins/youtube.js b/src/js/plugins/youtube.js index 7abc05fe..d82dab22 100644 --- a/src/js/plugins/youtube.js +++ b/src/js/plugins/youtube.js @@ -47,6 +47,8 @@ function getHost(config) { return undefined; } +let onYouTubeReadyCallbacks; + const youtube = { setup() { // Add embed class for responsive @@ -56,26 +58,32 @@ const youtube = { if (is.object(window.YT) && is.function(window.YT.Player)) { youtube.ready.call(this); } else { - // Load the API - loadScript(this.config.urls.youtube.sdk).catch(error => { - this.debug.warn('YouTube API failed to load', error); - }); - // Setup callback for the API - // YouTube has it's own system of course... - window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || []; + if (!onYouTubeReadyCallbacks) { + const oldYouTubeIframeAPIReady = window.onYouTubeIframeAPIReady; + // Load the API + onYouTubeReadyCallbacks = []; + + // Set callback to process queue + window.onYouTubeIframeAPIReady = () => { + if (oldYouTubeIframeAPIReady && is.function(oldYouTubeIframeAPIReady)) { + oldYouTubeIframeAPIReady(); + } + + window.onYouTubeReadyCallbacks.forEach(callback => { + callback(); + }); + }; + + loadScript(this.config.urls.youtube.sdk).catch(error => { + this.debug.warn('YouTube API failed to load', error); + }); + } // Add to queue - window.onYouTubeReadyCallbacks.push(() => { + onYouTubeReadyCallbacks.push(() => { youtube.ready.call(this); }); - - // Set callback to process queue - window.onYouTubeIframeAPIReady = () => { - window.onYouTubeReadyCallbacks.forEach(callback => { - callback(); - }); - }; } }, @@ -109,7 +117,7 @@ const youtube = { const player = this; // Ignore already setup (race condition) - const currentId = player.media.getAttribute('id'); + const currentId = player.media && player.media.getAttribute('id'); if (!is.empty(currentId) && currentId.startsWith('youtube-')) { return; } |