【发布时间】:2013-04-03 12:25:56
【问题描述】:
我正在使用带有以下代码的 iFrame Youtube API。我用 Ajax 调用这个视图来呈现它并将它附加到我页面中的 div.yt-player 中。它在我第一次调用视图时起作用,但是在我关闭视频(它清空 div.yt-player)并单击另一个调用我的视图的链接后,视频根本不会加载(空白)。我一直在挣扎,但仍然不明白为什么会发生,尤其是它第一次起作用。任何形式的帮助将不胜感激。谢谢。
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 中显示的错误输出是什么?
-
在控制台中记录实际上没有错误。我只是在它声明之后鬼混并添加了对 onYouTubeIframeAPIReady() 的调用,现在它一直有效。除了现在我有另一个问题:第一次加载我的页面时,我必须单击两次才能使其工作。我认为原因是 YouTube API 仅第一次调用了 onYouTubeIframeAPIReady() 函数。
-
它确实记录了通常的“无法将消息发布到youtube.com。收件人的来源127.0.0.1:3000”虽然(通常不是问题,它也是第一次记录它,但无论如何都可以) .我现在正在阅读文档以尝试找到另一个我可以调用自己的函数,并在我第二次和第 n 次调用我的视图时绕过 onYouTubeIframeAPIReady()。但是,如果您对如何使用条件语句实现这一点有任何建议,我会接受的。唯一的限制是 onYouTubeIframeAPIReady 必须保持全局并且似乎不能嵌套。
-
如果您在 jsfiddle.net 沙箱上设置,可能有助于其他人帮助您进行调试。 JSHint 在这一行抛出错误:videoId: '#{@media['youtube_url']}', events: { 'onReady': onPlayerReady, 'onStateChange': onPlayerStateChange },
-
你说得对,是我的错。 '#{@media['youtube_url']}' 是 rails 代码,这就是它不起作用的原因。以后我会用jsfiddle,谢谢。顺便说一句,我解决了问题。
标签: javascript iframe youtube youtube-api