aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/js/plugins/ads.js8
-rw-r--r--src/js/plyr.js5
-rw-r--r--src/js/utils.js16
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;