Soy desarrollador javascript novato. Tengo un bookmarklet que puede obtener la hora actual de un video de YouTube.
javascript:(function(){ ytplayer = document.getElementById("movie_player"); var secs = ytplayer.getCurrentTime(); alert(`${secs}`); })(); Funciona bien en youtube.com. Sin embargo, cuando aplico la misma lógica a un sitio web basado en iframe ( URL aquí ). De acuerdo con la referencia de la API de YouTube, uso function onYouTubePlayerAPIReady() . pero no pasa nada cuando ejecuto el bookmarklet. Aquí está el código
javascript:function onYouTubePlayerAPIReady() { var ytplayer = new YT.Player('widget2'); var secs = ytplayer.getCurrentTime(); alert(`${secs}`); }¿Algún experto en API de YouTube puede detectar el problema?
Aquí está el iframe de la muestra de youtube del sitio web
<iframe frameborder="0" allowfullscreen="1" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" title="YouTube video player" width="100%" height="100%" src="https://www.youtube.com/embed/eSWwIQzKsbY?autoplay=1&mute=0&controls=1&start=0&origin=https%3A%2F%2Fyou-tldr.com&playsinline=1&showinfo=0&rel=0&iv_load_policy=3&modestbranding=1&enablejsapi=1&widgetid=1" id="widget2" data-gtm-yt-inspected-1_25="true"></iframe>Sí. Tengo una necesidad similar. No creo que hayas llamado a la función onYouTubeIframeAPIReady() . Este es el código de trabajo.
function onYouTubeIframeAPIReady() { var player = new YT.Player('widget2', {//The id of the div containing the iframe. Should be changed based on the page you're at and the i they gave their player events: { 'onStateChange': onPlayerStateChange//Event listener, fires onPlayerStateChange function whenever the state of the video changes, paused or played } }); function onPlayerStateChange() { currentTime = player.playerInfo.currentTime;//Current Time saved if (player.playerInfo.playerState === 2) {//If video paused, console.log the time console.log(currentTime); } } } onYouTubeIframeAPIReady();//Initial call to the function