window.open - Problem

<A HREF="#\" onClick=\"java script:window.open('show_thing.php? id=$row[id]','Anzeige','width=310,height=200,left=300,top=200,menubar=no,location=no,scrollbars=no')\">$row[name]</A>
...ist großer Mist...

Eine javascript:-URL in einen EventHandler wie onClick aufzunehmen hat keinen Sinn, da in den Handler eh nur JavaScript-Anweisungen gehören, nichts anderes.

Desweiteren dürftest du Usern, die per Rechtsklick und "Link in neuem Fenster öffnen" versuchen, die Seite in einem eigenständigen Fenster zu betrachten, sie per Link zu bookmarken oder zu drucken, keinen großen Gefallen tun, wie du im Selbstversuch merken wirst...

Den Link besser so getalten:
PHP:
<a href="show_thing.php" onClick="window.open(this.href,'Anzeige','width=310,height=200,left=300,top=200,menubar=no,location=no,scrollbars=no'); return false;">text</a>
Bezieht sich jetzt aber auf non-PHP-Code, denn in PHP weiß ich nicht genau was wo maskiert werden muss und wie dynamische Variablen angehängt in dem Beispiel hier angehängt werden können...

Dein ursprüngliches Problem dürfte sich darauf bezogen haben, dass die window.open()-Methode einen Rückgabewert an die JavaScript-Engine gibt, welcher in einer Referenz zum window-Objekt des neuen Browserfensters besteht - von daher bei solchen Geschichten aufpassen...

hth,
Geist
 
Zuletzt bearbeitet:
Bei PHP ist das Escapen von bestimten Zeichen fast wie in JS.
Wenn man zb. eine Echo-Anweisung mit "" startet darf diese Zeichen nicht im Code selber auftauchen.
Variablen und Strings werden mit einem Punkt verbunden,im Gegensatz zum Plus bei JS.
 
also bei mir gehst ohne probs
bookmarken wird niemand die seite, ist nur als kurtzansicht von einem gegenstand bei einem online game gedacht, da isses mit bookmarken quatsch

aber trotzdem thx für den weiteren punkt, werde ich event. mal wann anders brauchen :-)
 
Auch wenn das Bookmarken wahrscheinlich nicht eintreten wird, dann merk' dir bitte trotzdem die Variante für sonstige Pop-Ups, weil damit der größte Teil von Quatsch mit der window.open() im onClick-Handler vermiedet wird. :)

Geist
 
Original geschrieben von Geist
Auch wenn das Bookmarken wahrscheinlich nicht eintreten wird, dann merk' dir bitte trotzdem die Variante für sonstige Pop-Ups, weil damit der größte Teil von Quatsch mit der window.open() im onClick-Handler vermiedet wird. :)

Geist

ey, hast du was gegen meine lösung? :)

langsam glaub ich du kritisierst mich absichtlich, geist! h3h3

mal so ne kleine grundlegende frage zu JS (habs nie richtig versucht zu lernen, und kenn mich deshalb eherw eniger aus!):

manchmal funzt es, dass ich JS-Code direkt hinter HREF setze, manchmal muss ich ein javascript: davor setzen, und manche scripts funktionieren blos, wenn ich sie bei onClick reinsetze.
hat das irgendwelche gründe? :)

sollte die lösung hier wo stehen und ich hab sie üerblesen, "steinigt" mich bitte mit wattebällchen! ;)
 
Jesus, glaub' mir, dass ich garantiert keine Hetzjagd auf dich am Laufen habe. :)

Zu deiner Sache mit dem Formular poste ich nachher nochmal was, ist mir jetzt um eine Sache klarer geworden...

Was die open()-Methode des window-Objektes betrifft - warum sowas in Links besser in der Form geschrieben werden sollte, wie ich sie hier wiedergegeben habe, steht im ersten Posting von mir dazu - diverse Gründe, die eigentlich einleuchten dürften. :)

Zu deiner Frage, was das Einfügen von JavaScript-Anweisungen in HTML-Code betrifft:
Es gibt diverse Möglichkeiten, JavaScript-Code funktionabel irgendwo zwischen HTML-Sourcecode zu packen - folgend:
  • zwischen <script> und </script>, logisch
  • externe *.js-Datei, die per <script src="..."></script> mit evtl. zusätzlichem archive-Attribut (und bitte nie vergessen, auch hier den Container-Tag per </script> zu schließen!)
  • innerhalb von EventHandlern, die als Attribute für HTML-Elemente verwendet werden können, bspw. eben onClick oder onMouseOver
  • in einer URL, der das spezielle javascript: -Pseudoprotokoll vorangestellt wird
  • zwischen <style type="text/javascript"></style> in Form von JSS-Anweisungen
  • in Form einer JavaScript-Einheit, die aber nur als Wertangabe für HTML-Attribute genutzt werden kann (durch &{ ... };-Syntax)
  • bei konditionalen Kommentaren, die aber nicht alle Browser richtig interpretieren
