From 147525926223974702f549e3d58dd64258d1761c Mon Sep 17 00:00:00 2001 From: Sam Charrington Date: Wed, 26 May 2021 23:59:01 -0500 Subject: [PATCH] Fix YouTube API issues and iframe indexing bug --- js/skiptotimestamp.js | 56 ++++++++++++++++++++++++++----------------- 1 file changed, 34 insertions(+), 22 deletions(-) diff --git a/js/skiptotimestamp.js b/js/skiptotimestamp.js index d1749bf..77f9cab 100644 --- a/js/skiptotimestamp.js +++ b/js/skiptotimestamp.js @@ -1,3 +1,9 @@ +var tag = document.createElement('script'); + +tag.src = "https://www.youtube.com/iframe_api"; +var firstScriptTag = document.getElementsByTagName('script')[0]; +firstScriptTag.parentNode.insertBefore(tag, firstScriptTag); + var STT = { settings: STTSettings, media: undefined, @@ -19,9 +25,9 @@ var STT = { }; STTSkipTo = function(time) { - var audio = document.getElementsByTagName('audio'), + var audio = document.getElementsByTagName('audio'), video = document.getElementsByTagName('video'), - iframe = document.getElementsByTagName('iframe'), + iframe = document.getElementsByTagName('iframe'), timeArray = time.split(':').reverse(), seconds = parseInt(timeArray[0]), minutes = timeArray.length > 1 ? parseInt(timeArray[1]) : 0, @@ -33,6 +39,8 @@ STTSkipTo = function(time) { STT.doSkip(); return; } + + // We don't have a YT player so try to find an audio or video player if ((parseInt(STT.settings.link_audio) && audio.length) || (parseInt(STT.settings.link_video) && video.length)) @@ -51,35 +59,39 @@ STTSkipTo = function(time) { STT.media.playbackRate = playbackRate; STT.media.play(); return; - } else if (parseInt(STT.settings.link_youtube && iframe.length)) { - // Inspect the iframes, looking for a src with youtube in the URI - for (var i = 0; i < iframe.length; i++) { - if (iframe[i].src.search('youtube') !== -1) { - // Set up the JS interface - STT.doSkip = STT.doYoutubeSkip; - - iframe[0].id = 'stt-youtube-player'; - STT.media = new YT.Player('stt-youtube-player', { - events: { - onReady: STT.doYoutubeSkip - } - }); - return; - } - } } console.log('Skip to Timestamp: No media player found!'); return; } +// YT API calls this when loaded. This initializes player. +function onYouTubeIframeAPIReady() { + iframe = document.getElementsByTagName('iframe'); + + for (var i = 0; i < iframe.length; i++) { + if (iframe[i].src.search('youtube') !== -1) { + // Set up the JS interface + STT.doSkip = STT.doYoutubeSkip; + + iframe[i].id = 'stt-youtube-player'; + STT.media = new YT.Player('stt-youtube-player', { + events: { + 'onReady': STT.doYoutubeSkip + } + }); + return; + } + } +} + // Listen to all clicks on the document document.addEventListener('click', function (event) { - var elem = event.target; + var elem = event.target; // If the event target doesn't match bail if (!elem.hasAttribute('data-stt-time')) { - return; - } + return; + } var time = elem.getAttribute('data-stt-time'); - STTSkipTo(time); + STTSkipTo(time); }, false);