timo: Zweitfenster (Pop up-Fenster)

Beitrag lesen

Hallo,

dein Problem ist schon sehr speziell, da wirst du in SelfHTML keine Lösung finden, nur Anregungen. Wenn ich dich richtig verstanden habe möchtest du etwas in Richtung Tool-Fenster realisieren? Unabhängig davon ob dies nun Sinn macht oder nicht und ob das fürs Internet gedacht ist hier meine Anmerkung dazu.

Die Fenster mußt du kontrollieren, das ist schon mal klar. Somit ist ein wahlloses öffnen bzw. fokussieren unnütz. Entgegen der Self-Maxime habe ich mich jetzt mal daran gemacht und eine kleine Seite zusammengestellt. Die Fensterdaten _eines_Fensters_ werden im Funktionsobjekt WndData gespeichert, sprich der URL, Fenstername, Featureliste sowie der Objektverweis auf das eigentliche Fenster (wnd). Der wichtigste Punkt hierbei ist die Methode isValidWnd. Sie prüft, ob der Objektverweis auf das Fensterobjekt gültig ist. Das ist wichtig, wenn alles kontrolliert ablaufen soll. Alle Fenster (drei an der Zahl, WndData-Objekte) werden im Array arrWndData abgelegt. Es wird auf diese Funktionsobjekte zugegriffen, sprich in den Links werden keine URL's mehr angegeben. Die restlichen drei globale Funktionen (fnBringWndsTop, fnOpenWnd und fnCloseWnd) erklären sich von selbst.

<html>
<head>
<title>MultiWin Demo</title>
<script type="text/javascript">
function WndData (strURL, strName, strFeature) {
  this.wnd        = null;
  this.strURL     = strURL;
  this.strName    = strName;
  this.strFeature = strFeature;

this.isValidWnd = function () {
    return (this.wnd && !this.wnd.closed);
  }

this.openWnd = function () {
    if (!this.isValidWnd())
      this.wnd = window.open(this.strURL, this.strName, this.strFeature);
    this.focusWnd();
  }

this.closeWnd = function () {
    if (this.isValidWnd())
      this.wnd.close();
  }

this.focusWnd = function () {
    if (this.isValidWnd())
      this.wnd.focus();
  }
}

var arrWndData = new Array();

arrWndData[0]  = new WndData('http://selfhtml.teamone.de/',
                             'Zweitfenster1',
                             'top=40,left=420,width=110,height=120');

arrWndData[1]  = new WndData('http://selfhtml.teamone.de/',
                             'Zweitfenster2',
                             'top=40,left=540,width=110,height=120');

arrWndData[2]  = new WndData('http://selfhtml.teamone.de/',
                             'Zweitfenster3',
                             'top=40,left=660,width=110,height=120');

function fnBringWndsTop () {
  var i;

for (i = 0; i < arrWndData.length; i++)
    arrWndData[i].focusWnd();
}

function fnOpenWnd (iIndex) {
  fnBringWndsTop();
  arrWndData[iIndex].openWnd();
}

function fnCloseWnd (iIndex) {
  fnBringWndsTop();
  arrWndData[iIndex].closeWnd();
}
</script>
</head>
<body>
<p>
<a href="javascript:fnOpenWnd(0);">Show Window 1</a><br>
<a href="javascript:fnOpenWnd(1);">Show Window 2</a><br>
<a href="javascript:fnOpenWnd(2);">Show Window 3</a>
</p>

<p>
<a href="javascript:fnCloseWnd(0);">Close Window 1</a><br>
<a href="javascript:fnCloseWnd(1);">Close Window 2</a><br>
<a href="javascript:fnCloseWnd(2);">Close Window 3</a>
</p>
</body>
</html>

Ich hab das so im IE 5.5, Moz, Opera 6.0 und NS4 getestet. Haut hin, außer beim NS4, da musst du mit Timeouts arbeiten (fnBringWndsTop), weil schon recht alt und daher beim fokussieren nicht so schnell.

hth
timo