zurück zur Startseite
  


Zurück XHTMLforum > Webentwicklung (außer XHTML und CSS) > Javascript & Ajax
Seite neu laden Javascript: generierte Funktionen im globalen Namespace?

Antwort
 
LinkBack Themen-Optionen Ansicht
  #1 (permalink)  
Alt 21.02.2011, 08:43
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
  #2 (permalink)  
Alt 21.02.2011, 12:36
Benutzerbild von protonenbeschleuniger
Verbesserer
XHTMLforum-Kenner
 
Registriert seit: 06.09.2007
Beiträge: 4.977
protonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblick
Standard

Eine globale Funktion ist hier keineswegs nötig, da wurde dir etwas falsches erzählt. Du kannst hier eine anonyme Funktion einsetzen, wie auch bei dem onError Event.


Code:
player.addEventListener("onStateChange",   function( status ) {
    playerStateChange( status, this);
}
);
Mit Zitat antworten
Sponsored Links
  #3 (permalink)  
Alt 21.02.2011, 13:21
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 30.07.2009
Beiträge: 469
sepp88 befindet sich auf einem aufstrebenden Ast
Standard

Danke für die schnelle Antwort.
Also dein Code müsste dann in der youtubePlayerReady() Funktion drin stehen, oder?

Nur nochmal als Übersicht, das wäre mein ganzer (derzeitiger) Code. Bist du dir sicher, dass ich die globale Funktion nicht brauche?

PHP-Code:
function onYouTubePlayerReady() {
    
currentLoaded++;
    if( 
currentLoaded == totalQuantity ) {
        
allPlayers.each(function( idx ) {
            
generateFuncidxthis );
            
this.unMute();            
        });
    }
};

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

    
player.addEventListener("onStateChange"fnName);
}

function 
playerStateChangestatusplayer ) {
    
    ...


Geändert von sepp88 (21.02.2011 um 15:42 Uhr)
Mit Zitat antworten
  #4 (permalink)  
Alt 21.02.2011, 13:43
Benutzerbild von protonenbeschleuniger
Verbesserer
XHTMLforum-Kenner
 
Registriert seit: 06.09.2007
Beiträge: 4.977
protonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblick
Standard

zweimal Ja.
Mit Zitat antworten
  #5 (permalink)  
Alt 21.02.2011, 14:36
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 30.07.2009
Beiträge: 469
sepp88 befindet sich auf einem aufstrebenden Ast
Standard

Danke, aber Nein, das funktioniert leider nicht. Sobald ich die generateFunc() weggebe und die deine Zeile innerhalb der onYoutubePlayerReady Funktion schreibe, funktioniert das automatische steuern der Videos nicht mehr. Z.b. wenn ein Video fertig ist soll automatisch das nächste gespielt werden. Das funktioniert nur mit generateFunc().

PHP-Code:
function generateFuncidxplayer ) {
    
    var 
statechange "state_change_" idx;
    var 
onerror "on_error_" idx;
    
    
windowstatechange ] = function( status ) {
        
playerStateChangestatusplayer );
    };
    
    
windowonerror ] = function( error ) {
        
playerOnErrorerrorplayer );
    };

    
player.addEventListener("onStateChange"statechange);
    
player.addEventListener("onError"onerror);

So funktioniert alles wunderbar. Ist das korrekt so wie ich das mache?
Mit Zitat antworten
  #6 (permalink)  
Alt 21.02.2011, 15:16
Benutzerbild von protonenbeschleuniger
Verbesserer
XHTMLforum-Kenner
 
Registriert seit: 06.09.2007
Beiträge: 4.977
protonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblick
Standard

Mit dem Code, den du geziegt hast, sollte das ohne Probleme funktionieren.

PHP-Code:
function generateFuncidxplayer ) {
    


    
player.addEventListener("onStateChange", function(status){
        
playerStateChangestatusthis );
    } );
    
player.addEventListener("onError", function( error ) {
        
playerOnErrorerrorthis );
    }
);

Das geht aber nur, wenn die addEventListener Funktionen korrekt umgesetzt sind und innerhalb des Eventhandlers this auch auf das player Objekt zeigt.

Geändert von protonenbeschleuniger (21.02.2011 um 15:20 Uhr)
Mit Zitat antworten
  #7 (permalink)  
Alt 21.02.2011, 15:35
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 30.07.2009
Beiträge: 469
sepp88 befindet sich auf einem aufstrebenden Ast
Standard

Danke, aber nein leider, das funktioniert nicht. Das klappt nur mit der Version die ich eben gepostet habe. Aber solange meine Version funktioniert bin ich schon zufrieden, ich wollte nur wissen, ob das so in Ordnung ist wie ich das geschrieben habe, oder ob ich da technisch gesehen einen Fehler mache.

Geändert von sepp88 (21.02.2011 um 17:43 Uhr)
Mit Zitat antworten
  #8 (permalink)  
Alt 22.02.2011, 12:43
Benutzerbild von protonenbeschleuniger
Verbesserer
XHTMLforum-Kenner
 
Registriert seit: 06.09.2007
Beiträge: 4.977
protonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblick
Standard

Wie gesagt das muss funktioneren, wenn es bei dir nicht tut, dann liegt das an dem Code den du uns nicht gezeigt hast oder du hast einen Fehler eingebaut (der in der Fehlerkonsole angezeigt wird)

Technisch gesehen hast du unötige globale Funktionen. Ob du einen Fehler gemacht hast, läßt sich natürlich nicht sagen ohne den kompletten Code zu kennen.
Mit Zitat antworten
Antwort


Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Wort in Javascript Code einfügen; dann Javascript Code ausgeben Sp33dy G0nz4l3s Javascript & Ajax 1 23.05.2008 09:37
Impressumsaufruf mit Javascript Sinclair Javascript & Ajax 6 19.05.2008 15:41
Barrierefreiheit und Textarea-Editor kratzbaum Barrierefreiheit 18 07.03.2007 18:37
Bilder durch JavaScript laden Stalafin Javascript & Ajax 1 06.10.2006 11:17


Alle Zeitangaben in WEZ +2. Es ist jetzt 15:32 Uhr.