3

我正在使用 youtube player api。我在这里关注文档:

http://code.google.com/apis/youtube/js_api_reference.html

在播放器上添加事件侦听器时出现问题,它似乎只是卡在那里。我在后面直接放了一条警告语句,它永远不会被调用:

ytplayer.addEventListener("onStateChange", "onytplayerStateChange");
alert("I never get called...");

知道为什么会发生这种情况吗?通过 FF chrome safari 运行它,同样的事情发生在所有人身上。其他播放器功能都可以正常工作。我正在使用 swfobject 版本。我也在服务器上实时运行。我不明白。

谢谢

4

3 回答 3

1

看看这个页面的源代码,它可能会让你朝着正确的方向前进。视频下方的数字是您尝试实施的方式捕获和更新的视频状态

var ytplayer;

function onytplayerStateChange(newState) {
    document.getElementById('videoStatus').innerHTML = newState;
}

function onYouTubePlayerReady(playerId) {
    ytplayer = document.getElementById(playerId);
    ytplayer.addEventListener('onStateChange', 'onytplayerStateChange');
}

$(document).ready(function() {

    var params = {
        allowScriptAccess: "always"
    };

    var atts = {
        id: "ytplayer1"
    };

    swfobject.embedSWF("http://www.youtube.com/v/5dWnMu490Zk?rel=0&autoplay=1&enablejsapi=1&playerapiid=ytplayer1", "popupVideoContainer1", "853", "505", "9", null, {}, params, atts);

});
<div id="popupVideoContainer1">You need Flash and JavaScript in order to view the video.</div>
<div id="videoStatus">status</div>

于 2010-06-01T09:15:40.927 回答
1

将您的回调放在全局命名空间中,例如 window.onytplayerStateChange = function。

虽然它非常糟糕,但它是我能够成功让回调工作的少数几种方法之一。我被告知它是因为 addEventListener 是一个自定义函数,它覆盖了通过全局命名空间中的字符串进行查找的本机代码。

于 2013-01-19T22:45:02.670 回答
0

我认为这是一个错误。这是对我有用的解决方案:

在播放器 URL 中,您必须在 ? 之后包含一个“&”。所以这个例子是这样的:

VIDEO_ID?enablejsapi=1&playerapiid=ytplayer

但改用这个:

VIDEO_ID?&enablejsapi=1&playerapiid=ytplayer

(注意“启用”之前的 &)

没有多大意义,但它现在正在工作:)

于 2010-07-15T13:43:14.437 回答