zurück zur Startseite
  


Zurück XHTMLforum > Webentwicklung (außer XHTML und CSS) > Javascript & Ajax
Seite neu laden Neues Fenster öffnen mit JS

Antwort
 
LinkBack Themen-Optionen Ansicht
  #1 (permalink)  
Alt 15.07.2013, 17:22
Neuer Benutzer
neuer user
Thread-Ersteller
 
Registriert seit: 25.12.2010
Beiträge: 21
acb1980 befindet sich auf einem aufstrebenden Ast
Standard Neues Fenster öffnen mit JS

n'Abend,

wie man aus einer HTML-Seite heraus eine Seite in einem neuen Fenster öffnet ist ja hinlänglich bekannt. Alternativ zu target="_blank" besteht ja auch die Möglichkeit, das Ganze mit JS zu realisieren, nämlich mit window.open(). Letzteres funktioniert jedoch nicht immer, vor allem bei neueren Browsern funktioniert window.open() nur noch dann, wenn man es direkt einen onClick-Event zuweist und so auch anruft.

Mein Problem ist nun konkret Folgendes: Ich habe eine Web-Application, in der zu jedem Formular eine Druckversion abrufbar sein soll. Da diese Druckversion in Form eines PDF-Dokuments erzeugt wird, möchte ich das nur ungern in einem iFrame o.ä. anzeigen, sondern ein neues Fenster öffnen. Mache ich das jedoch direkt (also über einen normalen Link), so fehlen in der Druckversion die letzten Änderungen.

Da ich eigentlich alle Funktionen über AJAX realisiert habe war meine Idee nun die, dass ich zunächst das Formular via AJAX speichere und anschließend die Druckversion in einem neuen Fenster aufrufe. Das funktioniert jedoch aufgrund der o.g. Einschränkungen nicht, denn window.open() wird ja erst im Callback des AJAX-Calls (wenn die Änderungen in die DB geschrieben wurden) aufgerufen und fällt damit unter die Browser-Restriktion des nicht direkten Klickens.

Im Moment stecke ich daher tatsächlich komplett fest. Ich habe auch schon versucht, die Druckversion mit Hilfe von jQuery zu öffnen, indem ich einen Klick auf einen Link simuliere, das funktioniert jedoch nur mit entsprechend registrierten Events, nicht jedoch mit den "normalen" HTML-Attributen wie HREF und TARGET.

Ich bin nun am Ende meiner Ideen, vielleicht findet sich ja hier noch jemand, dem eine Alternative einfällt. Ansonsten muss ich wohl oder übel doch auf eine iFrame-Lösung zurückgreifen...
Mit Zitat antworten
Sponsored Links
  #2 (permalink)  
Alt 15.07.2013, 18:55
Benutzer
neuer user
 
Registriert seit: 18.06.2013
Beiträge: 76
vanDerb befindet sich auf einem aufstrebenden Ast
Standard

Wirst du so wohl nicht anders hinbekommen.

Du könntest die window.open auf den onclick des Drucklinks setzen.
Die Zielurl bekommt dann den Ajax-Request, in dem du im Callcack dann z.b. wiederum eine Weiterleitung zur PDF setzen kannst.
Mit Zitat antworten
Sponsored Links
  #3 (permalink)  
Alt 16.07.2013, 14:14
Erfahrener Benutzer
XHTMLforum-Mitglied
 
Registriert seit: 09.10.2010
Beiträge: 154
MitjaStachowiak befindet sich auf einem aufstrebenden Ast
Standard

Also ich habe das so verstanden: Du hast da einen Link "Seite ausdrucken". Wenn man da drauf klickt, wird (mit Verzögerung) ein PDF erstellt, welches du jetzt in einem Popup anzeigen willst?

Ich weis jetzt nicht, ob du bei PDFs prüfen kannst, ob das Fenster geöffnet wurde, aber auf jeden Fall kannst du dem User nach erstellen das PDFs einen weiteren Link anbieten... Im Notfall ein Onclick auf die ganze Seite, so kann man es nicht verpassen. An sonsten musst du das PDF eben in ein Frame-basiertes Fenster laden.

Wer Websiten ausdrucken will, muss einfach damit rechnen, dass er manuell ein Popup zulassen muss, das ist nichts neues. Kannnst dir ja mal angucken, wie ich auf meiner Homepage das ausdrucken gelöst habe (Menü --> Drucken - ist noch ein Prototyp )
Mit Zitat antworten
  #4 (permalink)  
Alt 16.07.2013, 15:06
Neuer Benutzer
neuer user
Thread-Ersteller
 
Registriert seit: 25.12.2010
Beiträge: 21
acb1980 befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von vanDerb Beitrag anzeigen
Wirst du so wohl nicht anders hinbekommen.
Das fürchte ich aktuell auch.

Zitat:
Zitat von vanDerb Beitrag anzeigen
Du könntest die window.open auf den onclick des Drucklinks setzen.
Die Zielurl bekommt dann den Ajax-Request, in dem du im Callcack dann z.b. wiederum eine Weiterleitung zur PDF setzen kannst.
Ich verstehe nicht ganz, was du damit meinst...?


Zitat:
Zitat von MitjaStachowiak Beitrag anzeigen
Also ich habe das so verstanden: Du hast da einen Link "Seite ausdrucken". Wenn man da drauf klickt, wird (mit Verzögerung) ein PDF erstellt, welches du jetzt in einem Popup anzeigen willst?
Nein, das PDF wird beim Aufruf der entsprechenden URL mit fpdf für PHP direkt erzeugt. Eine Verzögerung ist nur vor dem Aufruf dieser URL notwendig, um zuvor noch die Inhalte zu speichern.

