YoutubeDefer.loadAPIVideo(block) { if(typeof YT === 'undefined') { loadYoutubeScript(); checkIfYoutubeIsReady().then(function() { let player = new Vimeo.Player(iframe); player.play(); }); } else { let player = new Vimeo.Player(iframe); player.play(); } } const YoutubeDefer.checkIfYoutubeIsReady = () => { var wait; var timeout; var deferred = new Promise((resolve, reject) => { wait = setInterval(function() { if (!Vimeo) { return; } clearInterval(wait); clearTimeout(timeout); resolve(); }, 500); timeout = setTimeout(function() { clearInterval(wait); reject(); }, 4000); // subjective. test up to 8 times over 4 seconds }); return deferred; } const YoutubeDefer.loadYoutubeScript = () => { let s = document.createElement("script"); s.type = "text/javascript"; s.src = "https://www.youtube.com/iframe_api"; document.querySelector("head").append(s); }