diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/js/plugins/ads.js | 18 | ||||
-rw-r--r-- | src/js/plyr.js | 8 | ||||
-rw-r--r-- | src/js/utils.js | 16 |
3 files changed, 33 insertions, 9 deletions
diff --git a/src/js/plugins/ads.js b/src/js/plugins/ads.js index a71336bb..72fd49d8 100644 --- a/src/js/plugins/ads.js +++ b/src/js/plugins/ads.js @@ -35,17 +35,27 @@ class Ads { this.enabled = player.config.ads.enabled; this.playing = false; this.initialized = false; + this.blocked = false; + this.enabled = utils.is.url(player.config.ads.tag); // Check if a tag URL is provided. if (!this.enabled) { return; } - // Check if the Google IMA3 SDK is loaded + // Check if the Google IMA3 SDK is loaded or load it ourselves if (!utils.is.object(window.google)) { - utils.loadScript(player.config.urls.googleIMA.api, () => { - this.ready(); - }); + utils.loadScript( + player.config.urls.googleIMA.api, + () => { + this.ready(); + }, + () => { + // Script failed to load or is blocked + this.blocked = true; + this.player.debug.log('Ads error: Google IMA SDK failed to load'); + }, + ); } else { this.ready(); } diff --git a/src/js/plyr.js b/src/js/plyr.js index 27019759..52fe378e 100644 --- a/src/js/plyr.js +++ b/src/js/plyr.js @@ -306,13 +306,13 @@ class Plyr { } /** - * Play the media, or play the advertisement + * Play the media, or play the advertisement (if they are not blocked) */ play() { - // Play the ad if setup - // TODO: Fix the occasional play of the video before the Ad fires? - if (this.ads.enabled && !this.ads.initialized) { + // TODO: Always return a promise? + if (this.ads.enabled && !this.ads.initialized && !this.ads.blocked) { this.ads.play(); + return null; } // Return the promise (for HTML5) diff --git a/src/js/utils.js b/src/js/utils.js index 155dc087..7c277301 100644 --- a/src/js/utils.js +++ b/src/js/utils.js @@ -82,7 +82,7 @@ const utils = { }, // Load an external script - loadScript(url, callback) { + loadScript(url, callback, error) { const current = document.querySelector(`script[src="${url}"]`); // Check script is not already referenced, if so wait for load @@ -99,6 +99,10 @@ const utils = { element.callbacks = element.callbacks || []; element.callbacks.push(callback); + // Error queue + element.errors = element.errors || []; + element.errors.push(error); + // Bind callback if (utils.is.function(callback)) { element.addEventListener( @@ -111,6 +115,16 @@ const utils = { ); } + // Bind error handling + element.addEventListener( + 'error', + event => { + element.errors.forEach(err => err.call(null, event)); + element.errors = null; + }, + false, + ); + // Set the URL after binding callback element.src = url; |