Necessario per le funzioni di callback di onStateChange su youtube api //!crea una funzione javascript a livello di programmazione
Voglio creare a livello di codice le funzioni che ascolteranno l'evento "onStateChange" emesso da diversi player di youtube. Aggiungendo l'ascoltatore funziona già:
function onYouTubePlayerReady(playerId) {
var ytpStateManager = playerId +"_StateManager";
document.getElementById(playerId).addEventListener("onStateChange", ytpStateManager);
...
La funzione Ho bisogno di creare in base alla variabile playerid ("ytp_1", "ytp_2", ...) è
function ytpStateManager(newState) {
ytpStateHelper(playerId , newState);
}
Così il risultato per la playerid "ytp_1" sarebbe simile a questa:
function ytp_1_StateManager(newState) {
ytpStateHelper("ytp_1", newState);
}
funziona anche, ma in questo momento ho bisogno di aggiungere manualmente per ogni giocatore, che non è quello che mi serve. Voglio crearli automaticamente quando un nuovo giocatore invia un evento readyState.
Il mio problema è che sembra che queste funzioni debbano essere funzioni globali per funzionare correttamente. Ho provato diverse opzioni per giorni ora. Il mio problema è che non so come (se c'è un modo) per definire una funzione globale, incl. il nome della funzione, a livello di programmazione, basato su un'altra variabile.
È un peccato che l'ytp non emetta un evento che include lo stato AND il giocatore/obiettivo. Renderebbe le cose molto più semplici Tutto questo è fondamentalmente la soluzione perché ho bisogno di tutto per fare cose su tutti gli stati.
Se c'è un modo migliore/più semplice, PER FAVORE fammi sapere :) In caso contrario, una soluzione per questa domanda è altamente gradita.
Forse c'è un modo per reindirizzare l'evento, per renderlo più "accessibile"?
Ho letto nella specifica che .addEventListener accetta anche un oggetto, quindi ho provato a associare l'evento a un oggetto dedicato. Ma di nuovo, non è stato attivato. Si sente come ho provato tutto ...
UPDATE Sono ora di passare al giocatore iframe (da swfobject) perché quella fornisce un evento che comprende playerid e lo stato: D Yeahhh !! Dopo aver passato una settimana con il giocatore sbagliato, questo sembra un grande progresso. Sembra anche che tu voglia che usiamo il player iframe che può usare dinamicamente html5 quando supportato.
Ho provato questo prima e ora di nuovo ma non funziona per me. Il punto è nel momento in cui "createStateManager" è chiamato "playerId" e le variabili "ytpStateHelper" provengono dalla funzione genitore, ma il newState non è definito al momento in quanto questo sarà lo stato ytp quando l'evento si innesca. –
Dovrebbe funzionare ... Hai provato l'ultima versione che ho postato (ho modificato il codice subito dopo la pubblicazione). – bfavaretto
Quando richiamo la fabbrica su una modifica di stato, ciò comporterà molte funzioni, ma nessuna viene attivata. Il callback deve essere un nome di funzione e una funzione con questo nome deve essere creata automaticamente. Altrimenti il trigger non funzionerà come ho fatto per giorni. Testato, non funziona. Ora sto testando sth. in quella direzione –