3

私はトラブルシューティングを行い、これに対する答えを何時間も探していましたが、役に立ちませんでした. API ドキュメントのサンプル コードがそのまま使用されています。他の人が投稿して IE9 で動作すると言っているサンプル コードは、私には適していません。doctype が html で適切に設定されていること、CSS で display=none を使用して iframe を隠していないこと、ブラウザー モードが IE9 でドキュメント モードが IE9 標準であることを確認済みです。私のセキュリティ設定は中高に設定されています。Google のサンプル ページでさえ、IE9 ブラウザでは機能しません。

https://developers.google.com/youtube/youtube_player_demo

[再生] をクリックしてムービーを再生しようとすると (上記のリンク)、IE のスクリプト デバッグ コンソールにあらゆる種類のエラーが表示されます。最初のエラーは次のようになります。

SCRIPT5009: 'video' は定義されていません

助けてください!私のサンプルコードは以下です。映画が読み込まれ、「API の準備ができました」というアラートが表示されますが、IE9 では他のイベントは発生しません。何が欠けているのかわかりません!これがすぐにわからなければ、私のプロジェクトで YouTube を使用して html5 ビデオを再生するのをやめなければなりません。

<!DOCTYPE html>
<html>
  <head><title></title></head>
  <body>
    <!-- 1. The <iframe> (and video player) will replace this <div> tag. -->
    <div id="player"></div>

    <script type="text/javascript">
        // 2. This code loads the IFrame Player API code asynchronously.
        var tag = document.createElement('script');

        // This is a protocol-relative URL as described here:
        //     http://paulirish.com/2010/the-protocol-relative-url/
        // If you're testing a local page accessed via a file:/// URL, please set tag.src to
        //     "https://www.youtube.com/iframe_api" instead.
        //tag.src = "//www.youtube.com/iframe_api";
        tag.src = "https://www.youtube.com/iframe_api";
        //tag.src = "http://www.youtube.com/iframe_api";
        var firstScriptTag = document.getElementsByTagName('script')[0];
        firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

        // 3. This function creates an <iframe> (and YouTube player)
        //    after the API code downloads.
        var player;
        function onYouTubeIframeAPIReady() {
            alert("API is ready!");
            player = new YT.Player('player', {
                height: '450',
                width: '800',
                videoId: 'mU7aJgvh9K8',
                events: {
                    'onReady': onPlayerReady,
                    'onStateChange': onPlayerStateChange
                }
            });
        }

        // 4. The API will call this function when the video player is ready.
        function onPlayerReady(event) {
            event.target.playVideo();
            alert("Player is ready!");
        }

        // 5. The API calls this function when the player's state changes.
        //    The function indicates that when playing a video (state=1),
        //    the player should play for six seconds and then stop.
        var done = false;
        function onPlayerStateChange(event) {
            alert("State changed!");
            if (event.data == YT.PlayerState.PLAYING && !done) {
                setTimeout(stopVideo, 6000);
                done = true;
            }
        }
        function stopVideo() {
            player.stopVideo();
        }
    </script>
  </body>
</html>
4

1 に答える 1

8

同僚のマシンでテストした後、問題が私のシステムの IE に固有のものであることがわかったので、ブラウザの設定をもう一度調べ始めました。気まぐれで、Flash プレーヤー ([インターネット オプション]、[プログラム]、[アドオンの管理] の下) とビオラを無効にしましたが、ビデオ コードは魔法のように機能しました。また、Flash プレーヤーが古くなっていること (9.0.45.0) にも気付きました。最新バージョンのプレーヤーをインストールしても、まだ機能していました。

古い Flash プレーヤーが YouTube API とイベントに干渉していた理由はわかりませんが、どうやらそれが原因だったようです。

于 2013-03-08T14:53:19.833 に答える