我一直在反对这一点,现在需要一些新鲜的眼睛:
我正在尝试使用youtube JS api在嵌入视频状态发生变化时调用函数。但由于某种原因,事件dosnt似乎正在触发,我在控制台中没有收到任何错误。
HTML:
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="630" height="350" id="bannerVideo">
<param name="movie" value="http://www.youtube.com/v/6Yfd1uGYgk8?enablejsapi=1&version=3&playerapiid=ytplayer" />
<param name="allowfullscreen" value="true" />
<param name="allowscriptaccess" value="always" />
<!--[if !IE]>-->
<object type="application/x-shockwave-flash" data="http://www.youtube.com/v/6Yfd1uGYgk8?enablejsapi=1&version=3&playerapiid=ytplayer" width="630" height="350">
<param name="allowfullscreen" value="true" />
<param name="allowscriptaccess" value="always" />
<!--<![endif]-->
<a href="http://www.adobe.com/go/getflashplayer">
<img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" />
</a>
<!--[if !IE]>-->
</object>
<!--<![endif]-->
</object>
使用Javascript:
function onYouTubePlayerReady(playerId) {
//alert(playerId);
ytplayer = document.getElementById("bannerVideo");
//alert(2);
ytplayer.addEventListener("onStateChange", "onytplayerStateChange");
//alert(3);
//ytplayer.addEventListener("click", function(){alert('click');});
}
function onytplayerStateChange(newState) {
alert("Player's new state: " + newState);
}
示例网站: http://dev.stewartknapman.com/ytPlayer/
我正在使用的代码是直接复制&amp;从youtube api网站粘贴,我使用swf对象嵌入代码。我正在使用静态嵌入,因为我将用PHP更改一些东西,但这不应该重要......对吧? 我将所有代码都移到了自己的文件中,仅用于测试,并将其托管在我的开发服务器上,因此它不应该是沙箱问题。 为了确保addEventListener函数没有失败,我还尝试在每一行之后发出警报。 (我已将警报留在我的示例代码中,但将其注释掉了。)
在搜索有关此错误的先前帖子后,我发现它们都是通过将ID添加到正确的元素或将回调函数解析为字符串来解决的。所以我对这些东西加倍检查,但这似乎不是问题。
非常感谢任何帮助。
答案 0 :(得分:1)
您是否尝试过使用SWFObject方法初始化Flash嵌入(如YouTube API所述)?
var params = { allowScriptAccess: "always" };
var atts = { id: "myytplayer" };
swfobject.embedSWF("http://www.youtube.com/v/VIDEO_ID?enablejsapi=1&playerapiid=ytplayer&version=3",
"ytapiplayer", "425", "356", "8", null, null, params, atts);
用上面的代码替换您的代码并将其配置为您的设置。