为什么我的YouTube视频不报告事件?

时间:2011-01-19 17:52:38

标签: javascript-events youtube

看看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>

1 个答案:

答案 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