• Hallo Besucher!

    Du bist neu im Forum? Dann registriere dich hier, um Diskussionen beizutreten oder eigene Themen zu erstellen. Für die Registrierung ist es erforderlich, dass du einen Spielaccount bei Die Stämme hast.

    Andernfalls kannst du dich hier direkt einloggen.

    Falls du dein Passwort vergessen hast, kannst du hier ein neues Passwort anfordern.

Das 'unsafeWindow'-Problem

DeletedUser

Gast
So Leute, ich hatte jetzt selbst etwas mit dem öseligen 'unsafeWindow' zu kämpfen. Im Forum hier fand ich nichts dazu, also dachte ich ich schreib einfach was dazu!
Anfürsich ist 'unsafeWindow' eine tolle Sache, allerdings gehen weder 'GM_...'-Funktionen noch mag Opera dieses Objekt.

Um das nun zu umgehen, kann man folgendes machen, man verwendet die Funktion 'addEventListener(<action>,<function>)' mit einem kleinen Trick.
Hier mal ein Beispiel:
Code:
function foo(){
	alert('Hallo Welt');
}

//Sobald ein bestimmter Link angeklickt, wird soll 'foo' aktiviert werden.
<a-Element>.addEventListener('click', foo, false);

//Sobald ein bestimmter Link angeklickt, wird soll 'foo' mit Parametern aktiviert werden.
<a-Element>.addEventListener('click' , function(param1){foo(param1,param2);} , false);

//Für den InternetExplorer, der da wieder aus der Reihe tanzt:
<a-Element>.attachEvent('onclick' , foo );

//Für den InternetExplorer (mit Parametern), der da wieder aus der Reihe tanzt:
<a-Element>.attachEvent('onclick' , function(param1){foo(param1,param2);} );

Wie man sehen kann wird um die eingentliche Funktion 'foo' die wir ja aufrufen wollen, noch eine andere Funktion ohne Namen gelegt. Das hat den Grund das sonst die Funktion 'foo' direkt beim laden des Scriptes aufgerufen werden würde und 'addEventListener' würde einen falschen Parameter bekommen. Deswegen sollte man um die gewollte Funktion noch eine namenlose Funktion legen. Ein anderer Grund ist das ich ja vielleicht auch Parameter mit übergeben möchte!

Und schwupps können 'GM_...'-Funktionen benutzt werden und Opera freut sich auch.
 
Zuletzt bearbeitet von einem Moderator:

DeletedUser61033

Gast
ich check zwar nicht so ganz, warum du nicht einfach document.addEventListener('click', foo, false); machst, aber schön und gut :D
Die Methode mit der anonymen Funktion benutz ich immer, um der aufgerufenen Funktion noch Parameter mitzugeben :p

Code:
document.addEventListener('click', function(e){foo(e, param2);}, false);


mfg
Heinzel
 

DeletedUser

Gast
Joa, ich bin beim Schreiben quasi davon ausgegangen, dass die Leute den Funktionen Parameter mit übergeben möchten :cool:
Ich kann das mit ohne Parametern ja mal dazu packen :)
 

DeletedUser

Gast
Wollte der Vollständigkeit halber nur noch hinzufügen, dass es wie z.B. hier reichen kann 'unsafeWindow' durch
HTML:
(typeof unsafeWindow != 'undefined' ? unsafeWindow : window)
zu ersetzen, das versteht dann auch Opera.
 
Oben