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
}

「player」と書いてある部分とは別で「playerFS」です。

プレーヤーの 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

あなたのコードには、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]-->
于 2012-07-15T19:52:53.987 に答える
0

これは、ドキュメント要素タグが HTML5 用に設定されていないことが原因です。IE 9+ は自動的にブラウザを HTML4 for !DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"... IE 9+ などに戻します。HTML5 は IE 9 以降で動作します ドキュメント要素タグは !DOCTYPE HTML にする必要があります。

MS dev ネットワークは、ブラウザー IE 9 の IE 9 で .play が機能しない理由がわからないため、stackoverflow.com にメモを追加しました。

私は HTML5 が好きですが、div の代わりに section、nav、header、footer を使用すると、大量のブラウザーの非互換性が再び発生します。Google の html5shiv は解決策ではありません。

于 2013-03-28T18:13:00.227 に答える