Zitat:
Zitat von MitjaStachowiak Beitrag anzeigen
Wer Websiten ausdrucken will, muss einfach damit rechnen, dass er manuell ein Popup zulassen muss, das ist nichts neues.
Mag sein, dass es nichts neues ist. Ist aber eine Barriere, die nicht jeder findet. Und tote Links, die nicht funktionieren, sind das schlimmste, was man in einer Web Application haben kann...
Mit Zitat antworten
  #5 (permalink)  
Alt 16.07.2013, 15:18
Erfahrener Benutzer
XHTMLforum-Mitglied
 
Registriert seit: 09.10.2010
Beiträge: 154
MitjaStachowiak befindet sich auf einem aufstrebenden Ast
Standard

Also wenn man einen Link anklickt, öffnet sich doch das Popup, oder?
Auf jeden Fall mit target="_blank" - ist halt kein Fensterchen, aber was soll's?

Ich dachte, das PDF stünde nicht sofort zur Verfügung und müsste nachträglich per Timer o.Ä. geöffnet werden.

Und wie gesagt: Ich würde mal testen, ob man mit einer Abfrage, wie if (window.open(...)) nicht einfach testen kann, ob das Popup da ist, und wenn nicht eine entsprechende Meldung anzeigen.

[EDIT:] Ja, acb1980 schreibt ausdrücklich, dass das PDF nicht sofort zur Verfügung steht. Also ich würde da verschiedene Möglichkeiten durchtesten: Erstmal window.open aufrufen, wenn das nicht geht, den Trick mit document.getElementsByTagName('a')[x].click() (natürlich in einem try..catch) wenn das auch nicht geht eben eine Lösung mit Frame einbauen, oder den User darauf aufmerksam machen. Wenn es probleme macht, zu testen, ob das fenster offen ist, einfach erstmal eine html-seite in das fenster laden, die per Javascript der ursprünglichen Seite mitteilt, dass das Fenster offen ist und die sich dann selbst auf das PDF neulädt (self.location.href = "Das PDF").

Ist etwas aufwändig, aber was anderes fällt mir nicht ein.

Geändert von MitjaStachowiak (16.07.2013 um 15:32 Uhr)
Mit Zitat antworten
  #6 (permalink)  
Alt 16.07.2013, 16:59
Benutzer
neuer user
 
Registriert seit: 18.06.2013
Beiträge: 76
vanDerb befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von acb1980 Beitrag anzeigen
Ich verstehe nicht ganz, was du damit meinst...?
- onclick-handler auf eine temporärer Seite setzen
- diese speichert in die Datenbank
- danach wird eine Weiterleitung zum PDF ausgeführt


Beispiel

Code:
1. onClick-Handler (Beispielweise auf einem Forumlar)
2. Abfangen der Parameter und Absenden des Ajax-Requests
3. Ausgabe der PDF

Natrürlich sollte das Ganze aus Sicherheitsgründen auf POST-Parameter umgemünzt werden. Die temporäre Seite muss also die Request-Parameter des Formulars serverseitig abgreifen.

Gruß

Geändert von vanDerb (16.07.2013 um 17:06 Uhr)
Mit Zitat antworten
  #7 (permalink)  
Alt 18.07.2013, 15:53
Neuer Benutzer
neuer user
Thread-Ersteller
 
Registriert seit: 25.12.2010
Beiträge: 21
acb1980 befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von MitjaStachowiak Beitrag anzeigen
Also wenn man einen Link anklickt, öffnet sich doch das Popup, oder?
Auf jeden Fall mit target="_blank" - ist halt kein Fensterchen, aber was soll's?
Mehr möchte ich sowieso nicht. Ein Fenster mit target="_blank" reicht vollkommen aus, nur darf es eben erst dann geöffnet werden, wenn die Inhalte via AJAX gespeichert wurden.

Zitat:
Zitat von MitjaStachowiak Beitrag anzeigen
Und wie gesagt: Ich würde mal testen, ob man mit einer Abfrage, wie if (window.open(...)) nicht einfach testen kann, ob das Popup da ist, und wenn nicht eine entsprechende Meldung anzeigen.
Das ist mir vorgestern auch noch eingefallen – und genau so mache ich es jetzt auch. Wird kein PopUp geöffnet erscheint ein kleiner Hinweis in einem entsprechend gestalteten Div mit einem normalen Link und target="_blank". Da der Hinweis erst erscheint, wenn die Inhalte gespeichert wurden, kann das PDF ja dann sofort aufgerufen werden.
Mit Zitat antworten
Antwort

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Javascript soll neues Fenster öffnen Sunlion Javascript & Ajax 2 22.08.2009 18:47
Javascript soll neues Fenster öffnen Sunlion CSS 0 22.08.2009 16:50
Mit JavaScript neues Fenster mit vordefiniertem Inhalt öffnen lomtas Javascript & Ajax 16 04.02.2009 13:04
Input Image - Link im selben Fenster öffnen Ares (X)HTML 2 16.10.2006 10:12
mit <input Button neues Fenster öffnen? Angelwaffe CSS 10 16.03.2006 13:21


Alle Zeitangaben in WEZ +2. Es ist jetzt 16:59 Uhr.