¡Necesito esto para youtube api // las funciones callback onStateChange!crear una función javascript programáticamente
Quiero programar funciones que escuchen el evento "onStateChange" emitido por varios jugadores de youtube. Añadiendo el detector funciona ya:
function onYouTubePlayerReady(playerId) {
var ytpStateManager = playerId +"_StateManager";
document.getElementById(playerId).addEventListener("onStateChange", ytpStateManager);
...
La función que necesito para crear sobre la base de la variable playerId ("ytp_1", "ytp_2", ...) es
function ytpStateManager(newState) {
ytpStateHelper(playerId , newState);
}
Así, el resultado de la playerId "ytp_1" se vería así:
function ytp_1_StateManager(newState) {
ytpStateHelper("ytp_1", newState);
}
obras también, pero ahora tengo que añadir manualmente para cada jugador, que no es lo que necesito. Quiero crearlos automáticamente cuando un nuevo jugador envía un evento readyState.
Mi problema es que parece que estas funciones deben ser funciones globales para funcionar correctamente. Intenté varias opciones por días. Mi problema es que no sé cómo (si hay una forma) definir una función global, incl. el nombre de la función, programáticamente, basado en otra variable.
Es un fastidio que el ytp no emita un evento que incluye el estado Y el jugador/objetivo. Haría las cosas mucho más fáciles. Todo esto es básicamente la solución porque necesito que todos hagan cosas en todos los cambios de estado.
Si hay una manera mejor/más simple, Háganme saber :) De lo contrario, una solución para esta pregunta es muy bienvenida.
¿Existe alguna forma de volver a programar el evento para hacerlo más "accesible"?
Leí en la especificación que .addEventListener también toma un objeto, así que traté de vincular el evento a un objeto dedicado. Pero, de nuevo, no se activó. Se siente como he probado todo ...
ACTUALIZACIÓN ahora estoy cambiando al jugador iframe (de swfobject) debido a que uno ofrece un evento que incluye playerId y el estado: D Yeahhh !! Después de pasar la semana con el ytplayer equivocado, esto parece un gran avance. También parece que quiere que usemos el reproductor iframe que puede usar html5 dinámicamente cuando es compatible.
Intenté esto antes y en este momento de nuevo, pero no funciona para mí. El punto es en el momento en que "createStateManager" se llama "playerId" y las variables "ytpStateHelper" provienen de la función principal pero newState no está definida en ese momento, ya que este será el estado ytp cuando se desencadena el evento. –
Debería funcionar ... ¿Has probado la última versión que publiqué (he editado el código poco después de la publicación). – bfavaretto
Cuando llamo a la fábrica en un cambio de estado, esto generará muchas funciones pero no se activará ninguna. La devolución de llamada debe ser un nombre de función y una función con este nombre debe crearse automáticamente. De lo contrario, el disparador no funcionará como lo he probado durante días. Probado, no funciona. Ahora estoy probando algo. en esa direccion. –