fix(ads): Fixes media from playing when ads are blocked

This commit is contained in:
ferdiemmen
2018-01-29 22:40:08 +01:00
parent cc128e6088
commit c4eb4c97ac
6 changed files with 36 additions and 7 deletions

View File

@ -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();

View File

@ -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();

View File

@ -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;