2010-05-21 14 views
5

Her birinde bir youtube videosu gösteren iki colorbox açılan kutusu var. Oyun bittiğinde, onları otomatik olarak renk kutusu penceresini kapatmaya çalışıyorum. Aşağıdaki bu kod, firefox'ta mükemmel çalışır, ancak IE'de, addEventListener'ı işe alamıyorum. AttachEvent'i hiç başarıdan denedim. Bunu nasıl çözeceğimiz konusunda herhangi bir öneride bulunabilir mi? Basit görünüyor ama bir çözüm bulmaya çalışmaktan yoruldum. Bu arada, bu benim ilk defa stackoverflow'ta ve çok etkileyici.javascript addEventListener onStateChange IE uygulamasında çalışmadı

GÜNCELLEME 1:

Eh, bu benim şimdiki kodudur. FF'de mükemmel çalışır, ancak IE sadece iyi sonuç verir. IE8 ayıklayıcı ... hataları ya bildirmez

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'); 
    } 
} 

Güncelleme 3: Çözüm

Basitçe benim Colorbox içinde onComplete koyup ki SWFObject koymak ve IE'de mükemmel çalıştı.

+0

addEvent çalışmalıdır. AddEvent'i nasıl kullandığınızın kodunu gösterebilir misiniz? – Rajat

+0

Ben attachEvent kastediyorum. – Rajat

+0

Sadece yaptığımız ytplayer.attachEvent ("onStateChange", onytplayerStateChange); addEventListener'ın hemen altında, bir koşul koymadım, önemli olmadığını düşündüm. – Derek

cevap

2

IE testlerinden o sen

ytswf = document.getElementById('ytplayer1'); 

gerçek swf nesne yüklenmeden önce atanan kullandığınız referans benziyor Aradığınızda hemen sonra bu kodu

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

çalıştırmak için

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); 

Eğer $(function()

ve sağ <script> yerine daha aşağı

+0

beni merak var sırf Eh, üzerinde 4 saat geçirdim ve ne yazık ki eli boş geldi.Bununla birlikte, attachEvent değil. Bu ... renk kutusu. Yaptığı bir şey, IE işlemden sonra youTube nesnesine tam olarak başvuruda bulunamaz. Buradaki kaynak koduna bir göz atın: burada renkler kutusunun yokluğuyla durum ele geçirilir: http://plain7.com/test.htm ve burada, yok go: http://plain7.com/test2.htm . .. ve bu sadece IE’de, diğer tarayıcılar doğru olsun. Ben pes ediyorum :) Neredeyse 5 am ve ben braindead. Bazı diğer lightbox uygulamalarını deneyebilirsiniz (colorbox benim de fave olsa da) – Raine

+0

hah, şimdi son 2 haftayı nasıl hissettiğimi anladın ... baktığın için teşekkürler, eminim ki bir alternatif bulabilirim colorbox, sadece bazı ciddi değişiklikler alacak. Cevabınızı doğru olarak işaretleyeceğim çünkü şimdi ekte eklentinin sorun olmadığını biliyorum. Tekrar teşekkürler! – Derek

+0

Puanlar için teşekkürler, Derek, bu kadar yardımcı olmadığımı hissediyorum. Yine de bir düşüncem vardı, eğer colorbox penceresini renkli kutuya geri çağırırsanız, swfObject AFTER yüklerseniz. Başka hangi problemleri yaratabileceğimi bilmiyorum, ama ışık kutularını değiştirmeden önce denemeye değer bir şey olabilir. – Raine

-1

YouTube oynatıcısı nesne daha nasıl AS3 en sözdizimi gibidir kendi addEventListener yöntemini uygulayan

Yeni cevap.

player.addEventListener (event: String, dinleyici: String):

YouTube Ben burada vereceğiz hangi bağlantılı sayfadaki bir örnek sağlar Void bilgilere göre here listelenmiş:

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

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

YouTube, örnek kodlarının IE'de çalıştığını kanıtlayan bir örnek sayfa da sağlar. Bu örnek sayfa here'u bağlayacağım.

Şimdi

aşağıda Google/YouTube tarafından sağlanan örneklere göre çalışmak için kod ilgili olan parçalar-yazma yeniden bir girişim var: Yani

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'); 
} 

, bu hata burada yapılan doğar ediliyor çıkıyor 'addEventListener' yöntem adının kullanılmasıyla oluşan karışıklıktan. W3C JavaScript uygulamasında, YouTube parametresinde ikinci parametre bir işlevdir, ikinci parametre bir dizedir. Bunu bir şans verin =).IE

ihtiyacınız basit bir div öğesi kastediyoruz düşündüğü böylece

+0

yapım Cevabını yansıtmak için benim orijinal Söz konusu onYouTubePlayerReady değiştirdi. FF'de, 1'de IE'yi uyarır. 2. FF beklendiği gibi çalışır, IE, onytplayerStateChange işlevini çalıştırmaz. AttachEventHandler'ı doğru şekilde mi kullanıyorum? bind() işlevini kullanarak durumumu yardımcı olur? – Derek

+0

Yine, IE değil, FF'de çalışır. Belki bir örnek, problemimi çözmenize yardımcı olur. – Derek

+0

Derek, cevabım bağlantılı örnek sayfasını açın ve onStateChange olaylar IE sürümü görünür görüyorsanız söyle lütfen. IE8'de test ettim ve benim için gayet iyi çalışıyor gibiydi. Ayrıca, addEventListener'da üçüncü parametrenin gerekli olmadığını unutmayın. Sağladığınız birimle onYouTubePlayerReady'yi deneyin ve değiştirin ve rapor verin. Dallanma ifadelerine hiç gerek yok. –

4

IE addEventListener yapar desteklemediği sonra var ytswf; koymanızı dışarı kapatmadan önce ?? attachEvent'a ihtiyacın var mı?

if (el.addEventListener){ 
    el.addEventListener('click', modifyText, false);  
else if (el.attachEvent){ 
    el.attachEvent('onclick', modifyText); 
}