2

我不知道我是否愚蠢并遗漏了一些明显的东西,但是:

我有一个包含以下脚本的页面:

$(document).ready(function() {
    $('.fsBtn').click(function(e) {
        $("#fullscreenVideo").show();
        player.stopVideo();
        playerFS.playVideo();
    });
});

在每个浏览器栏 IE8 中都可以正常加载。但是在 IE8 中,调试器会出现 Object doesn't support this property or method Line 144playerFS.playVideo()

我检查了它是否已被声明-它已声明。奇怪的是,如果我进入 IE 的脚本调试器并运行playerFS.playVideo()它将被 IE 接受。

为什么这个脚本不能在代码中执行,但允许我在调试中很好地执行它?

以下是我到目前为止采取的步骤: - 将脚本放在准备好的文档中,以确保其正常。- 将脚本放置在页面中,而不是外部 JS 文件中。- IE 调试模式手动运行脚本。

任何帮助将不胜感激,这确实让我难过。如有需要可以提供更多信息。

编辑: Player 和 playerFS 都是这样定义的:

function onYouTubePlayerAPIReady() {
    player = new YT.Player('player', {
        height: '360',
        width: '640',
        videoId: V_ID,
        playerVars: playerParams,
        events: {
            // 'onReady': onPlayerReady,
            // 'onStateChange': onPlayerStateChange
        }
    });
    //exact Same code again but for playerFS instead of player
}

在另一个 .

播放器的 HTML 页面和 JS:http: //pastebin.com/ZbBwKg9a

4

4 回答 4

2

youtube API 很难使用 JSAPI 嵌入到隐藏的 div 中。

尝试在隐藏视频之前添加一段初始化视频的代码,以确保它被正确创建。

于 2012-07-16T09:02:03.130 回答
1

尝试在玩家准备好 dom 时执行您的代码。
您为玩家的 onReady 事件提供了一个 evemtHandler,因此,您所要做的就是将所有代码包装到一个名为“onPlayerReady”的函数中。

于 2012-07-15T19:55:40.820 回答
0

你的代码有一大堆只能在 IE 版本小于 9 中运行的东西。我会在那里寻找问题:

    <!--[if IE lt 9]>
    <script>
    if($.browser.msie){

        var params = { allowScriptAccess: "always" };
        var atts = { id: "player" };
        swfobject.embedSWF("http://www.youtube.com/v/_4nFh0CRNgo&enablejsapi=1&playerapiid=ytplayer&version=3&cc_load_policy=1&controls=0&modestbranding=0&rel=0&showinfo=0",
                           "player", "640", "360", "8", null, null, params, atts);
        }

        var paramsfs = { allowScriptAccess: "always" };
        var attsfs = { id: "playerFS" };
swfobject.embedSWF("http://www.youtube.com/v/_4nFh0CRNgo&enablejsapi=1&playerapiid=ytplayerFS&version=3&cc_load_policy=1&controls=0&modestbranding=0&rel=0&showinfo=0",
                       "playerFS", "940", "660", "8", null, null, paramsfs, attsfs);

        legacyCode = true;
        subtitlesFromTranscript = true; 
    </script>
    <![endif]-->
于 2012-07-15T19:52:53.987 回答
0

这是由未为 HTML5 设置的文档元素标记引起的。对于 !DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"... IE 9+ 等,IE 9+ 会自动将浏览器退回到 HTML4。HTML5 适用于 IE 9+ 文档元素标记必须为 !DOCTYPE HTML。

我将注释添加到 stackoverflow.com 是因为 MS 开发网络不知道为什么 .play 在 IE 9 上无法在其浏览器 IE 9 上运行。

我喜欢 HTML5,但使用部分、导航、页眉、页脚而不是 div 又会带来大量浏览器不兼容问题!谷歌的 html5shiv 不是解决方案。

于 2013-03-28T18:13:00.227 回答