fix(ads): Fixes media from playing when ads are blocked
This commit is contained in:
		| @ -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(); | ||||
|  | ||||
| @ -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(); | ||||
|  | ||||
| @ -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; | ||||
|  | ||||
|  | ||||
		Reference in New Issue
	
	Block a user