"对象没有't支持这种性质或方法“;在IE 8中.在调试中执行精细

"Object doesn't support this property or method" in IE 8. Executes fine in debug

本文关键字:方法 IE 调试 执行 对象 quot 支持      更新时间:2023-09-26

我不知道我是不是很愚蠢,错过了一些显而易见的东西,但:

我有一个页面有以下脚本:

$(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调试模式手动运行脚本。

任何帮助都将不胜感激,这真的让我很为难。如有必要,可以提供更多信息。

编辑:播放器和播放器FS都是这样定义的:

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
}

在另一个游戏中,上面写着"玩家"的部分是"玩家FS"。

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

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

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

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

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

    <!--[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]-->

这是由未为HTML5设置的文档元素标记引起的。IE 9+自动将浏览器倒退到HTML4 for!DOCTYPE HTML PUBLIC"//W3C//DTD HTML 4.0过渡//EN"。。。等等用于IE 9+。HTML5工作在IE 9+文档元素标签必须是!DOCTYPE HTML。

我在stackoverflow.com上添加了这条注释,因为微软开发网络不知道为什么.play在IE 9上不适用于他们的浏览器IE 9。

我喜欢HTML5,但使用section、nav、header、footer而不是div会再次带来大量浏览器不兼容!谷歌的html5shiv不是一个解决方案。