YouTube API nie widzi player

0

Witam,
po stworzeniu playera YouTube w onReady wywołuje funkcje, która w sobie ma player.getPlaybackQuality(). I pomomo, że kiedy dodam console.log(player) to pokazuje, że istnieje coś takiego, to w konsoli pokazuje się

Uncaught TypeError: Cannot read property 'getPlaybackQuality' of undefined
Wie ktoś gdzie leży problem?

0

Pokaż fragment kodu, który pozwala zobaczyć, co zrobiłeś nie tak oraz stack trace. Inaczej to wróżenie z fusów.
Błąd mówi, że zmienna player nie została zdefiniowana lub zainicjalizowana. Być może to Twoja zmienna, do której odwołujesz się z innego kontekstu albo jeszcze jej nie utworzyłeś, być może to zmienna gdzieś z bebechów kodu youtube, a Ty niewłaściwie obsługująć odtwarzacz (np. chcąc wyświetlić jakość przed załadowaniem medium) powodujesz, że ta zmienna nie została jeszcze zainicjowana.

0

@ŁF: Przepraszam, zupełnie zapomniałem o kodzie

var script_tag = document.createElement("script");
script_tag.src = "https://www.youtube.com/iframe_api";
var first_script_tag = document.getElementsByTagName("script")[0];
first_script_tag.parentNode.insertBefore(script_tag, first_script_tag);

var player;
function create_player(video_id, city_id){
    player = null;
    clearInterval(timer_invertal);
    document.getElementById("video").remove();
    var video = document.createElement("div");
    video.id = "video";
    document.getElementById("video_container").appendChild(video);
    
    player = new YT.Player('video', {
        width: "100%",
        height: "100%",
        videoId: video_id,
        playerVars: {
            'autoplay': 1,
            'mute': 1,
            'controls': 0,
            'end': cities.cities[city_id].end,
            'start': cities.cities[city_id].start,
            'playsinline': 1,
            'rel': 0,
            'showinfo': 0,
            'widgetid': 1,
            'enablejsapi': 1,
            'origin': 'http://localhost:8100' 
        },
        events: {
            onReady: timer,
            onStateChange: onPlayerStateChange
        }
    });
}
var time = 0;
var timer_invertal;
function timer(){
    time = 0;
    timer_invertal = setInterval(() => {
        time = seconds_to_time(Math.floor(player.getCurrentTime()));
        document.getElementById("video_timer").innerHTML = time;
    }, 500);
    setTimeout(() => {
        if(player.getPlaybackQuality() == "tiny" || player.player.getPlaybackQuality() == "small" || player.player.getPlaybackQuality() == "medium" || player.player.getPlaybackQuality() == "large" || player.player.getPlaybackQuality() == "hd720"){
            alert("LOL");
        }
    }, 10000);
}
0

Dobra, mam rozwiązanie. Problem leżał w tym, że wywoływałem player.player.getPlaybackQuality zamiast player.getPlaybackQuality. Dziękuję za pomoc.

0

nie znam API youtube, ale domyslam sie po bledzie jaki dostajesz co sie dzieje

events: {
            onReady: timer,
            onStateChange: onPlayerStateChange
        }

wiec jak jest Ready odpala timer w ktorym uzywasz player, ale on w tym momencie nie jest zainicjalizowany. Twoj kod przypisania wykonuje sie PO timerze, stad jest undefined

w timerze zrob

if (player) {
  if(player.getPlaybackQuality() == "tiny" || player.player.getPlaybackQuality() == "small" || player.player.getPlaybackQuality() == "medium" || player.player.getPlaybackQuality() == "large" || 
  player.player.getPlaybackQuality() == "hd720"){
              alert("LOL");
          }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1