1

我有一个嵌入的 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 中也不会。(是的,我在服务器上运行它,而不是在本地页面上)。

有人有什么想法吗?我真的不知道还能尝试什么。

4

1 回答 1

4

好的,找到了解决方案。猜猜那是什么?只写如下:

var youtubeplayer = document.getElementById('youtubeplayer');

它在 IE 8 中完美运行。它所需要的只是“var”关键字。

以防万一它对其他有同样问题的人有用......

于 2012-05-12T14:03:23.593 回答