看看this code。它实际上可以完美地加载视频,但在暂停,加载或播放视频时不会触发onPlayerStateChange
。
我已经实现了打印任何新视频状态的功能,但它甚至不会报告事件。
为什么不打开onPlayerStateChange?
来自JSBin的代码:
<body>
<script src="http://www.google.com/jsapi" type="text/javascript"></script>
<script type="text/javascript">
google.load("swfobject", "2.1");
</script>
<script>
function onYouTubePlayerReady(playerId) {
var myplayer = document.getElementById("myplayer");
myplayer.cueVideoById("pGBMFxN_eys",0, "default");
myplayer.addEventListener("onStateChange", onPlayerStateChange);
}
function onPlayerStateChange(newState){
log(newstate);
}
function log(text){
document.getElementById('logarea').innerHTML+=text+"<br/>";
console.log(text);
}
function setup(){
var params = { allowScriptAccess: "always",wmode:"transparent" };
var atts = { id: "myplayer" };
swfobject.embedSWF("http://www.youtube.com/apiplayer?" +
"&enablejsapi=1&playerapiid=mojplayer",
"greatvideo", "400", "300", "8", null, null, params, atts);
}
google.setOnLoadCallback(setup);
</script>
<div id="logarea">
</div>
<div id="greatvideo">
</div>
</body>
答案 0 :(得分:4)
您的代码中存在两个阻止此操作的错误。完成这些更改后,您会在YouTube视频上方看到以下输出:
5
3
1
0
错误如下:
在回调周围使用引号,或使用匿名函数:
// put callback in quotes or anonymous function
myplayer.addEventListener("onStateChange", "onPlayerStateChange");
确保参数匹配传递给log函数的局部变量:
function onPlayerStateChange(newState){
log(newState); // variables are case sensitive
}
注意: addEventListener可能无法在IE浏览器中使用。我正在运行Ubuntu并且没有IE可用,但您可能需要使用浏览器检测在IE浏览器中使用attachEvent。这是在Chrome 8.0上测试的。
我还注册了一张jsapi密钥。文档不清楚,因为一个谷歌页面说API Key需要使用Google Loader,而API页面本身则表示不需要。您可能不需要获得密钥,但如果您在进行上述更改后仍然遇到问题,我建议您获取一个密钥以排除此变量。
http://code.google.com/apis/loader/signup.html
<强>资源:强>
YouTube Adding Event Listeners
YouTube EventListener Player Demo
更新:适用于Chrome 8.0,Firefox 3.6和IE8。它在IE7中不起作用。但是不要在死的浏览器上浪费精力,而是帮助社区,并将这些小的用户子集重定向到升级链接,以便他们可以加入2011年。:)我使用的IE7版本是IECollections的一部分,不是真正的IE7。
如果您有一部分用户,无论出于何种原因,他们与旧版本的IE7绑定,并且您希望支持这些用户,请参阅javascript addEventListener onStateChange not working in IE