WauWau: neues Fenster zentriert, altes Fenster minimieren

Beitrag lesen

Hallo,

ich will nach dem Öffnen einer HTML-Seite das aktuelle Fenster minimieren und ein neues Fenster zentriert in einer bestimmten Grösse ohne Leisten öffnen.

Zum "minimieren" hilft dir lediglich die Möglichkeit, das Fenster "in den Hintergrund" zu schieben (nicht alle benutzen Windows, unter Apple OS z.B. kann man ein fenster nicht "minimieren", sondern es lediglich "einklappen"), und das neue Fenster in den Vordergrund.

Wie du das machst? Mit <body onLoad="...">, window.blur(); zum "in hintergrund machen" und window.open(); für ein neues Fenster sowie window.focus(); zum "in Vordergrund machen" des neuen Fensters. Ich dachte, ich hätte noch "zentriert auf dem Monitor" gelesen: Dafür musst du herausfinden, wie breit und hoch der Monitor ist, was mit screen.width und screen.height geht, das dann minus der breite bzw. höhe deines Fensters durch 2 ergibt die startposition von oben oder links.

Nun, ich kann mir vorstellen, dass ich dich jetzt "überrümpelt" habe, daher erst mal ein paar Links:

- window.blur(): http://www.selfhtml.teamone.de/javascript/objekte/window.htm#blur
  - window.open(): http://www.selfhtml.teamone.de/javascript/objekte/window.htm#open
  - window.focus():http://www.selfhtml.teamone.de/javascript/objekte/window.htm#focus
  - Das Objekt "screen": http://www.selfhtml.teamone.de.de/javascript/objekte/screen.htm

So, und wenn du willst kann ich dir auch einen Lösungsansatz geben, für eine völlige Einbindung in deine Seite bist aber dann du verantwortlich, ich empfehle insbesonders für die Methode window.open();, die gerade für Anfänger ziemlich komplex erscheint, als Pflichtlektüre http://www.selfhtml.teamone.de/javascript/objekte/window.htm#open.

Also, damit das, was du alles mit den Fenstern willst, beim Laden der seite geschieht, musst du es so einbauen, dass es beim Laden der Seite geschieht. Das geht mit den sogenannten "Event-Handlern" http://www.selfhtml.teamone.de/javascript/sprache/eventhandler.htm:

<body onload="MeinFenster();">

Das lässt die Funktion (-> http://www.selfhtml.teamone.de/javascript/sprache/funktionen.htm) MeinFenster(); beim Aufruf der Seite laden. Also, in den <head> kommt nun:

<script language="JavaScript" type="text/jscript">
<!--

function MeinFenster()
 {
 }

//-->
</script>

So, nun müssen wir die Funktion mit dem füllen, was du willst. Ich werde dir jetzt mal eine mögliche Lösung geben, und sie anschließend erklären:

<script language="JavaScript">
<!--
var breite = 200; //Breite deines neuen Fensters in Pixeln
var hoehe  = 300; //Höhe deines neuen Fensters in Pixeln
var url    = "seite2.htm" //Adresse deines neuen Fensters

var links,oben,meinfenster; // allgemeine variablen deklarieren

function MeinFenster()
 {
   links = eval((screen.width - breite)/2);
   oben  = eval((screen.height - hoehe)/2);

meinfenster = window.open(url, "MeinFenster", "left="+links+",top="+oben+",width="+breite+",height="+hoehe);
   meinfenster.focus();
 }
-->
</script>

Sieht vielleicht schwierig aus, ist es aber überhaupt nicht.

Also, die ganzen "var blabla = blaoblo;"-Teile ganz oben sind nur die Deklarationen (=Initialisationen) der Variablen, die das Script vorher wissen muss.

In der Funktion rechnet es nun die x-Position des Fensters absolut von der linken Kante des Bildschirms aus. Das geht, in dem man die Breite des Bildschirms (screen.width) minus der Breite des Fensters (die du oben angegeben hast, nämlich die Variable "breite") durch 2 nimmt. Wichtig sind die Klammern - denn wie haben wir damals in der schule gelernt...? Strichrechnung vor Punktrechnung (= erst mal oder durch, dann minus oder plus.... blablabla). Die eval()-Anweisungen sind afaik totaler unsinn, aber ich sezte sie hier gerne, damit ich persönlich weiß, dass mein script hier was ausrechnet ;-)

So, nun weisen wir der Variable "meinfenster" ein Fenster-Objekt zu, und da wir die Variable außerhalb der Funktion deklariert haben, können wir sie noch anderswo einsetzen, aber das wollen wir wahrscheinlich sowieso nicht.

Das neue Fenster öffnet nun "window.open();", als Rückgabe wie gesagt das "fenster-objekt", welches wir der Variable "meinfenster" zuweisen. Näheres über die Methode "open()" auf den verlinkten Seiten oben.

Nun brauchen wir lediglich dem neue Fenster, welches wir über "meinfenster" erreichen können, den Focus zu geben, das heißt, es in den Vordergrund zu schieben. Das geht also mit der Methode "focus();", dabei brauchen wir das Elternfenster gar nicht in den Hintergrund zu schieben, da es ja automatisch in den Hintergrund gerät, wenn ein neues Fenster in den Vordergrund kommt.

Ich hoffe, du hast alles verstanden, ich habe mir viel Mühe gemacht, um dir zu helfen,

WauWau

--
Wau wau wau, wau wau, wau wau wau wau wau wau wau - Betonung kann ich leider schlecht aufschreiben ;-)