Zweitfenster (Pop up-Fenster)
Jochen
- javascript
Hallo,
zum Thema 'Zweitfenster' habe ich natürlich in SELFHTML (inkl. Forum &
Features) einiges gefunden. Leider habe ich in meinem speziellen Fall
bisher nur eine ungefähre Lösung gefunden, vielleicht kann mir jemand zur
100%-Lösung weiterhelfen? Ich möchte gerne auf meiner Seite ein paar Links
(z.B. drei) anbieten, nach deren Anklicken sich jeweils ein neues kleines
(hier Info-) Zweitfenster öffnet. Die Zweitfenster sollen sich NICHT
automatisch öffnen, aber unbedingt im Vordergund bleiben, wenn der Benutzer
sie geöffnet hat. Der Benutzer soll die Möglichkeit haben, beliebig viele
Zweitfenster geöffnet zu halten. - Meine bisherigen Lösungen hatten je nach
Browsertyp und -version immer einen Haken: entweder es haben sich beim
Anklicken eines Fensters gleich mehrere oder alle geöffnet, oder nach dem
Öffnen des zweiten Zweitfensters verschwand das erste ganz im Hintergrund
(ohne sich aber zu schließen) usw. - Der Benutzer meiner Seite soll aber
selbst entscheiden können, welche Fenster er aufruft und welche er wann
schließt. Meine jetzige, etwas umständliche Lösung funktioniert fast immer,
aber manchmal verschwinden auch da geöffnete Zweitfenster hinter dem
Hauptfenster:
<head>
<script type="text/javascript">
<!--
function Zweitfenster1(url,name,feature) {
Fenster1 = window.open(url,name,feature);
Fenster1.focus();
Fenster2.focus();
Fenster3.focus();
}
function Zweitfenster2(url,name,feature) {
Fenster2 = window.open(url,name,feature);
Fenster1.focus();
Fenster2.focus();
Fenster3.focus();
}
function Zweitfenster3(url,name,feature) {
Fenster3 = window.open(url,name,feature);
Fenster1.focus();
Fenster2.focus();
Fenster3.focus();
}
//-->
</script></head>
<body>
<p> <a href="javascript:Zweitfenster1('zweitfenster01.html','Zweitfenster1','width=100,height=100,top=100,left=150,scrollbars=no,dependent=no,resizable=yes')">Textstelle</a></p>
<p align="center"><a href="javascript:Zweitfenster2('zweitfenster02.html','Zweitfenster2','width=100,height=100,top=250,left=350,scrollbars=no,dependent=no,resizable=yes')">'ne andere Textstelle</a></p>
<p align="right"> <a href="javascript:Zweitfenster3('zweitfenster03.html','Zweitfenster3','width=150,height=100,top=350,left=550,scrollbars=no,dependent=no,resizable=yes')">noch 'ne andere</a></p>
</body>
Hat jemand einen Tip, um die Befehlsstruktur stabil zu machen,
irgendwie steht es noch auf wackligen Beinen??
Danke für Eure Hilfe,
Jochen (Göttingen)
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
Hallo, timo,
Ich will ja nicht unhöflich sein, und deine Lösung finde ich auch sehr elegant und durchdacht, aber hat es Sinn, soviel Zeit für die Entwicklung einer Lösung zu investieren, welche im Grunde genommen unbenutzbar ist, anstatt sich eine einfachere und benutzbarere Alternative auszudenken? Popup-Fenster zu benutzen, um Zusatzinformationen anzuzeigen, ist schon sehr heikel, aber gleich multiple Fenster zu öffnen, über die die Seite kontrolliert, finde ich äußert problematisch.
Mir käme bei so etwas sofort in den Sinn, dass man eine Version mehreren CSS-positionierten Seitenelementen erstellt, welche man auch nebeneinander und über der Seite zeigen kann, außerdem kann man es realisieren, dass sie sich wie Fenster verschieben und schließen lassen. Über Links könnte man einfach über das DOM die visibility ändern. Das verbraucht keinen Speicher, da keine Extrafenster geöffnet werden und das Problem mit dem Fokussieren entfällt völlig, da kein Bereich in den Hintergrund geraten kann. Zu guter letzt kann man das es lösen, dass es auch ohne JavaScript funktioniert. Wieso also Popup-Fenster?
Haut hin, außer beim NS4, da musst du mit Timeouts arbeiten (fnBringWndsTop), weil schon recht alt und daher beim fokussieren nicht so schnell.
Das hat aber nicht nur mit Netscape etwas zu tun, langsame System sind genauso betroffen.
Grüße,
Mathias
Hallo Mathias,
Ich will ja nicht unhöflich sein,
konstruktive Kritik kann nicht unhöflich sein;)
hat es Sinn, soviel Zeit für die Entwicklung einer Lösung zu investieren, welche im Grunde genommen unbenutzbar ist, anstatt sich eine einfachere und benutzbarere Alternative auszudenken?
Daher schrieb ich "Unabhängig davon ob dies nun Sinn macht". Manchmal geht es eben nicht um den Sinn sondern nur um die Machbarkeit, das Tüfteln. Eigentlich wollte ich die Zwei-Frame-Frame erst nicht lesen, fand dann aber, dass sie doch recht interessant ist, im Gegensatzt zu manch anderen Fragen hier im Forum. Natürlich gibt es benutzbarere Alternativen, und diese wären auch einer PopUp-Lösung vorzuziehen, aber im Grunde kenne ich nicht einmal den Einsatzzweck, und da kann man sich dann nur noch auf die Fragestellung/das Problem direkt beziehen.
Kann ja sein, er entdeckt die Möglichkeiten von JavaScript. Haben wir anders angefangen? Ich habe damals bestimmt nicht gefragt ob das Sinn macht, sondern einfach nur entdeckt*, was geht und was nicht, halt die Grenzen ausgelotet. Der gute Stil kam später, nachdem man wußte was geht. Und so lange hat die Entwicklung nun auch wieder nicht gedauert.
Popup-Fenster zu benutzen, um Zusatzinformationen anzuzeigen, ist schon sehr heikel, aber gleich multiple Fenster zu öffnen, über die die Seite kontrolliert, finde ich äußert problematisch.
Aber PopUp-Fenster haben auch ihre Vorteile, weil ich den Inhalt von andere Stelle aus pflegen kann. Könnte dort vielleicht Bilder von verschiedenen Kameras anzeigen lassen, oder anderes..
Hast aber letztendlich recht, fürs Internet ist es nicht zu empfehlen, zumal es ja auch PopUp-Blocker gibt.
Das hat aber nicht nur mit Netscape etwas zu tun, langsame System sind genauso betroffen.
Oh, danke für die Info. Ich krieg dass mit meiner 1.2 GHz Kiste nicht mit, schätze aber dass ein 800 MHz heute schon fast überall zu finden ist.
schönes WE
timo
* heute wie damals, man findet immer wieder was Neues
Hallo timo und molily,
als HTML-Anfänger habe ich nun zum ersten Mal das FORUM benutzt und freue
mich total darüber, daß ihr Euch soviel Zeit zum Antworten und Mitdenken
gemacht habt! Vielen Dank!!
In den fachspezifischen Teil der Antworten (besonders der von timo --
merci!) muß ich mich erstmal eindenken (und ausprobieren), da seid ihr mir
Lichtjahre voraus.
Aber noch ein Wort zu Sinn und Unsinn von Zweitfenstern im allgemeinen: mir
geht es ja nicht etwa um eklige Werbefenster die plötzlich auftauchen und
nicht mehr verschwinden, sondern ich suche eine Möglichkeit, um eine aus
mehreren Seiten bzw. Unterseiten bestehende Website so zu strukturieren, daß
der Benutzer nicht die Übersicht verliert. Ich habe schon so viele grausame
Seiten gesehen, die es offenbar zum Ziel haben, den Benutzer in die totale
labyrinthische Verwirrtheit zu stürzen, so daß ich Lösungen für
praxisorientierte Übersichtlickeit beim Betrachten einer Seite und beim
Navigieren suche.
Dabei können nun kleine Zweitfenster, die sich vor dem Hauptfenster öffnen
und speziellere weitergehende Informationen enthalten, sehr nützlich sein:
der Benutzer hat das Hauptfenster im Blick und gleichzeitig ein oder auch
zwei kleine Hilfefenster mit Spezialinfos oder Definitionen o.ä. - Ich finde
diese kleinen vorgelagerten Fenster aus sagen wir: didaktisch-navigatorischen
Gründen äußerst praktikabel. Der Benutzer darf ja nicht die Übersicht verlieren
und sich nicht auf einer Unter-Unter-Unter-Seite einer Unter-Unter-Seite
verirren. Tut er vielleicht auch nicht, wenn er ein erfahrener Internet-
Benutzer ist, aber das sind ja nicht alle. - Mit einem Pop up-Fenster kann
man 'Spezialinfos' von einer bestimmten Seite wegnehmen und die Informationen
mit einem Link in die kleinen Zweitfenster verlagern, was auch der
Übersichtlickeit der Seite zugute kommt. Ich finde, daß diese
Pop up-Fenster-Variante 'ne supergute Ergänzung zu einer gut gemachten
Navigationsleiste sein könnte.
Nun abschließend noch ein Hinweis, wie ich darauf gekommen bin: erstens ganz
banal für mich privat (ganz richtig: auch zum HTML-Tüfteln!) und zweitens
für die Internet-Seiten der Datenbank einer Arbeitsstelle: dort jobbe ich
ein bißchen und versuche mich auch um den Ausbau der Seiten zu kümmern.
Ich weiß nicht, ob es Euch interessiert (es ist eine Datenbank für
literarische Motive, Stoffe und Themen), aber schaut mal rein, wenn ihr
Lust habt: http://zs.gbv.de/motive (bitte möglichst nicht im Quelltext
gucken, das sieht dort noch sehr anfängermäßig aus ;) - Popups gibt es dort
noch nicht, aber vielleicht bald, es ändert sich ständig 'was,
wahrscheinlich schon in den nächsten Tagen.
Nochmals danke an Euch!
Jochen (Göttingen)
Hallo Jochen,
also die Seiten gefallen mir auch jetzt schon so wie sie sind, ohne PopUp-Fenster und Co.
Mit einem Pop up-Fenster kann
man 'Spezialinfos' von einer bestimmten Seite wegnehmen und die Informationen
mit einem Link in die kleinen Zweitfenster verlagern, was auch der
Übersichtlickeit der Seite zugute kommt.
Ich bezweifle stark, dass PopUp-Fenster der Übersichlichkeit dienen können. Dachtest du daran, sie als "Notizblätter" zu verwenden? Da würde ich dann doch lieber zu einer Art "Warenkorb-System für Notizen" tendieren, sprich wenn der Benutzer sich was merken will, dann wird dies global gespeichert, und er kann sich auf _einer_Seite_ diese Vermerkungen ansehen. Den passenden Link dazu findet er dann in der gut durchdachten Navi.
Letztendlich sind diese Seiten öffentlich zugänglich und sollten daher auch bei den unterschiedlichsten Browserkonfigurationen ordentlich laufen. So kann ich z.B. im Opera einstellen, dass er PopUp-Fenster unterdrückt, was das ganze PopUp-Konzept über den Haufen wirft. Überdenke also nochmal das Konzept bevor du dich ins Zeug legst;)
timo
Hallo, timo,
Ich will ja nicht unhöflich sein,
konstruktive Kritik kann nicht unhöflich sein;)
Ich wollte deine Arbeit nicht schlecht machen, habe sie aber dennoch in einem gewissen Sinne für unnütz erklärt, deshalb meine Einschränkung. Natürlich ist es keine bzw. nicht nur eine Frage der Nützlichkeit.
hat es Sinn, soviel Zeit für die Entwicklung einer Lösung zu investieren, welche im Grunde genommen unbenutzbar ist, anstatt sich eine einfachere und benutzbarere Alternative auszudenken?
Daher schrieb ich "Unabhängig davon ob dies nun Sinn macht". Manchmal geht es eben nicht um den Sinn sondern nur um die Machbarkeit, das Tüfteln.
Tatsache, wobei ein gewisses Maß an Unbenutzbarkeit in einem gewissen Rahmen der gewünschten Wirkung nicht abträglich ist (nur sollte man diese Wirkung nicht um jeden Preis erzielen, das ist klar, diese Zweischneidigkeit ist bekannt). Jede Webtechnologie kann man kreativ und genialisch einsetzen, nur im "Alltag" muss man sich zügeln. Dieser Mittelweg ist immer schwer zu finden und wird auch von den wenigsten beschritten, meiner Erfahrung nach gibt es wenig zwischen Gigantismus und Minimalismus, und wenn eine Seite den perfekten Ausgleich der Extreme schafft, dann hat sie meist auch dementsprechend interessante Inhalte.
Natürlich ist es nicht sehr hilfreich, wenn man eine Seite
multimedial "nach Teufel komm raus" aufwertet, aber als und "Hack" zum Selbstzweck, also als kreativ-künstlerisches Experiment, hat so etwas durchaus seinen Sinn. Wenn jemand z.B. DeCSS oder einen Brainfuck-Interpreter in JavaScript implementiert, ist das zwar nicht wirklich brauchbar, aber es ist Spaß des Spaßes halber und es begeistert mich ungemein. :)
Natürlich gibt es benutzbarere Alternativen, und diese wären auch einer PopUp-Lösung vorzuziehen, aber im Grunde kenne ich nicht einmal den Einsatzzweck, und da kann man sich dann nur noch auf die Fragestellung/das Problem direkt beziehen.
Genau darüber habe ich beim Schreiben meines Beitrages nachgedacht, äußerte es aber nicht. Natürlich hast du richtig gehandelt und eine Antwort auf die Frage von Jochen gegeben, während ich eher im Sinn gehabt hätte, dem OP seinen Wunsch auszureden. :)
Oft kommen Menschen in dieses Forum und fragen "wie mache ich XYZ" und meist wird auch eine zielführende Antwort gegeben. Die wenigstens Antwortenden bemängeln jedoch im Zweifelsfalle, dass alleine schon die Absicht des/der Fragenden problematisch ist. Schließlich nimmt man an, dass der/die Fragende bereits darüber nachgedacht hat, ob überhaupt sinnvoll ist, was er/sie vorhat. Die Erfahrung zeigt, dass dies meist ein Irrtum ist und der Wunsch des/der Fragenden meist auf Unkenntnis und Blauäugigkeit beruht. :)
Die Kausalkette ist für mich eine völlig verschiedene - sie fängt nicht mit Popups, Stylesheets ... an, sondern mit der Grundfrage nach einer adäquaten Kommunikation mit dem Benutzer. Wenn man also im Sinn hat, gleich drei Popupfenster gleichzeitig zu öffnen, weil man drei Popupfenster öffnen will und nicht weil dies nicht nur die naheliegendste sondern auch die beste Möglichkeit der Problemlösung darstellt, sollte man besser noch einmal mit dem Nachdenken bei Null anfangen. Was nützen einem unzählige Möglichkeiten, wenn man nicht kritisch über deren Sinnhaftigkeit reflektieren kann und sie unbedacht benutzt?
Kann ja sein, er entdeckt die Möglichkeiten von JavaScript. Haben wir anders angefangen? Ich habe damals bestimmt nicht gefragt ob das Sinn macht, sondern einfach nur entdeckt*, was geht und was nicht, halt die Grenzen ausgelotet.
In dem Punkt stimmt ich dir vollkommen zu, das ist meiner Erfahrung nach der stereotype Werdegang eines jeden Künstlers (abstrakt gesehen). Anfangs experimentiert man mit Techniken und Stilmitteln herum und verwenden sie relativ unbedacht an, mit der Zeit kommt die Erfahrung über deren Zusammenspiel und gekonnte Anwendung. Dies ist ein normaler Lernprozess und in den meisten Fällen bildet sich ein differenziertes Wissen heraus.
Der gute Stil kam später, nachdem man wußte was geht. Und so lange hat die Entwicklung nun auch wieder nicht gedauert.
ACK. Wobei ich persönlich mich leider nicht mehr an den Moment erinnern kann, als ich mich zuerst mit mit der "Königsklasse" ;) des Webauthorings beschäftigt habe, also bspw. anfing, darüber nachzudenken, dass die Seite interoperabel und der Quellcode valide sein sollte und JavaScript nur bedacht als verfeinerndes Sahnehäubchen genutzt werden sollte, aber Selfhtml hat diesen Prozess nur beschleunigt.
Popup-Fenster zu benutzen, um Zusatzinformationen anzuzeigen, ist schon sehr heikel, aber gleich multiple Fenster zu öffnen, über die die Seite kontrolliert, finde ich äußert problematisch.
Aber PopUp-Fenster haben auch ihre Vorteile, weil ich den Inhalt von andere Stelle aus pflegen kann. Könnte dort vielleicht Bilder von verschiedenen Kameras anzeigen lassen, oder anderes..
Das stimmt schon, aber ich nahm an, dass man die simulierten "Fenster", welche keine neuen Browserfenster darstellen, auch serverseitig dynamisch erstellen kann.
Im Übrigen würde ich dafür eher Inner Frames (iframe oder object) benutzen, um Effekte wie ständiges aktualisieren zu realisieren. Hauptsache die Lösung ist mehr oder weniger integrativ, schließlich kann man mit meta refresh Inner Frames oder per JavaScript Bilder neu- und nachladen. Eingebettete Dokumente sind IMHO immer benutzbarer.
Das hat aber nicht nur mit Netscape etwas zu tun, langsame System sind genauso betroffen.
Oh, danke für die Info. Ich krieg dass mit meiner 1.2 GHz Kiste nicht mit, schätze aber dass ein 800 MHz heute schon fast überall zu finden ist.
Ich benutze einen 133 MHz-Rechner, aber es geht relativ schnell... ;) In gewisser Weise nehme ich an, dass es selbst bei zehnfachem Prozessortakt nicht schneller wäre.
Grüße,
Mathias