我正在使用以下代碼的iFrame Youtube API。我使用Ajax將此視圖渲染並將其附加到頁面內的div.yt播放器中。它在我第一次調用視圖時有效,但在關閉視頻(清空div.yt-player)並點擊另一個調用我的視圖的鏈接後,視頻根本不會加載(空白)。我一直在掙扎,仍然不明白爲什麼會發生,特別是它第一次運作。任何形式的幫助將不勝感激..謝謝。Youtube iFrame(使用JavaScript API)首次加載,但不是第二次加載。爲什麼?
PS:html和javascript都由視圖呈現。
Html
<div id="player"></div>
Javascript:
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 player;
function onYouTubeIframeAPIReady() {
player = new YT.Player('player', {
height: '486',
width: '864',
videoId: '#{@media['youtube_url']}',
events: {
'onReady': onPlayerReady,
'onStateChange': onPlayerStateChange
},
playerVars: {
'showinfo': 0,
'iv_load_policy': 3,
'color': 'white',
'fs': 1,
'autoplay': 1,
'vq': 'hd720'
}
});
}
function onPlayerReady(event) {
event.target.playVideo();
}
var done = false;
function onPlayerStateChange(event) {
if (event.data == YT.PlayerState.PLAYING && !done) {
setTimeout(stopVideo, 6000);
done = true;
}
}
function stopVideo() {
player.stopVideo();
}
第二次運行時Inspector/Firebug中顯示的錯誤輸出是什麼? – Screenack 2013-04-11 11:06:55
在控制檯中實際上沒有記錄錯誤。我剛剛愚弄了一下,並在聲明之後立即添加了一個對onYouTubeIframeAPIReady()的調用,現在它一直在運行。除此之外,我還有一個問題:第一次加載我的頁面時,我必須點擊兩次以使其工作。我認爲原因是onYouTubeIframeAPIReady()函數只在第一次被YouTube API調用。 – user1011444 2013-04-11 11:16:38
雖然(通常不是問題,它也會記錄通常的「無法發送郵件到http://www.youtube.com。收件人有源http://127.0.0.1:3000」,並且它也是第一次記錄它,但無論如何工作)。我現在正在閱讀文檔,試圖找到另一個函數,我可以稱自己並繞過onYouTubeIframeAPIReady()第二次和第n次調用我的視圖。但如果你有任何關於如何通過條件來實現這一點的建議,我會接受。唯一的限制是onYouTubeIframeAPIReady必須保持全局,看起來不能嵌套。 – user1011444 2013-04-11 11:18:38