martina: _blank - Grösse definieren

Hallo

Ich habe einen Link und öffne die neue Seite in einem neuen Fenster (target=_blank) das funktioniert auch. Nun möchte ich aber die Grösse des neuen Fensters definieren.. Wie muss ich nun vorgehen?

  1. Hi

    Wie muss ich nun vorgehen?

    Die benutzerfreundliche Lösung: du machst nichts

    Eine andere wäre mit Javascript und resizeTo(), allerdings werden dich viele Besucher dafür hassen.

    MfG
    Ole
    (8-)>

    --
    Trotz Equalizer und Compressor, der Sound wird matschig unn nett
    bässer!
    1. Hi!

      Die benutzerfreundliche Lösung: du machst nichts

      Schwachsinn. Am besten wäre es, auf neue Fenster zu verzichten.

      Ein resize ist auch unnötig. Man kann window.open() auch genug Argumente mitgeben, dass sich das Popup in der gewünschten Größe öffnet.

      Gute Lektüre hierzu: http://molily.de/javascript-popups

      Gruß aus Iserlohn

      Martin

      1. Hallo Martin

        Die benutzerfreundliche Lösung: du machst nichts
        Schwachsinn. Am besten wäre es, auf neue Fenster zu verzichten.
        Ein resize ist auch unnötig. [...]

        Du bist ja sehr nett heute morgen. Da das Fenster aber schon geöffnet wird, und zwar mittels eines normalen links welcher als target "_blank" hat, ist deine Antwort, um es mit deinen Worten auszudrücken "Schwachsinn".

        so long
        Ole
        (8-)>

        --
        Trotz Equalizer und Compressor, der Sound wird matschig unn nett
        bässer!
        1. Hi!

          Du bist ja sehr nett heute morgen.

          Sorry. Hab schlecht geschlafen und der Kopierer fährt seit ner Stunde durch meinen Schädel. Aber da kannst du nix für.

          Da das Fenster aber schon geöffnet wird, und zwar mittels eines normalen links welcher als target "_blank" hat, ist deine Antwort, um es mit deinen Worten auszudrücken "Schwachsinn".

          Auch dir sei eine Lektüre von molilys Artikel zu empfehlen. Stichwort <a href="http://www.example.org/" target="_blank" onclick="window.open(this.href, this.target, 'width=1, height=1'); return false;)">Link</a>

          Gruß aus Iserlohn

          Martin

        2. Du bist ja sehr nett heute morgen. Da das Fenster aber schon geöffnet wird, und zwar mittels eines normalen links welcher als target "_blank" hat, ist deine Antwort, um es mit deinen Worten auszudrücken "Schwachsinn".

          wobei man noch ergänzen sollte, dass jeder der regelmäßig im Internet surft wahrscheinlich froh ist, auch dieses Verhalten abschalten zu können und nicht seine ganze Taskleiste mit 45 Browserinstanzen voll klatschen lassen müssen.

          Und für DAUs ist es oft sehr kompliziert, dass man wenn man auf z.b. 'mehr Infos' klickt nicht mehr mit den Browserbutton zurück kommt.

          target=_blank ist Schwachsinn!

          Struppi.

          1. hi

            target=_blank ist Schwachsinn!

            auch ein ansatz :)...welchen ich gerne unterstüzte.
            btw. fällt target bei (X)HTML strict nicht sogar ganz weg?

            MfG
            Ole
            (8-)>

            --
            Trotz Equalizer und Compressor, der Sound wird matschig unn nett
            bässer!
            1. target=_blank ist Schwachsinn!

              auch ein ansatz :)...welchen ich gerne unterstüzte.
              btw. fällt target bei (X)HTML strict nicht sogar ganz weg?

              Jo, da gab's doch hier sicher auch schon lange lange Diskussionen drüber. Weil das doch den Webmeister so einschränkt.

              Struppi.

              1. Hi

                Jo, da gab's doch hier sicher auch schon lange lange Diskussionen drüber. Weil das doch den Webmeister so einschränkt.

                Recht hast du, ist zwar schon länger her, aber immer noch aktuell :)
                http://forum.de.selfhtml.org/archiv/2002/6/t15222/#m84903 ff.

                so long
                Ole
                (8-)>

                --
                Trotz Equalizer und Compressor, der Sound wird matschig unn nett
                bässer!
  2. Hi,

    Ich habe einen Link und öffne die neue Seite in einem neuen Fenster (target=_blank) das funktioniert auch. Nun möchte ich aber die Grösse des neuen Fensters definieren.. Wie muss ich nun vorgehen?

      
    <a target="_blank" href="neu.html" onClick="return !popup(this,300,200);">Neu</a>  
    
    

    Macht ein neues Fenster auf. Sofern JS vorhanden und Popups nicht geblockt werden, mit 300x200. Ist JS nicht vorhanden bzw. werden Popups geblockt, dann ist es mit der "gewünschten Größe" auch essig - es geht ein "normales" neues Fenster auf.

    popup():

      
    function popup(src,w,h,x,y) {  
     var options="", popupURL, popupName, popupWin;  
     if(typeof(x)=="number") options+=",left="+x;  
     if(typeof(y)=="number") options+=",top="+y;  
     if(typeof(w)=="number") options+=",width="+w;  
     if(typeof(h)=="number") options+=",height="+h;  
     lastParam=popup.arguments[popup.arguments.length-1];  
     if(typeof(lastParam)=="string") {  
      options+=","+lastParam;  
     } else {  
      if(typeof(lastParam)=="boolean" && lastParam) {  
       options+=",menubar=no"  
      } else if(typeof(lastParam)!="boolean" || (typeof(lastParam)!="boolean" && !lastParam)) {  
       options+=",menubar=yes,toolbar=yes,location=yes,status=yes,scrollbars=yes,resizable=yes";  
      }  
     }  
      
     if(options) { options=options.substring(1); }  
      
     if(typeof(src)=="object") {  
      popupURL=(src.href)?src.href:"about:blank";  
      popupName=(src.target)?src.target:"_blank";  
     } else if(typeof(src)=="string") {  
      popupURL=(src)?src:"about:blank";  
      popupName="_blank";  
     } else {  
      popupURL="about:blank";  
      popupName="_blank";  
     }  
      
     popupWin=window.open(popupURL,popupName,options);  
      
     if(popupWin && popupWin.focus && popupFocus) { popupWin.focus(); }  
      
     return popupWin;  
    }  
    
    

    Find jetzt auf die Schnelle nicht die kommentierte Version =;-), aber

    • src ist der neue URL oder ein A-Objekt (hier wichtig)
    • w, h, x, y die optionalen(!) Angaben bezügl. Breite, Höhe, X- und Y-Pos
    • ist der letzte übergebene Parameter ein String, so stehen in diesem die restlichen window.open-Parameter (Toolbar, etc.).

    Gruß, Cybaer

    --
    Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
    1. Hi,

      <a target="_blank" href="neu.html" onClick="return !popup(this,300,200);">Neu</a>

      warum negierst Du nicht einfach den Rückgabewert?  
      Und wo holst Du aus function popup(src,w,h,x,y) nur den lastParam her?  
        
      freundliche Grüße  
      Ingo
      
      -- 
      [[barrierefreie Webseitenerstellung](http://www.1ngo.de/web/) » [Suchmaschinenoptimierung](http://www.1ngo.de/web/seo.html) | [em?](http://www.1ngo.de/web/em.html)] ([Hommingberger Gepardenforelle](http://www.1ngo.de/hommingberger-gepardenforelle/);-)
      
      1. Hi,

        warum negierst Du nicht einfach den Rückgabewert?

        ? Genau das mache ich doch.

        Und wo holst Du aus function popup(src,w,h,x,y) nur den lastParam her?

        Überhaupt nicht. lastParam ist optional und immer der letzte *real* übergebene Parameter (hinter src natürlich ;-)). In JS können sowohl weniger, als auch mehr Parameter übergeben werden, als in der Funktion selbst definiert.

        popup(src,w,h,x,y,lastParam) wäre also gültig, ebenso wie popup(src,w,h,lastParam) ebenso wie popup(src,lastParam) oder popup(src)

        lastParam wird hier ermittelt:

          
        lastParam=popup.arguments[popup.arguments.length-1];  
        
        

        Gruß, Cybaer

        --
        Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
        1. Hi,

          warum negierst Du nicht einfach den Rückgabewert?

          ? Genau das mache ich doch.

          Ja, aber in jedem einzelnen HTML-Aufruf. Ich meinte in der Funktion, also return !popupWin;

          In JS können sowohl weniger, als auch mehr Parameter übergeben werden, als in der Funktion selbst definiert.

          oops, der zweite Fall war mir noch nicht untergekommen. Danke für die Aufklärung.

          freundliche Grüße
          Ingo

          1. Hi,

            Ja, aber in jedem einzelnen HTML-Aufruf. Ich meinte in der Funktion, also return !popupWin;

            Das wäre kontraproduktiv! popup() gibt im (erwarteten) Erfolgsfall ja *nicht* true sondern das neue Fensterobjekt zurück. Und das wird ja ggf. auch gebraucht, um das Popup ansprechen zu können. =;-)

            oops, der zweite Fall war mir noch nicht untergekommen.

            Verwöhnt durch JS, vermisse ich es in PHP sehr! ;-o

            Gruß, Cybaer

            --
            Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
            1. Hi,

              Das wäre kontraproduktiv! popup() gibt im (erwarteten) Erfolgsfall ja *nicht* true sondern das neue Fensterobjekt zurück. Und das wird ja ggf. auch gebraucht, um das Popup ansprechen zu können. =;-)

              Ja und? return !popupWin im Script liefert dann false zurück. Nichts anderes machst Du doch, wenn Du return !popupWin im Eventhandler notierst.
              Und ich finde es einfacher und fehlerunanfälliger, die (erforderliche) Negation im Script anzugeben.

              freundliche Grüße
              Ingo

              1. Hallo Ingo,

                Das wäre kontraproduktiv! popup() gibt im (erwarteten) Erfolgsfall ja *nicht* true sondern das neue Fensterobjekt zurück. Und das wird ja ggf. auch gebraucht, um das Popup ansprechen zu können. =;-)

                Ja und? return !popupWin im Script liefert dann false zurück.

                Ja, aber durch die Negation im return-Statement und den impliziten Typecast liefert die Funktion in _jedem_ Fall ein boolean (true oder false) zurück, und nie eine Referenz auf das window-Objekt. Du verbaust dir also die Möglichkeit, diese Referenz in einem anderen Kontext nutzen zu können, was bei diesem Beispiel nicht nötig ist.
                Die von Cybaer vorgeschlagene Version liefert dagegen eine window-Referenz oder null.

                Jetzt klarer geworden? ;)

                Ciao,

                Martin

                1. Hi,

                  Ja, aber durch die Negation im return-Statement und den impliziten Typecast liefert die Funktion in _jedem_ Fall ein boolean (true oder false) zurück, und nie eine Referenz auf das window-Objekt.

                  Das ist mir schon klar, nur wüßte ich nicht, wozu ich diese Referenz benötigen würde bzw. warum mir im Ausnahmefall true/false nicht ausreichen sollte.

                  freundliche Grüße
                  Ingo

                  1. Das ist mir schon klar, nur wüßte ich nicht, wozu ich diese Referenz benötigen würde bzw. warum mir im Ausnahmefall true/false nicht ausreichen sollte.

                    Vielleicht um das Popup-Fenster zu steuern? Z.B. focus()? Formularelemente setzen/abfragen? Oder um auf den DOM-Elementbaum des Fensters zuzugreifen? Es gibt viele Möglichkeiten, und einige könnten IMHO sogar sinnvoll sein, wenn die Funktion universell sein soll.

                    So long,

                    Martin

                    1. Hi,

                      Vielleicht um das Popup-Fenster zu steuern? Z.B. focus()? Formularelemente setzen/abfragen? Oder um auf den DOM-Elementbaum des Fensters zuzugreifen? Es gibt viele Möglichkeiten, und einige könnten IMHO sogar sinnvoll sein, wenn die Funktion universell sein soll.

                      Ja gut. Wenn man das vorhat, erleichtert die übergebene Referenz das freilich etwas.

                      freundliche Grüße
                      Ingo

                      1. Hi,

                        Ja gut. Wenn man das vorhat, erleichtert die übergebene Referenz das freilich etwas.

                        Ist eben eine *universelle* Routine. Z.B. erzeuge ich auch leere Popups und erzeuge den Inhalt vom Aufrufer aus (oder ändere Content in einer vordefinierten HTML-Seite). Auch kann man verhindern, daß man das Popup im Hintergrund bleibt, weil das Popup-Fenster bereits existierte. Beispiel:

                        <a target="quellcode" href="source1.html" onClick="win=popup(this,300,200); if(win){ win.focus(); } return !win;">Source 1</a><br>
                        <a target="quellcode" href="source2.html" onClick="win=popup(this,300,200); if(win){ win.focus(); } return !win;">Source 2</a><br>

                        Gruß, Cybaer

                        --
                        Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
    2. popup():
      [code lang=javascript]
      function popup(src,w,h,x,y) {
      var options="", popupURL, popupName, popupWin;
      if(typeof(x)=="number") options+=",left="+x;
      if(typeof(y)=="number") options+=",top="+y;
      if(typeof(w)=="number") options+=",width="+w;
      if(typeof(h)=="number") options+=",height="+h;
      lastParam=popup.arguments[popup.arguments.length-1];
      if(typeof(lastParam)=="string") {
        options+=","+lastParam;
      } else {
        if(typeof(lastParam)=="boolean" && lastParam) {
         options+=",menubar=no"
        } else if(typeof(lastParam)!="boolean" || (typeof(lastParam)!="boolean" && !lastParam)) {
         options+=",menubar=yes,toolbar=yes,location=yes,status=yes,scrollbars=yes,resizable=yes";
        }
      }

      if(options) { options=options.substring(1); }

      Dein options Handling finde ich ein bisschen verzwirbellt.
      var options = new Array();

      f(typeof(x)=="number") options[options.length] = "left=" + x;
      if(typeof(y)=="number") options[options.length] = "top="+y;
      if(typeof(w)=="number") options[options.length] = "width="+w;
      if(typeof(h)=="number") options[options.length] = "height="+h;

      ... den Rest spare ich mal aus, da das mit dem lastParam irgendwie seltsam ist.

      und dann:

      window.open( ...., options.join(',') );

      if(typeof(src)=="object") {
        popupURL=(src.href)?src.href:"about:blank";

      about:blank führt dazu, dass du in Opera das Fenster nicht beschreiben kannst. Läßt du aber about:blank weg erzeugt der IE 3 einen Fehler, ich persönlich ignoriere lieber die Fehlermeldung im IE 3 als das ich Opera nutzer ausschliesse. Aber das ist Geschmacksache.

      Struppi.

      1. Hi,

        ich persönlich ignoriere lieber die Fehlermeldung im IE 3 als das ich Opera nutzer ausschliesse.

        Und wie lang gedenken die Opara-Programmierer diesen Fehler noch mitzuschleppen? Solange wie die anderen Fehler? Oh je, schon geändert ... >:->

        Gruß, Cybaer

        --
        Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
        1. ich persönlich ignoriere lieber die Fehlermeldung im IE 3 als das ich Opera nutzer ausschliesse.

          Und wie lang gedenken die Opara-Programmierer diesen Fehler noch mitzuschleppen? Solange wie die anderen Fehler? Oh je, schon geändert ... >:->

          Jaja, lästig, da ich mir auch about:blank angewöhnt hatte (eben aus Zeiten als der IE 3 noch existierte - er war ja der Standardbrowser bei Win95) und da es lange dauerte bis Opera überhaupt einsetzbar war für sinnvolle Skripte fiel mir das auch seh spät erst auf.

          Struppi.

          1. Hi,

            und da es lange dauerte bis Opera überhaupt einsetzbar war für sinnvolle Skripte fiel mir das auch seh spät erst auf.

            Das liegt daran, daß ich Popup-Skripte prinzipiell nicht in die Rubrik "sinnvolle Skripte" einordne. :)

            popup() entstand eigentlich für ein Intranet (mit IEs). :-)

            Oh, BTW:

            if(popupWin && popupWin.focus && popupFocus) { popupWin.focus(); }

            müßte wohl auch entfernt, bzw. die Variable popupFocus definiert werden (die Zeile soll bereits existierende Popups nach vorne bringen, falls sie unter irgendwelchen Fenster liegen und die auch gewollt ist - also für popupFocus=true).

            Und natürlich:

            "about:blank"

            ersetzen durch

            ((window.opera)?"":"about:blank")

            Dann sind IE 3 *und* Opera zufrieden. ;-)

            Gruß, Cybaer

            --
            Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
            1. Hallo,

              müßte wohl auch entfernt,
              Und natürlich:
              ersetzen durch

              sagt mal ihr beiden Bastler, gibt es auch ein funktionstüchtiges <strong>Gesamtskript</strong>? ;-)

              Mit freundlichen Grüßen

              André

              1. Hi,

                sagt mal ihr beiden Bastler, gibt es auch ein funktionstüchtiges <strong>Gesamtskript</strong>? ;-)

                Ei verfreilich! ;-)

                  
                // PopUp erzeugen 050621  
                // Aufruf: popup(URL/A-Objekt[,Breite[,Hoehe[,X-Pos[,Y-Pos]]]][,Fensterparameter]);  
                // Rueckgabe: Fensterobjekt oder false bei Nichtgelingen  
                 function popup(src,w,h,x,y) {  
                  var options="", popupURL, popupName, popupWin, aboutBlank=(window.opera)?"":"about:blank";  
                  if(typeof(x)=="number") options+=",left="+x;  
                  if(typeof(y)=="number") options+=",top="+y;  
                  if(typeof(w)=="number") options+=",width="+w;  
                  if(typeof(h)=="number") options+=",height="+h;  
                  lastParam=popup.arguments[popup.arguments.length-1];  
                  if(typeof(lastParam)=="string") {  
                   options+=","+lastParam;  
                  } else {  
                   if(typeof(lastParam)=="boolean" && lastParam) {  
                    options+=",menubar=no"  
                   } else if(typeof(lastParam)!="boolean" || (typeof(lastParam)!="boolean" && !lastParam)) {  
                    options+=",menubar=yes,toolbar=yes,location=yes,status=yes,scrollbars=yes,resizable=yes";  
                   }  
                  }  
                  
                  if(options) { options=options.substring(1); }  
                  
                  if(typeof(src)=="object") {  
                   popupURL=(src.href)?src.href:aboutBlank;  
                   popupName=(src.target)?src.target:"_blank";  
                  } else if(typeof(src)=="string") {  
                   popupURL=(src)?src:aboutBlank;  
                   popupName="_blank";  
                  } else {  
                   popupURL=aboutBlank;  
                   popupName="_blank";  
                  }  
                  popupWin=window.open(popupURL,popupName,options);  
                  return popupWin;  
                 }  
                
                

                Gruß, Cybaer

                --
                Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
                1. Hallo Cybear,

                  sagt mal ihr beiden Bastler, gibt es auch ein funktionstüchtiges <strong>Gesamtskript</strong>? ;-)

                  Ei verfreilich! ;-)

                  Super!

                  Letzte(?) Frage: Warum ist das Skript so groß? Ich nutze

                    
                  function fenster (v)  
                  {  
                       win=window.open(v,'myname',"width=400,height=300,resizable=yes,scrollbars=no,toolbar=no,location=no,menubar=no,status=no");  
                  }  
                  
                  

                  und es funktioniert auch super (glaube ich). ;-)

                  Mit freundlichen Grüßen,
                  André

                  1. Hi,

                    Letzte(?) Frage: Warum ist das Skript so groß? Ich nutze

                    Komfort & Sicherheit fordern ihren Tribut!

                    und es funktioniert auch super (glaube ich). ;-)

                    Na ja, wenn der Browser einen Popup-Blocker hat, dann war's das auch schon. =:-o
                    Dem ließe sich allerdings mit einem return win; noch abhelfen. :-)

                    Nur: Damit machst du *ein* definiertes Popup mit Einheitsgröße und Einheitsnamen auf. Ausreichend, wenn Du nur eines hast. Es gibt aber auch Sites (nicht notwendigerweise Websites), die arbeiten mit mehreren Popups. Und es gibt auch Webmaster, die mit mehreren solcher Sites zu tun haben. Deswegen liegt popup() in meiner Script-Library, damit ich *ohne* überflüssige Tipparbeit (statt z.B. "top=5;" einfach numerische Parameter, keine URLs, die ich zusätzlich eingeben/ändern muß, ...) *beliebige* Popups öffnen kann.

                    Denn <a target="sitemap" href="sitemap.html" onclick="fenster('sitemap.html'); return false;"> wäre in zweifacher Hinsicht fehleranfällig (Popup-Blocker und mal heißt das neue Fenster "sitemap", mal "mywin") und enthält redundante Information. Bei <a target="sitemap" href="sitemap.html" onclick="return !popup(this);> entfällt jegliche Redundanz und der Browser reagiert auch noch korrekt.

                    Gruß, Cybaer

                    --
                    Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
                    1. Hallo Cybear,

                      Komfort & Sicherheit fordern ihren Tribut!

                      ich werde dein Skript einfach mal testen. ;-) Mal sehen, welchen Nutzen es _für_mich_ in der Praxis bringt.

                      Mit freundlichen Grüßen,
                      André