Oli: Popups

Hi,

ich will ein Popup mit von mir vorgegebenen Ausmassen öffnen. Das regle ich über Javascript. Damit aber auch Besucher ohne Javascript das Popup zu sehen bekommen, nutze ich diese Lösung:

<a href="popup.html" target="_blank" onclick="fenster(this.href, 450, 450); return false">Popup</a>

Das zugehörige Javascript sieht so aus, also nichts Ungewöhnliches:

function fenster(url, breite, hoehe){
 fenster = window.open(url, "popup", "width="+breite+",height="+hoehe+",status=yes,scrollbars=yes,resizable=yes");
 fenster.focus();
}

Jetzt funktioniert das mit eingeschaltetem Javascript genau einmal, dass er mir die Seite mit meinen vordefinierten Grössenwerten öffnet. Schließe ich das Fenster aber und klicke den Link ein zweites Mal an, öffnet er ein normales Fenster, greift also auf das normale href und nicht mehr auf onclick zu. Erst wenn ich die Seite neu lade funktioniert es wieder - genau ein Mal. Wer kann sich da einen Reim drauf machen, warum das nicht immer tut?

  1. Hi,

    function fenster(url, breite, hoehe){
    fenster = window.open(url, "popup", "width="+breite+",height="+hoehe+",status=yes,scrollbars=yes,resizable=yes");

    Fällt dir an diesen beiden Zeilen irgendwas auf? Kleiner Tipp, es hat was mit Namen zu tun. Ich nehme an, der Browser überschreibt deine Funktion Fenster nach dem ersten Aufruf mit dem Ergebnis von window.open (oder versucht es zumindest), so dass nachfolgende Aufrufe fehlschlagen. Probier mal aus die Variable anders zu nennen.

    MfG
    Rouven

    --
    -------------------
    When the only tool you've got is a hammer, all problems start to look like nails.
    1. Lieber Rouven,

      function fenster(url, breite, hoehe){
      fenster = window.open(url, "popup", "width="+breite+",height="+hoehe+",status=yes,scrollbars=yes,resizable=yes");
      [...] Probier mal aus die Variable anders zu nennen.

      oder das Wörtchen "var" vor den Variablennamen setzen. Dadurch wird "fenster" innerhalb der Funktion "fenster" eine sogenannte lokale Variable, die nur innerhalb dieser Funktion existiert und somit selbige auch nicht überschreiben kann.

      var fenster = window.open(url, 'popup', 'blah');

      Es ist absolut sinnvoll und meines Wissens auch guter Programmierstil, wenn es geht _immer_ lokale Variablen zu verwenden, um eben solchen Konflikten (man denke nur an ein "Nebeneinander" verschiedener Scripte verschiedener Autoren) zu vermeiden.

      Ach ja: Popups könnten als böse empfunden werden - näheres im Archiv!

      Liebe Grüße aus Ellwangen,

      Felix Riesterer.

      1. Hi Felix,

        oder das Wörtchen "var" vor den Variablennamen setzen. Dadurch wird "fenster" innerhalb der Funktion "fenster" eine sogenannte lokale Variable, die nur innerhalb dieser Funktion existiert und somit selbige auch nicht überschreiben kann.

        ja, aber da hab ich eine abgrundtiefe Abneigung gegen, ich sag dir auch gerne warum: Es will einfach nicht in meinen Kopf, warum ich konträr zu z.B. PHP ein Schlüsselwort hinzufügen soll um meine Variable lokal zu halten. Das geht gegen meinen OO-Geist. Da ich jedesmal vergesse, ob var lokal oder eben global war lasse ich lieber die Finger davon.

        BTW: Was bewirkt ein var xyz im <head>? Ist das ein Sinnloskonstrukt?

        MfG
        Rouven

        --
        -------------------
        Buy when there's blood running in the street and sell when everyone is pounding at your door, clawing to own your equities  --  Wisdom on Wallstreet
        1. Hallo Rouven.

          Es will einfach nicht in meinen Kopf, warum ich konträr zu z.B. PHP ein Schlüsselwort hinzufügen soll um meine Variable lokal zu halten. Das geht gegen meinen OO-Geist.

          Du verwendest also weder public noch protected noch private?

          Einen schönen Samstag noch.

          Gruß, Ashura

          --
          sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
          „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
          [HTML Design Constraints: Logical Markup]
          1. Hello,

            Du verwendest also weder public noch protected noch private?

            ich entscheide mich bewusst für eine der drei Varianten aus dem Pflichtgefühl heraus es explizit angeben zu sollen - bei JavaScript fehlt das entsprechende Pendant für var (global o.ä.). Sollte ich keine Angabe wählen lande ich bei einem akzeptablen private/protected-Gemisch, habe aber keine Variable offen, d.h. wenn ich nichts mache, mache ich zumindest nichts falsch. In JavaScript hingegen mache ich was falsch (Verletzung der Kapselung) wenn ich nichts mache, das finde ich irgendwie vom Design der Sprache her unschön - nicht falsch, aber unschön.

            MfG
            Rouven

            --
            -------------------
            He is entertaining both out of the car and in the car because if you tell him that a corner is almost flat then he is the guy who is going to try to take it flat even if it means shunting it the other side of it, he will come with the data and say 'hey, I may have crashed and destroyed the car, but I was flat-out'. That is an interesting quality that he has!  --  Team Member on Jacques Villeneuve
            1. hi,

              Du verwendest also weder public noch protected noch private?
              ich entscheide mich bewusst für eine der drei Varianten aus dem Pflichtgefühl heraus es explizit angeben zu sollen - bei JavaScript fehlt das entsprechende Pendant für var (global o.ä.).

              Was haben public, protected oder private in PHP damit zu tun, ob eine Variable global ist?

              gruß,
              wahsaga

              --
              /voodoo.css:
              #GeorgeWBush { position:absolute; bottom:-6ft; }
        2. Hi,

          oder das Wörtchen "var" vor den Variablennamen setzen. Dadurch wird "fenster" innerhalb der Funktion "fenster" eine sogenannte lokale Variable, die nur innerhalb dieser Funktion existiert und somit selbige auch nicht überschreiben kann.
          ja, aber da hab ich eine abgrundtiefe Abneigung gegen, ich sag dir auch gerne warum: Es will einfach nicht in meinen Kopf, warum ich konträr zu z.B. PHP ein Schlüsselwort hinzufügen soll um meine Variable lokal zu halten.

          Du siehst das falsch. Es geht doch darum, Variablen überhaupt zu deklarieren. Ich empfinde es als Unsitte, dass dies in PHO nicht nötig ist und initialisiere sie zumindest ($variable = ...) - fände es aber angebrachter, wenn es auch in PHP dazu ein Schlüsselwort gäbe.

          Dennoch finde ich es auch bei Javascript nicht schön, dass Variablen innerhalb einer Funktion nicht deklariert werden müssen und dies dann als Anhaltspunkt für eine globale Gültigkeit gesehen wird.

          freundliche Grüße
          Ingo