Einzelnen Beitrag anzeigen
  #1 (permalink)  
Alt 21.02.2011, 08:43
sepp88 sepp88 ist offline
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 30.07.2009
Beiträge: 469
sepp88 befindet sich auf einem aufstrebenden Ast
Standard Javascript: generierte Funktionen im globalen Namespace?

Hallo Leute,
ich bin kein Proficoder und mir wurde vor einiger Zeit bei einer (für mich) ziemlich kniffligen Frage weitergeholfen.

Ich habe mehrere dynamisch generierte (über PHP) YoutubePlayer auf meiner Seite. Alle will ich mit der YoutubePlayer Javascript API steuern. Das funktioniert mittlerweile super, da mir eben geholfen wurde.

Die Erklärung lautete, dass für jeden Player eine eigene onStateChange Funktion generiert wird (im globalen Namespace, oder so .

PHP-Code:
function onYouTubePlayerReady() {
    ...
            
generateFuncidxthis );
    ...
    }
};

function 
generateFuncidxplayer ) {
    var 
fnName "state_change_" idx;
    
windowfnName ] = function( status ) {
        
playerStateChangestatusplayer );
    };

    
player.addEventListener("onStateChange"fnName);
}

function 
playerStateChangestatusplayer ) {
... 
Es klappt jedenfalls wunderbar, ich kann alle Youtubevideos über Javascript steuern und das ist was ich wollte.

Jetzt würde ich nur noch gerne eine kleine Erweiterung einbauen und zwar gibt es nicht nur einen "onStateChange" Event auf den man lauschen kann, sondern auch einen "onError" Event, der gefeuert wird, wenn ein Fehler mit einem Video auftritt.

Jetzt ist meine Frage, wie ich noch zusätzlich auf folgendes verwirkliche:

PHP-Code:
player.addEventListener("onError"fnName); 
Wo muss diese Zeile hin? Kann ich diese einfach innerhalb von generateFunc() hinzufügen? Oder muss ich eine komplett neue generateFunc() Funktion für diesen Event deklarieren? Oder muss ich innerhalb der bereits bestehenden generateFunc() wieder eine neue variable mit var fnName2 = "on_error_" + idx; und wieder im Namespace definieren?

Ich weiß einfach nicht ob ich Teile meines Codes wiederholen muss, oder wie das am einfachsten zu lösen ist?

Danke für die Hilfe.
Mit Zitat antworten
Sponsored Links