我有一个嵌入的 Youtube 视频,我想在用户暂停视频、跳过等时捕获事件。按照谷歌文档 ( http://developers.google.com/youtube/js_api_reference ) 中的示例,我执行下列的:
var video = (my video ID here);
var params = { allowScriptAccess: "always" };
var atts = { id: "youtubeplayer" };
var x = 854;
var y = 480;
swfobject.embedSWF("http://www.youtube.com/v/" + video + "?enablejsapi=1&playerapiid=ytplayer&version=3", "bobina", x, y, "8", null, null, params, atts);
function onYouTubePlayerReady(playerId) {
youtubeplayer = document.getElementById('youtubeplayer');
youtubeplayer.addEventListener("onStateChange", "onytplayerStateChange");
youtubeplayer.setPlaybackQuality('large');
}
function onytplayerStateChange(newState) {
//Make it autoplay on page load
if (newState == -1) {
youtubeplayer.playVideo();
}
var tiempo=youtubeplayer.getCurrentTime();
//Rounds to 2 decimals
var tiempo = Math.round(tiempo*100)/100;
alert(tiempo);
}
现在,这一切都在 Firefox 和 Safari 中完美运行,但无法在 IE8 中运行(我的意思是:视频加载,但未捕获事件:永远不会调用事件处理程序)。根据javascript addEventListener onStateChange not working in IE,IE 不支持 addEventListener(),所以我尝试将该行替换为:
youtubeplayer.attachEvent("onStateChange", onytplayerStateChange);
但它也不起作用。(该问题的作者说他最终通过将“onComplete 放入我的颜色框并将 swfobject 放入其中”来解决它,但我在这里没有使用颜色框(我什至不知道那是什么),所以我不明白他的意思。
使用 alerts() 进行调试,我看到第一个函数 (onYoutubePlayerReady()) 确实被调用了,但我什至无法判断事件侦听器是否没有被注册或者它是否是 getElementById() 不起作用; 我尝试通过添加以下内容进行调试:
alert(typeof youtubeplayer);
就在它之后,但它甚至没有弹出。
哦,还有一件事:视频在 Firefox 和 Safari 中自动启动,但在 IE 中也不会。(是的,我在服务器上运行它,而不是在本地页面上)。
有人有什么想法吗?我真的不知道还能尝试什么。