2010-05-21 21 views
5

Tengo dos cuadros emergentes de cuadro de color que muestran un video de youtube en cada uno. Cuando terminen de jugar, estoy intentando que cierren automáticamente la ventana de la caja de color. Este código a continuación funciona perfectamente en Firefox, pero en IE no puedo hacer que addEventListener funcione. He intentado attachEvent sin éxito. ¿Alguien puede ofrecer alguna sugerencia sobre cómo resolver esto? Parece simple pero estoy agotado tratando de encontrar una solución. Por cierto, esta es mi primera vez en stackoverflow y es muy impresionante.javascript addEventListener onStateChange no funciona en IE

ACTUALIZACIÓN 1:

Bueno, este es mi código actual. Funciona perfecto en FF, pero IE solo produce buenos resultados. IE8 depurador no se informa de los errores, ya sea ...

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

Actualización 3: Solución

En pocas palabras onComplete en mi caja de colores y poner el swfobject en eso y funcionó a la perfección en el IE.

+0

addEvent should work. ¿Puedes mostrar el código de cómo estás usando addEvent? – Rajat

+0

Quise decir attachEvent. – Rajat

+0

Simplemente hice ytplayer.attachEvent ("onStateChange", onytplayerStateChange); justo debajo de addEventListener, no puse una condición, pensé que no importaría. – Derek

Respuesta

2

de las pruebas en el IE parece que la referencia que está utilizando

ytswf = document.getElementById('ytplayer1'); 

se asigna antes de cargar el objeto SWF real, por lo que IE cree que se está refiriendo a un simple elemento div

necesita para ejecutar este código

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

justo después de llamar

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

antes de cerrar que $(function()

y colocar var ytswf; justo después de la <script> en lugar de más abajo

+0

Bueno, he pasado 4 horas en él solo porque me dio curiosidad, y desafortunadamente vine con las manos vacías.Sin embargo, no es un evento adjunto. Es ... colorbox. Algo que hace que IE no pueda hacer referencia al objeto youTube después del renderizado. Eche un vistazo al código fuente aquí: aquí los estados se están capturando con la ausencia de colorbox: http://plain7.com/test.htm y aquí, no va: http://plain7.com/test2.htm . .. y esto es solo en IE, otros navegadores lo hacen bien. Me rindo :) Son casi las 5am y estoy loco. Puede intentar otra implementación lightbox (aunque colorbox es mi favorito también) – Raine

+0

ja, ahora ves cómo me he sentido en las últimas 2 semanas ... gracias por mirarlo, estoy seguro de que puedo encontrar una alternativa a colorbox, que solo tomará algunas modificaciones serias. Voy a marcar su respuesta como correcta simplemente porque ahora sé que attachEvent no es el problema. ¡gracias de nuevo! – Derek

+0

Gracias por los puntos, Derek, aunque siento que no ayudé mucho. Sin embargo, pensé: ¿qué pasaría si carga swfObject DESPUÉS de renderizar la ventana de colorbox, como, en una devolución de llamada a colorbox? No sé qué otros problemas podría crear, pero antes de que cambies las cajas de luz, puede ser que valga la pena intentarlo. – Raine

-1

nueva respuesta

El objeto de reproductor de YouTube implementa su propio método addEventListener que es más como la forma en la sintaxis de AS3. De acuerdo con la información que aparece here:

player.addEventListener (evento: Cadena, oyente: String): void

YouTube proporciona un ejemplo en la página he vinculado la que voy a ofrecer aquí:

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

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

YouTube también proporciona una página de ejemplo que parece demostrar que su código de ejemplo funciona en IE. Voy a vincular esa página de ejemplo here.

Ahora, aquí hay un intento de volver a escribir las partes pertinentes de su código para trabajar según los ejemplos proporcionados por 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'); 
} 

Así, resulta que el error que se hace aquí surge de la confusión creada por el uso del nombre del método 'addEventListener'. En la implementación de W3C JavaScript, el segundo parámetro es una función mientras en la implementación de YouTube, el segundo parámetro es una cadena. Dale una oportunidad =).

+0

Cambié el onYouTubePlayerReady en mi pregunta original para reflejar su respuesta. En FF alerta 1, en IE alerta 2. FF funciona como se esperaba, IE no ejecuta la función onytplayerStateChange. ¿Estoy usando attachEventHandler correctamente? ¿El uso de la función bind() ayudaría a mi situación? – Derek

+0

Nuevamente, funciona en FF, no en IE. Tal vez un ejemplo les ayude a ustedes a resolver mi problema. – Derek

+0

Derek, abra la página de ejemplo que he vinculado en mi respuesta, y dígame si está viendo que los eventos de cambio de estado aparecen en su versión de IE. Lo probé en IE8, y pareció funcionar bien para mí. Además, tenga en cuenta que el tercer parámetro no es necesario en addEventListener. Pruebe y reemplace su onYouTubePlayerReady con el que proporcioné, e informe de nuevo. No debería necesitar las declaraciones de bifurcación en absoluto. –

4

IE no soporta addEventListener lo hace ?? Necesitas attachEvent ¿verdad?

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