1

埋め込まれた Youtube ビデオがあり、ユーザーがビデオを一時停止したり、スキップしたりしたときにイベントをキャプチャしたいと考えています。Google のドキュメント ( http://developers.google.com/youtube/js_api_reference ) の例に従って、続く:

var video = (my video ID here);
var params = { allowScriptAccess: "always" };
var atts = { id: "youtubeplayer" };
var x = 854;
var y = 480;
swfobject.embedSWF("http://www.youtube.com/v/" + video + "?enablejsapi=1&playerapiid=ytplayer&version=3", "bobina", x, y, "8", null, null, params, atts);

function onYouTubePlayerReady(playerId) {
      youtubeplayer = document.getElementById('youtubeplayer');
      youtubeplayer.addEventListener("onStateChange", "onytplayerStateChange");
      youtubeplayer.setPlaybackQuality('large');
      }

function onytplayerStateChange(newState) {
    //Make it autoplay on page load
    if (newState == -1) {
        youtubeplayer.playVideo();
        }

    var tiempo=youtubeplayer.getCurrentTime();
    //Rounds to 2 decimals
    var tiempo = Math.round(tiempo*100)/100;
    alert(tiempo);
    }

現在、これはすべて Firefox と Safari で完全に機能しますが、IE8 で機能させる方法はありません (つまり、ビデオは読み込まれますが、イベントはキャプチャされません。イベント ハンドラーが呼び出されることはありません)。javascript addEventListener onStateChange not working in IEによると、IE は addEventListener() をサポートしていないため、その行を次のように置き換えてみました。

youtubeplayer.attachEvent("onStateChange", onytplayerStateChange);

しかし、それも機能しません。(その質問の著者は、「onCompleteをカラーボックスに入れ、swfobjectをその中に入れる」ことで最終的に解決したと言いますが、ここではカラーボックスを使用していません(それが何であるかさえわかりません)ので、私は彼の意味がわからない。

alerts() を使用してデバッグすると、最初の関数 (onYoutubePlayerReady()) が実際に呼び出されていることがわかりますが、イベント リスナーが登録されていないのか、それとも getElementById() が機能していないのかさえわかりません。 ; 次を追加してデバッグを試みました:

alert(typeof youtubeplayer);

その直後ですが、ポップアップすらしません。

ああ、もう 1 つ。ビデオは Firefox と Safari では自動的に開始されますが、IE では開始されません。(そして、はい、これをローカル ページではなくサーバーで実行しています)。

誰にもアイデアはありますか?他に何を試せばいいのかわからない。

4

1 に答える 1

4

さて、解決策を見つけました。それは何だったと思いますか?次のように書くだけです:

var youtubeplayer = document.getElementById('youtubeplayer');

IE 8 では完全に動作します。必要なのは "var" キーワードだけでした。

同じ問題を抱えている他の人に役立つ場合に備えて...

于 2012-05-12T14:03:23.593 に答える