youtube iframe活动

时间:2011-07-28 10:44:54

标签: javascript events iframe youtube

我尝试捕捉youtube iframe的事件: http://lab.joergpfeiffer.de/videofull/youtube.php

所以我先打电话给api

<script type='text/javascript' src='http://www.youtube.com/player_api'></script>

我设置了iframe

<iframe id="ytfullplayer" type="text/html" width="640" height="390" src="http://www.youtube.com/p/B93C3D017CB2D65A?enablejsapi=1&origin=lab.domain.de" frameborder="0" ></iframe>

并尝试稍后在

中设置事件
var ytfullplayer;
    function onYouTubePlayerAPIReady() {
        console.log('onYouTubePlayerAPIReady');
        ytfullplayer = new YT.Player('ytfullplayer', {
            events: {
              'onReady': testfunc,
              'onPlaybackQualityChange': testfunc,
              'onStateChange': testfunc,
              'onError': testfunc
            }
        });

    }
    function testfunc(){ alert('hello'); }

无论我做什么,都没有发生任何事件。我读了10次iframe api。它应该实际工作。

有什么想法吗?

4 个答案:

答案 0 :(得分:6)

在onYouTubePlayerAPIReady()

之前执行这些例程
// This code loads the IFrame Player API code asynchronously.
var tag = document.createElement('script');
tag.src = "http://www.youtube.com/player_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

如果仍有疑惑,请访问http://code.google.com/apis/youtube/iframe_api_reference.html

答案 1 :(得分:2)

我做了以下事情。

开始使用https://developers.google.com/youtube/iframe_api_reference#Loading_a_Video_Player

中的示例代码 然后我替换了:

<div id="player"></div>

<iframe id="player" type="text/html" width="640" height="390"
  src="http://www.youtube.com/embed/M7lc1UVf-VE?enablejsapi=1&origin=http://example.com"
  frameborder="0">
</iframe>

(在同一网址找到iframe标记)

然后我摆脱了上面的原始参数 - 这似乎使事情有效。顺便说一句,我发现第2步可以用标记代替:

<script src="https://www.youtube.com/iframe_api"></script>

答案 2 :(得分:0)

阿德尔的答案应该解决你的问题。

Google建议您异步加载播放器API脚本,即在脚本同时加载时让其余页面加载。

因为您在早期将脚本标记放在标记中,所以在加载该脚本之前不会执行页面的其余部分。因此,当调用onYouTubePlayerAPIReady()时,您的函数尚未定义。

答案 3 :(得分:0)

我有同样的问题。它似乎与手动放置iframe而不是使用div标签替换有关。如果我使用div方法它工作正常,手动iframe,没有。

API脚本的异步加载,或者手动将其包含在头部中没有任何区别。

我刚刚接受了div替换,并且停止了战斗。