Falls zu irgend einer von diesen Möglichkeiten Fragen bei jemandem bestehen, melde er sich in diesem Thread oder schweige für immer. ;)

Speziell was deine Frage betrifft, Jesus, sollte kurz die Sache mit den Handlern und der javascript: -URL angesprochen werden:

1) EventHandler:
EventHandler können innerhalb von HTML-Code ganz normal als Attribute für ein beliebiges Element angegeben werden, wie es bei den meisten von euch sicherlich auch der Usus ist, einfaches Beispiel:
PHP:
<body onLoad="alert('Ich bin ein Text, der erscheint, wenn das Dokument geladen wurde.');">
Wie hieraus ersichtlich wird, verlangt so eine EventHandler-als-Attribut-Schreibweise folgende Gliederung:
  1. Name des EventHandlers
  2. =
  3. Hochstriche (egal ob Anführungszeichen oder Hochkommas, sollte sich nach Umgebung richten)
  4. innerhalb der Hochstriche bloße JavaScript-Anweisungen
  5. optionales Semikolon (jedoch nicht optional, wenn mehrere Anweisungen hintereinander)
Machen wir's nicht komplizierter als es ist ;) und sagen an dieser Stelle, dass EventHandler in dem Falle einfache Attribute sind, denen ein String zugewiesen wird, der nur JavaScript-Anweisungen beinhaltet.

2) javascript: -URLs:
Dieses Pseudoprotokoll kann in einer URL beliebigen JavaScript-Code mit dem JavaScript-Interpreter ausführen lassen.
Auch hier gilt:
Wenn mehrere Anweisungen gegeben werden, dann ist Trennung durch Semikolons obligatorisch!

Findet eben hauptsächlich Einsatz im href-Attribut eines Link-Elements, bspw.:
PHP:
<a href="javascript:alert('Toll gemacht...')">Link</a>
Falls ein Rückgabewert in den JavaScript-Anweisungen gegeben wird, dann führt dieser Rückgabewert automatisch zum Wechsel des derzeitigen Dokumentes hin zum Rückgabewert - und genau das ist der Grund, warum sich viele oft wundern, dass bei PopUp-Links zwar ein PopUp geöffnet wird, aber auch das öffnende Dokument verschwindet und stattdessen ein [object] im Browserfenster erscheint.
Denn in diesem Falle liefert die window.open()-Methode einen Rückgabewert, der aus einer Referenz zum window-Objekt des neuen geöffneten Fensters besteht; dieser Rückgabewert wird dann von der Engine zum neuen Dokument für den Link, denn dieser ist ja eigentlich dazu da, um Dokumente in einem Browserfenster darzustellen.

Entweder muss in dem Fall dann darauf geachtet werden, dass *keine* der JavaScript-Anweisungen von sich aus einen Rückgabewert liefert, oder dass der Rückgabewert einen Wert annimmt, der nicht beim Seitenwechsel weiterverarbeitet werden könnte, bspw. der boolesche Wert false oder das Schlüsselwort undefined.

Das href-Attribut eines Links mit JavaScript-Anweisungen zu belegen, *ohne* mit javascript: - eindeutig folgenden JavaScript-Code einzuleiten, ist jedenfalls nicht zulässig und erzeugt Invalidität des Codes. (Toolkit hat also Recht)

Entweder in solchen Fällen als ein href mit javascript: -URL oder einen EventHandler nutzen - bei beidem ist jedoch darauf zu achten, dass evtl. Rückgabewerte der letzten JavaScript-Anweisung erfolgen und den Browser dazu führen können, das derzeitige Dokument ungewollt zu ändern.

Ich hoffe, das hier war verständlich geschrieben und die Schreibzeit hat sich gelohnt, wenn Fragen hierzu bestehen: bin gerne bereit, weitere Ausführungen dazu vorzunehmen...
Ich weiß, dass einige Wiederholungen vom Inhalt her drin waren, aber wollte das in dem Fall nicht umgehen, denn Fragen zu dem Thema kommen verdammt oft. :)

hth,
Geist

edit: "javascript:" bitte in Fällen, wo es auseinandergeschrieben wurde, als ganzen Term sehen, das trennt der Parser hier ja...
 
Zuletzt bearbeitet:
Zurück