【问题标题】:youtube onStateChange event is not workingyoutube onStateChange 事件不起作用
【发布时间】:2012-04-17 18:05:35
【问题描述】:

我已经为此苦恼了一段时间,需要一些新的眼光:

当嵌入视频状态发生变化时,我正在尝试使用 youtube JS api 调用函数。但由于某种原因,事件似乎正在触发,我在控制台中没有收到任何错误。

HTML:

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="630" height="350" id="bannerVideo">
    <param name="movie" value="http://www.youtube.com/v/6Yfd1uGYgk8?enablejsapi=1&version=3&playerapiid=ytplayer" />
    <param name="allowfullscreen" value="true" />
    <param name="allowscriptaccess" value="always" />
    <!--[if !IE]>-->
    <object type="application/x-shockwave-flash" data="http://www.youtube.com/v/6Yfd1uGYgk8?enablejsapi=1&version=3&playerapiid=ytplayer" width="630" height="350">
        <param name="allowfullscreen" value="true" />
        <param name="allowscriptaccess" value="always" />
        <!--<![endif]-->
        <a href="http://www.adobe.com/go/getflashplayer">
            <img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" />
        </a>
        <!--[if !IE]>-->
    </object>
    <!--<![endif]-->
</object>

Javascript:

function onYouTubePlayerReady(playerId) {
    //alert(playerId);
    ytplayer = document.getElementById("bannerVideo");
    //alert(2);
    ytplayer.addEventListener("onStateChange", "onytplayerStateChange");
    //alert(3);
    //ytplayer.addEventListener("click", function(){alert('click');});
}

function onytplayerStateChange(newState) {
    alert("Player's new state: " + newState);
}

示例网站: http://dev.stewartknapman.com/ytPlayer/

我使用的代码是从 youtube api 站点直接复制和粘贴的,我使用 swf 对象来嵌入代码。我正在使用静态嵌入,因为我将用 php 改变一些东西,但这不重要......对吗? 我将所有代码移到它自己的文件中只是为了测试,它托管在我的开发服务器上,所以它不应该是沙盒问题。 我还尝试在每一行之后发出警报,以确保 addEventListener 函数没有失败。 (我在示例代码中留下了警报,但将它们注释掉了。)

在搜索了有关此错误的先前帖子后,我发现它们都通过将ID添加到正确的元素或将回调函数解析为字符串来解决。所以我对这些事情进行了两次和三次检查,但这似乎不是问题。

任何帮助将不胜感激。

【问题讨论】:

    标签: javascript youtube-api dom-events


    【解决方案1】:

    您是否尝试过使用 SWFObject 方法(如 YouTube API 中所述)初始化 Flash 嵌入?

    var params = { allowScriptAccess: "always" };
    var atts = { id: "myytplayer" };
    swfobject.embedSWF("http://www.youtube.com/v/VIDEO_ID?enablejsapi=1&playerapiid=ytplayer&version=3",
                       "ytapiplayer", "425", "356", "8", null, null, params, atts);
    

    将您的标签替换为上述内容并将其配置为您的设置。

    【讨论】:

    • 更改嵌入方法有效。感谢那。小玩家注意:使用这种嵌入方式,不要使用静态发布方式。
    猜你喜欢
    • 2023-04-04
    • 2014-08-28
    • 2014-04-30
    • 1970-01-01
    • 2013-06-09
    • 1970-01-01
    • 1970-01-01
    • 2023-04-11
    • 1970-01-01
    相关资源
    最近更新 更多