javascript:window.open

BieneMaja

Grünschnabel
Hallo zusammen,

ich habe auf einer Schaltfläche folgendes Script:

Code:
on (press) {
	getURL("javascript:window.open('inflows.swf', 'film', 
'status=no,toolbar=no,menubar=no,location=no,resizable=no,
titlebar=no,scrollbars=no,fullscreen=no');");
}

Daraufhin öffnet sich das neue Fenster wie beabsichtigt, aber leider auch ein WEITERES mit "[object]".
Wirkt nicht gerade fett professionell...
Kann ich das irgendwie vermeiden??? ... oder es sich wieder schliessen lassen (mit opener.close, oder sowas)???

Wäre für eine schnelle Hilfe echt dankbar!
Biene Maja

Nachtrag:
Habe erst gerade festgestellt, dass KEIN weiteres Fenster mit "[object]" geöffnet wird, sondern dass es das Hauptfenster ist... noch schlimmer! Brauche dringend Hilfe!
 
Zuletzt bearbeitet:
Joa, wichtig ist hier die Relevanz von Rückgabewerten zu berücksichtigen.

Die JavaScript-Methode window.open() gibt nämlich als Rückgabewert an die ActionScript-Engine eine Referenz auf das window-Objekt desjenigen Fensters, welches über die Methode selbst geöffnet wurde.

Dieser Referenz in Form eines Rückgabewertes ist nun aber nicht das Endglied der Kette von Anweisungen, sondern da die JavaScript-Anweisung innerhalb einer getURL()-Anweisung steht, werden nun als nächstes die Argumente für diese Methode geprüft - und genau dazu zählt eben diese Referenz, die die ActionScript-Engine mit auf den Weg bekommen hat.

Mit einem Methodenaufruf á la:
PHP:
getURL(referenzobjekt);
bezweckt der Player aber nichts weiter, als dass dem umgebenden window-OBjekt mitgeteilt wird, dass seine URL sich nach "referenzobjekt" ändern soll - dieses stellt aber keine gültige URL dar, sondern lediglich eine Verknüpfung auf ein anderes Fensterobjekt - und nichts weiter besagt eben deine Anzeige "[object]" in der Adressleiste des Browsers.

Umgehen kannst du die ganze Geschichte, indem du eben der Methode getURL() eben _keinen_ Rückgabewert lieferst, sondern bspw. ein undefined, denn damit würde kein Wechsel der URL erfolgen.

Wie in JavaScript kann das leider nicht über ein "return false" geschehen, welches den Rückgabewert false liefern würde, sondern muss tatsächlich über eine Wandlung nach undefined geschehen.

Dies ist relativ aufwandslos möglich, indem du das Meta-Schlüsselwort void() verwendest, welches zwar die innerhalb seiner Klammern aufgeführten Anweisungen evaluiert, jedoch in jedem Falle nur einen undefined-Rückgabewert liefert.

Also ein einfaches "void(0)" als zusätzliche Anweisung für die JavaScript-Engine gibt bspw. an, dass als letzte Anweisung eben diese ausgeführt wird - und die letzte Anweisung einer Anweisungsfolge gibt den Rückgabewert des Blocks an - in diesem Falle dann eben undefined.

Die JavaScript-Erklärung hierfür findet man in anderer Form nochmal hier:

http://www.tutorials.de/forum/showthread.php?postid=288275

hth und Gruß,
Geist
 
Zurück