我遇到以下代碼問題,但我不確定問題出在哪裏。加載多個YouTube視頻iFrame API
在我的母版頁上,在javascript中,我定義了一個數組來定義我創建的YouTubePlayer
對象的列表。我也在這裏加載YouTube API。
我也有(有時是幾個)YouTube用戶控件包含YouTube div的引導模式。它還包含一個JavaScript,用於將新的YouTubePlayer
對象推送到主頁面js中的數組。最後,在用戶控件上,我定義了用於在引導模式的「顯示」和「隱藏」事件上自動啓動和停止視頻的方法。
最後,爲了(希望)解決正在加載的文檔和正在加載的YouTube API之間的競爭狀態,我設置了兩個bool變量(一個用於文檔,一個用於API),並在調用init之前檢查兩個變量是否爲true。函數,它遍歷YouTubePlayer
對象數組並初始化它們,在窗口中設置YT.Player
對象。我認爲問題的一部分是我無法靜態設置window.player1
等,因爲我不知道將會加載多少YouTube用戶控件。
的問題是每當引導模式的事件發生火災,YT.Player
對象我從窗口檢索不包含playVideo()
和pauseVideo()
方法。
在我的母版頁:
$(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;
}
}
而且用戶控件:
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();
});
});
這可能是缺乏專業知識的js,但我絕對堅持。任何幫助將不勝感激。此外,作爲參考,我得到的例外是
Uncaught TypeError: window.ctl100_phContent_ctl100player.playVideo is not a function
是否故意在'onYouTubeIframeAPIReady()'函數中激發'initVideos()'兩次? –
可能重複[.playVideo() - 不是一個函數?](http://stackoverflow.com/questions/2217543/cant-control-youtube-embed-even-with-document-getelementbyidxyz-playvideo)或[playVideo doesn 't work](http://stackoverflow.com/questions/9287170/youtube-player-iframe-api-playvideo-doesnt-work-on-firefox-9-0-1) –
你可以粘貼一些生成的HTML請 ?這會讓我更容易重現這個問題。 –