6

それぞれに YouTube ビデオを表示する 2 つのカラーボックス ポップアップ ボックスがあります。プレイが終わったら、カラーボックス ウィンドウを自動的に閉じるようにしています。以下のコードは Firefox では完璧に動作しますが、IE では動作しませんaddEventListener。私はattachEvent 成功しませんでした。これを解決する方法について誰か提案できますか? それは簡単に思えますが、解決策を見つけようとして疲れ果てています。

更新 1:

さて、これは私の現在のコードです。Firefox では完璧に動作しますが、IE では適切にしか出力されません。IE8デバッガーもエラーを報告しません...

function onYouTubePlayerReady(playerId) {
  if (playerId && playerId != 'undefined') {
    if(playerId && playerId == 'ytvideo1'){
      var ytswf = document.getElementById('ytplayer1');
      alert('good');
    } else if(playerId && playerId == 'ytvideo2'){
      var ytswf = document.getElementById('ytplayer2');
    } else {
    }

    setInterval('', 1000);
    ytswf.addEventListener('onStateChange', 'onytplayerStateChange');
    alert('great');
  }
}


function onytplayerStateChange(newState) {
  alert('amazing');
  if(newState == 0){
    $.fn.colorbox.close();
    alert('perfect');
  }
}

更新 3: 解決策

onComplete をカラーボックスに入れ、そこに swfobject を入れるだけで、IE で完全に機能しました。

4

3 に答える 3

4

IEはサポートしていませんaddEventListenerか?あなたはattachEvent正しい必要がありますか?

if (el.addEventListener){   
    el.addEventListener('click', modifyText, false);    
else if (el.attachEvent){   
    el.attachEvent('onclick', modifyText);   
}
于 2010-05-28T21:36:41.777 に答える
2

IEでのテストから、使用している参照のように見えます

ytswf = document.getElementById('ytplayer1');

実際のswfオブジェクトがロードされる前に割り当てられるため、IEは単純なdiv要素を参照していると見なします

このコードを実行する必要があります

function onYouTubePlayerReady(playerId) {
  ytswf = document.getElementById("ytplayer1");
  ytplayer.addEventListener("onStateChange", "onytplayerStateChange");
}

電話した直後

swfobject.embedSWF("http://www.youtube.com/v/SPWU-EiulRY?
hl=en_US&hd=0&rel=0&fs=1&autoplay=1&enablejsapi=1&playerapiid=ytvideo1",
"popupVideoContainer1", "853", "505", "8", null, null, params, atts);

それを締めくくる前に$(function()

さらに下ではなくvar ytswf; 直後に配置します<script>

于 2010-05-28T09:33:40.583 に答える
-1

新しい答え

YouTube プレーヤー オブジェクトは、AS3 の構文に似た独自の addEventListener メソッドを実装しています。ここにリストされている情報に従って:

player.addEventListener(event:String, listener:String):Void

YouTube は、私がリンクしたページに例を示しており、ここで提供します。

function onYouTubePlayerReady(playerId) {
  ytplayer = document.getElementById("myytplayer");
  ytplayer.addEventListener("onStateChange", "onytplayerStateChange");
}

function onytplayerStateChange(newState) {
   alert("Player's new state: " + newState);
}

YouTube は、サンプル コードが IE で動作することを証明しているように見えるサンプル ページも提供しています。その例のページをここにリンクします。

ここで、コードの関連部分を書き直して、Google/YouTube が提供する例に従って動作するようにします。

function onYouTubePlayerReady(playerId) {
  if(playerId && playerId == 'ytvideo1'){
    var ytplayer = document.getElementById('ytplayer1');
  } else if(playerId && playerId == 'ytvideo2'){
    var ytplayer = document.getElementById("ytplayer2");
  } else {
    return;
  }

  ytplayer.addEventListener('onStateChange', 'onytplayerStateChange');
}

したがって、ここで犯されている間違いは、メソッド名「addEventListener」の使用によって作成された混乱から生じていることがわかります。W3C JavaScript 実装では、2 番目のパラメーターは関数ですが、YouTube 実装では、2 番目のパラメーターは文字列です。これを試してみてください=)。

于 2010-05-21T23:17:45.567 に答える