diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/js/plugins/ads.js | 8 | ||||
-rw-r--r-- | src/js/plyr.js | 5 | ||||
-rw-r--r-- | src/js/utils.js | 16 |
3 files changed, 25 insertions, 4 deletions
diff --git a/src/js/plugins/ads.js b/src/js/plugins/ads.js index 5c828141..c59c4667 100644 --- a/src/js/plugins/ads.js +++ b/src/js/plugins/ads.js @@ -18,6 +18,7 @@ class Ads { this.player = player; 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. @@ -25,10 +26,15 @@ class Ads { return; } - // Check if the Google IMA3 SDK is loaded + // Check if the Google IMA3 SDK is loaded or load ourselves. if (!utils.is.object(window.google)) { 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 36b74e76..3cbbed4b 100644 --- a/src/js/plyr.js +++ b/src/js/plyr.js @@ -306,11 +306,12 @@ class Plyr { } /** - * Play the media, or play the advertisement + * Play the media, or play the advertisement (if they are not blocked) */ play() { - if (this.ads.enabled && !this.ads.initialized) { + if (this.ads.enabled && !this.ads.initialized && !this.ads.blocked) { this.ads.play(); + return; } this.media.play(); 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; |