2010-12-13 4 views
0

Kann mir jemand eine oder mehrere effiziente, zuverlässige Methoden zum Öffnen eines Popup-Browserfensters erklären, das eine fortlaufende Liste von Updates aus dem Hauptfenster des Browsers enthält?Wie öffne ich ein Popup-Browserfenster, um laufende Updates von der Hauptseite zu enthalten?

Stellen Sie sich vor, ich möchte einfach im Popup-Fenster eine Textzeile für jedes Mausklick-Ereignis anzeigen, das im Hauptfenster passiert. Ich weiß, wie man die Event-Handler bindet, aber ich weiß nicht, wie man ein leeres Popup-Fenster öffnet, es mit etwas Inhalt von der Hauptseite sät (zB eine Überschrift für das Fenster, "Ereignisse hier gezeigt!"), und fügen Sie dann HTML-Inhalt an dieses Fenster von der Haupt an.

Es muss Wege geben, dies zu tun, und ich bin mir sicher, dass ich es irgendwann selbst herausfinden könnte, aber vielleicht können einige Smarties von SO mir schneller helfen. Google-Suchen zu diesem Thema scheinen eine endlose Liste von Tutorials und Beispielen zu ergeben, wie ein Popup geöffnet wird, das Inhalte von einer bestimmten URL enthält, nicht Inhalte, die programmatisch von der Hauptseite bereitgestellt werden.

Es scheint auch ein hohes Risiko zu bestehen, dass der Browser das Popup blockiert, so dass jeder Kommentar zur Vermeidung dieses Problems geschätzt wird.

Wenn jemand Kommentare wie "Niemals Popups verwenden möchte! Sie saugen immer was auch immer" geben, fühlen Sie sich frei, solange sie nicht nur eine Flamme sind, denn es gibt offensichtlich bestimmte Anwendungsfälle, für die ein zweites Fenster ist ein geeignetes Gerät.

Vielen Dank an alle im Voraus, Brian

Antwort

3

Mit diesem Code spielen kann:

var mywin = window.open("", "my_popup", "location=0,status=0,scrollbars=0,width=500,height=500"); 
var contents = "<p>HTML content...</p>"; 
$(mywin.document.body).html(contents); 
$(mywin.document.body).append(contents); 
+2

Verstehen Sie, dass dies von Popup-Blockern abgefangen wird und überhaupt nicht funktioniert, wenn der Benutzer JavaScript deaktiviert. – KeithS

+0

Große prägnante Abbildung. Vielen Dank. – BrianFinkel

0

Mein erster Gedanke ist AJAX zu implementieren, auf der Seite und auf dem "Pop-Up".

Behalten Sie eine Benutzersitzung, speichern Sie sie in einer Datenbank. Verfolgen Sie die Aktionen des Benutzers auf der Hauptseite, AJAX diese Aktionen an die DB. Lassen Sie einen Timer auf dem Pop-Up einrichten, der AJAX verwendet, um die Datensätze aus der DB zu ziehen.

+0

Danke, aber ich möchte eine Lösung, die keine Serverinteraktion erfordert. – BrianFinkel

+0

Und warum ist das? :) –

+0

(1) Es ist nicht notwendig; Siehe die Antwort von styu.(2) Warum in aller Welt würde ich Roundtrips zu einem Server einbeziehen, eine Datenbank einrichten (!!), zeitgesteuerte AJAX-Aktualisierungen durchführen usw., wenn ich einfach ein Fenster direkt mit dem anderen kommunizieren lassen kann. Eine AJAX + DB-Lösung ist um Größenordnungen langsamer und komplizierter. Außerdem erfordert sie eine Verbindung zum Server, während dies bei einer Client-seitigen Lösung nicht der Fall ist. Die reine Client-Lösung umfasst <5 Codezeilen und bietet eine schnellere, sauberere und leistungsfähigere Leistung als die AJAX + DB-Lösung, die viel mehr Arbeit und bewegliche Teile erfordert. – BrianFinkel

1

Klingt wie AJAX zur Rettung. Grundsätzlich möchten Sie ein AJAX-aktualisierbares div in Ihrem Popup-Fenster erstellen und eine JS-Methode den Server abfragen lassen, um zu sehen, ob es im Hauptfenster eine Aktualisierung für Benutzerereignisse gab. Wenn ja, holen Sie sich die neuen Daten und aktualisieren Sie das div damit. Am Ende sollten Ihre Event-Handler oder das Lade-Skript die Tatsache protokollieren, dass sie in einem Session-Speicher aufgerufen wurden, der die Basis für die Popup-Daten bildet.

Genau wie Sie dies tun würden, hängt von dem Web-Framework ab, das Sie verwenden; Fast alle haben ein AJAX-Toolkit, das Sie verwenden können. Dies ist eine relativ einfache Verwendung von AJAX.

So weit wie Popup-Blocker umgehen, die Verwendung von CSS, um das Popup in-Seite erscheinen statt wie ein neues Browserfenster/Registerkarte in der Regel tut den Trick; Sie können dann ein GUI-Element auf dem Popup implementieren, um es zu reduzieren, so dass es nicht im Weg ist. Oder fragen Sie einfach Ihre Benutzer, ihre Blocker so zu konfigurieren, dass sie Ihr Popup zulassen. Wenn sie Ihrer Site vertrauen (und es ist vertrauenswürdig), kein Problem. Sie können die Daten auch in einem Frame anzeigen, die Verwendung von HTML-Frames kann jedoch problematisch sein und wird zugunsten der Verwendung von CSS zur Definition von Layout mithilfe von divs mit Größe nicht empfohlen.

+0

Danke, aber ich möchte eine Lösung, die keine Serverinteraktion erfordert, und ich möchte definitiv ein separates Browserfenster. – BrianFinkel

Verwandte Themen