Mam problem z następującym kodem, ale nie jestem pewien, gdzie jest problem.Ładowanie wielu filmów z YouTube iFrame API
Na mojej stronie wzorcowej, w javascript, mam tablicę zdefiniowaną do przechowywania listy utworzonych obiektów YouTubePlayer
. Również ładuję interfejs YouTube API tutaj.
Posiadam również (czasami kilka) kontrolki użytkownika YouTube, które zawierają element div YouTube w modcie początkowym. Zawiera również JavaScript do przesuwania nowego obiektu YouTubePlayer
do tablicy w stronie głównej js. Na koniec, na sterowaniu użytkownika, definiuję metody automatycznego uruchamiania i zatrzymywania wideo w "pokazanych" i "ukrytych" zdarzeniach modemu ładowania początkowego.
Na koniec, aby (miejmy nadzieję) rozwiązać warunek wyścigu między ładowanym dokumentem i ładowanym API YouTube, ustawiam dwie zmienne bool (jedną dla dokumentu, jedną dla API) i sprawdzam prawdziwe dla wszystkich przed wywołaniem initVideos funkcja, która iteruje przez tablicę obiektów YouTubePlayer
i inicjuje je, ustawiając obiekt w oknie. Częścią problemu, jak sądzę, jest to, że nie mogę statycznie ustawić window.player1
itp., Ponieważ nigdy nie wiem, ile elementów sterujących YouTube zostanie załadowanych.
Problem jest, gdy ogień bootstrap modalne imprezy, obiekt YT.Player
odzyskać z okna nie zawiera metody playVideo()
i pauseVideo()
.
Na mojej stronie wzorcowej:
$(document).ready(function() {
window.docReady = true;
if (window.apiReady)
initVideos();
});
function onYouTubeIframeAPIReady() {
window.apiReady = true;
if (window.docReady)
initVideos();
initVideos();
}
function initVideos() {
if (typeof ytPlayerList === 'undefined')
return;
for (var i = 0; i < ytPlayerList.length; i++) {
var player = ytPlayerList[i];
var pl = new YT.Player(player.DivId, {
playerVars: {
'autoplay': '0',
'controls': '1',
'autohide': '2',
'modestbranding': '1',
'playsinline': '1',
'rel': '0',
'wmode': 'opaque'
},
videoId: player.VideoId,
events: {
'onStateChange': player.StateChangeHandler
}
});
window[player.Id] = pl;
}
}
A w sprawie kontroli użytkownika:
window.ytPlayerList.push({
Id: "<%=ClientID%>player",
DivId: "<%=ClientID%>player",
VideoId: "<%=VideoId%>",
StateChangeHandler: hide<%=ClientID%>Player
});
function hide<%=ClientID %>Player(state) {
if (state.data == '0') {
hide<%=ClientID %>Video();
}
}
function show<%=ClientID %>Video() {
$('#<%=ClientID %>video-modal').modal('show');
}
function hide<%=ClientID %>Video() {
$('#<%=ClientID %>video-modal').modal('hide');
}
$(document).ready(function() {
$("#<%=ClientID%>Video").click(function() {
show<%=ClientID%>Video();
});
$("#<%=ClientID %>video-modal").on('shown', function() {
window["<%=ClientID%>player"].playVideo();
});
$("#<%=ClientID %>video-modal").on('hide', function() {
window["<%=ClientID%>player"].pauseVideo();
});
});
To może być brak wiedzy js, ale jestem całkowicie zatrzymany. Każda pomoc będzie bardzo ceniona. Ponadto, dla odniesienia, wyjątek mogę to
Uncaught TypeError: window.ctl100_phContent_ctl100player.playVideo is not a function
Czy celowe jest uruchamianie 'initVideos()' dwukrotnie w funkcji 'onYouTubeIframeAPIReady()'? –
możliwy duplikat [.playVideo() - nie funkcja?] (Http://stackoverflow.com/questions/2217543/cant-control-youtube-embed-even-with-document-getelementbyidxyz-playvideo) lub [playVideo doesn 't work] (http://stackoverflow.com/questions/9287170/youtube-player-iframe-api-playvideo-doesnt-work-on-firefox-9-0-1) –
Czy możesz wkleić część wygenerowanego HTML Proszę ? Ułatwi mi to odtworzenie problemu. –