david: Popups öffnen und schließen

Hallo

Ich möchte Popups über einen Link öffnen, im Moment benutze ich folgende Funktion:

function popup(link,name,attr) {
newWindow = window.open(link,name,attr)
}

und den Link:

<a href="javascript:popup('ziel.html', 'popup', 'toolbar=no,scrollbars=no,width=800,height=400')">

So muss ich aber jedesmal die ganzen Attribute (toolbar, scrollbars usw.) eingeben ich möchte aber auch nicht für jedes Popup eine andere Funktion verwenden.
Am liebsten wäre es mir, wenn der link in etwa so aussehen würde:
<a href="javascript:popup('ziel.html', 'popup', '800','400')">
und ich eine Funktion hätte, die das selbe bewirkt, ist das möglich und wenn wie?

Es wäre auch gut, wenn sich das Popupfenster automatisch schließen würde, wenn ich die Seite von der ich es aufgerufen habe verlasse.
Ist das möglich?

Vielen Dank

  1. Hi,

    function popup(link,name,attr) {
    newWindow = window.open(link,name,attr)
    }

    hmm - bringt nicht soo viel, wenn man sich's mal genau anschaut. afaik wird newWindow auch wenn es einem Fenster-Handle zugeordnet ist, nach Beendigung der Funktion gelöscht - was dazu führen würde, dass diese Funktion absolut nix bringt. Ändert man sie aber zu dem, was du willst, bringt sie plötzlich wieder was ;-)

    So muss ich aber jedesmal die ganzen Attribute (toolbar, scrollbars usw.) eingeben ich möchte aber auch nicht für jedes Popup eine andere Funktion verwenden.

    ....andere funktion verwenden? Brauchst du doch gar nicht...!? *verwirrt*

    Am liebsten wäre es mir, wenn der link in etwa so aussehen würde:
    <a href="javascript:popup('ziel.html', 'popup', '800','400')">
    und ich eine Funktion hätte, die das selbe bewirkt, ist das möglich und wenn wie?

    natürlich ist das möglich! Dir sollte klar sein, dass du mit dem Operator "+" mehrere Strings zusammenhängen kannst! Also, so würde

    alert("ich"+"bin"+"dumm");

    "ichbindumm" in einem alert-fenster ausgeben. So kannst du also ganz einfach deine funktion popup so umändern:

    function popup(link, name, breite, hoehe) {
      window.open(link, name, "width="+breite+",hoehe="+hoehe);
    }

    Ich habe hier mal das zuweisen des Fensters einer Variable weggelassen, da es unnötig ist. Wie du siehst, wird der dritte parameter der methode open() "zusammengeschnitten":

    "width=" + breite + ",hoehe=" + hoehe

    [die leerzeichen zwischen + und string sind hierbei fakultativ]
    Hierbei könnte am ende dann rauskommen:

    width=215,height=535

    und genausowas würde open() auch erwarten. So kannst du deinen Funktinosaufruf nun so gesatalten:

    popup("http://www.da.de", "das-da-fenster", 200, 300);

    Dies gibt also bei mir z.B. ein fenster mit 200px breite und 300px höhe. Die Zahlen als String hinzuschreiben, ist eigentlich nicht notwendig, da JavaScript mit dem "+"-Operator den Interger zu einem String umwandelt, da es erkennt, dass du einen string nicht mit einem interger addieren kannst.

    Es wäre auch gut, wenn sich das Popupfenster automatisch schließen würde, wenn ich die Seite von der ich es aufgerufen habe verlasse.
    Ist das möglich?

    Ja, sogar leichter, als du dir jetzt vostellen magst. Du musst im dritten Parameter lediglich "dependent=yes" (Abhängig vom elternfenster = Ja) hinschreiben, dann wird's automatisch geschlossen, wenn das elternfenster sich schließt. Toll, was?

    WauWau

    --
    Wau - hier ist mein Selfcode:
    ss:) zu:) ls:< fo:~ de:] va:) ch:° n4:# rl:( br:< js:| ie:% fl:| mo:|
    [mein alter sah optisch irgendwie besser aus ;-)]
    1. Hi,

      function popup(link,name,attr) {
      newWindow = window.open(link,name,attr)
      }

      hmm - bringt nicht soo viel, wenn man sich's mal genau anschaut. afaik wird newWindow auch wenn es einem Fenster-Handle zugeordnet ist, nach Beendigung der Funktion gelöscht - was dazu führen würde, dass diese Funktion absolut nix bringt. Ändert man sie aber zu dem, was du willst, bringt sie plötzlich wieder was ;-)

      So muss ich aber jedesmal die ganzen Attribute (toolbar, scrollbars usw.) eingeben ich möchte aber auch nicht für jedes Popup eine andere Funktion verwenden.

      ....andere funktion verwenden? Brauchst du doch gar nicht...!? *verwirrt*

      Am liebsten wäre es mir, wenn der link in etwa so aussehen würde:
      <a href="javascript:popup('ziel.html', 'popup', '800','400')">
      und ich eine Funktion hätte, die das selbe bewirkt, ist das möglich und wenn wie?

      natürlich ist das möglich! Dir sollte klar sein, dass du mit dem Operator "+" mehrere Strings zusammenhängen kannst! Also, so würde

      alert("ich"+"bin"+"dumm");

      "ichbindumm" in einem alert-fenster ausgeben. So kannst du also ganz einfach deine funktion popup so umändern:

      function popup(link, name, breite, hoehe) {
        window.open(link, name, "width="+breite+",hoehe="+hoehe);
      }

      Ich habe hier mal das zuweisen des Fensters einer Variable weggelassen, da es unnötig ist. Wie du siehst, wird der dritte parameter der methode open() "zusammengeschnitten":

      "width=" + breite + ",hoehe=" + hoehe

      [die leerzeichen zwischen + und string sind hierbei fakultativ]
      Hierbei könnte am ende dann rauskommen:

      width=215,height=535

      und genausowas würde open() auch erwarten. So kannst du deinen Funktinosaufruf nun so gesatalten:

      popup("http://www.da.de", "das-da-fenster", 200, 300);

      Dies gibt also bei mir z.B. ein fenster mit 200px breite und 300px höhe. Die Zahlen als String hinzuschreiben, ist eigentlich nicht notwendig, da JavaScript mit dem "+"-Operator den Interger zu einem String umwandelt, da es erkennt, dass du einen string nicht mit einem interger addieren kannst.

      Vielen Dank, genau das, was ich gesucht hab.

      Es wäre auch gut, wenn sich das Popupfenster automatisch schließen würde, wenn ich die Seite von der ich es aufgerufen habe verlasse.
      Ist das möglich?

      Ja, sogar leichter, als du dir jetzt vostellen magst. Du musst im dritten Parameter lediglich "dependent=yes" (Abhängig vom elternfenster = Ja) hinschreiben, dann wird's automatisch geschlossen, wenn das elternfenster sich schließt. Toll, was?

      Bei mir schließt sich das Fenster nicht (verwende Mozilla - ob es daran liegt?)

      WauWau

      1. Hallo david,

        "dependent=yes"

        Bei mir schließt sich das Fenster nicht (verwende Mozilla - ob es daran liegt?)

        kenn ich auch nicht. vielleicht so'n IE-Spcial. Aber es gibt den body-handler "onunload" (beim Verlassen der Seite). Mit dem kannst Du dann eine Funktion aufrufen, die das Fenster schließt.

        Gruß, Andreas

        --
        <img src="http://was-ist-das.andreas-lindig.de/was_ist_das_fetzen.jpg" border="0" alt="">
        http://was-ist-das.andreas-lindig.de
        1. Hallo david, hallo andreas,

          "dependent=yes"

          Bei mir schließt sich das Fenster nicht (verwende Mozilla - ob es daran liegt?)
          kenn ich auch nicht. vielleicht so'n IE-Spcial. Aber es gibt den body-handler "onunload" (beim Verlassen der Seite). Mit dem kannst Du dann eine Funktion aufrufen, die das Fenster schließt.

          Also bitte - ich poste doch nicht bescheuerte IE-Specials!!!!

          Natürlich ist es keins, und das kann ich sogar mit einem Link auf SelfHTML, wo es in einer Tabelle steht, beweisen:
          http://www.selfhtml.teamone.de/javascript/objekte/window.htm#open

          Aber ich erkenne auch gerade, dass dort steht, nur NS4 würde diese Technik beherrschen. Hmm - dachte zwar, meine Operianer und mein IE hätten das auch mal gekonnt, aber egal ;-)

          Nun, klar, mit dem event-handler "onUnload" kannst du dir da was nettes bauen. Kleines Beispiel (ich verwende nur die tags ohne irgendwelchen attributen und sonstigem schnickschnack, um es halt kurzzuhalten)

          <head>
          <script>
          var meinfenster = false; // Variable im globalen Bereich erstellen...

          function popup(link, name, breite, hoehe) {
            meinfenster = window.open(link, name, "width="+breite+",hoehe="+hoehe);
            meinfenster.focus();
          }

          function CloseMyWindow() {
            if(meinfenster) {
              if(!meinfenster.closed)
                 meinfenster.close(); // ...damit sie auch hier verwendet werden kannn :-)
             }
          }
          </script>
          </head>
          <body onUnload="CloseMyWindow();">
          ...

          Die Funktion CloseMyWindow() prüft hierbei, ob überhaupt der Variable meinfenster was zugewiesen wurde, und wenn, dann prüft sie, ob das ihr zugewiesene fenster bereits geschlossen ist, und wenn nicht, _dann_ schließt sie es.

          ! Achtung: onUnload trifft beim Verlassen der Seite ein, dass kann
             auch ein wechseln zu einer anderen adresse sein, muss also nicht
             fenster schließen sein.
           ! Bei mir funzt onUnload nicht im Opera7 :-/

          WauWau

          --
          Wau - hier ist mein Selfcode:
          ss:) zu:) ls:< fo:~ de:] va:) ch:° n4:# rl:( br:< js:| ie:% fl:| mo:|
          [mein alter sah optisch irgendwie besser aus ;-)]
          1. Wie haben das so gelernt :
            <body onunload="newWindow.close()">

            1. Hallo,

              Wie haben das so gelernt :
              <body onunload="newWindow.close()">

              dann habt Ihr vielleicht nicht gelernt, daß man im event-Handler auch selbstdefinierte Funktionen aufrufen kann.

              Gruß, Andreas

              --
              <img src="http://was-ist-das.andreas-lindig.de/was_ist_das_fetzen.jpg" border="0" alt="">
              http://was-ist-das.andreas-lindig.de
              1. Ho, hoooo !!  :o))
                [ROTFL]

                1. Ho, hoooo !!  :o))
                  [ROTFL]

                  darf ich mitlachen?

                  Gruß, Andreas

                  --
                  <img src="http://was-ist-das.andreas-lindig.de/was_ist_das_fetzen.jpg" border="0" alt="">
                  http://was-ist-das.andreas-lindig.de
          2. Hallo,

            Aber ich erkenne auch gerade, dass dort steht, nur NS4 würde diese Technik beherrschen.

            vielleicht nicht gerade der Referenz-Brausi ;)

            ! Bei mir funzt onUnload nicht im Opera7 :-/

            ebenfalls nicht satisfactionsfähig ;)

            Gruß, Andreas

            --
            <img src="http://was-ist-das.andreas-lindig.de/was_ist_das_fetzen.jpg" border="0" alt="">
            http://was-ist-das.andreas-lindig.de
  2. Mal abgesehen davon, dass Popups nicht mehr sonderlich beliebt sind, ist der Aufruf so nicht sonderlich klug, falls du auch sicherheitsbewußte Internetsurfer erreichen willst

    <a href="javascript:popup('ziel.html', 'popup', 'toolbar=no,scrollbars=no,width=800,height=400')">

    Mach das besser so:

    <a href="ziel.html"
    onclick="popup(this.href, 'popup', 'toolbar=no,scrollbars=no,width=800,height=400');return false;">

    Struppi.