Formular mit target="_ blank" Verhalten in IE 9 und 10 geändert

9

Ich habe eine App, die etwa den folgenden Code verwendet, um einen dynamisch generierten Bericht auf einer neuen Registerkarte zu öffnen. (Ich habe die Parameter für eine Demo verspottet.)

%Vor%

Der Parameter pdf gibt nur die URL des Skripts an, das die PDF generiert. Der Grund für die form -Manipulation besteht darin, die Parameter POST ed an das Skript und nicht als GET -Parameter abzurufen.

In IE 8 und darunter, Chrome, Firefox usw., wird dies eines von zwei Dingen tun:

  1. Wenn der Browser PDFs lesen kann (über eingebaute Funktionalität oder ein Plugin), öffnet sich ein neuer Tab mit dem Bericht, was das gewünschte Verhalten ist.
  2. Wenn der Browser keine PDFs lesen kann, öffnet er die neue Registerkarte, schließt sie sofort und lädt die Datei herunter.

Es scheint, dass sich # 2 in IE 9 und höher geändert hat. Es wird ein neuer Tab geöffnet, aber es wird nur ein leerer Bildschirm angezeigt, bis der Benutzer zurück zum ursprünglichen Tab wechselt, auf "Öffnen" oder "Speichern" klickt und das PDF dann wie erwartet herunterlädt. Es ist eine sehr verwirrende Schnittstelle.

Ich denke, eine Möglichkeit, dies zu umgehen, wäre, eine temporäre PDF-Datei zu erzeugen, und dann einfach window.open () dazu. Gibt es andere Möglichkeiten, das Verhalten dieser Funktionalität zu optimieren? Oder gibt es eine empfohlene Praxis, auf die ich nicht gestoßen bin?

(Hinweis: Dies ist überhaupt nicht PDF-spezifisch; jede Datei, die der Browser herunterladen könnte anstatt nativ zu erscheinen, scheint problematisch zu sein.)

BEARBEITEN : Sieht aus, als wäre ich weiter hinter der Kurve, als mir klar war. Es scheint, dass dies auch in IE9 auftritt, und ich habe es nie bemerkt, da ich es nie ohne das installierte PDF-Plugin oder mit einem anderen Dateityp versucht habe.

Interessanterweise funktioniert der obige Code wie erwartet, wenn ich das Feld input aus dem Formular entferne . Ich bin mir nicht sicher, warum der Browser das anders behandeln würde. Natürlich brauche ich in meinem Fall die Eingabe von POST data für mein Skript.

EDIT 2 : Dummer Fehler. input ist selbstschließend. Behoben.

EDIT 3 : Hier sind einige Screenshots, um das Problem besser zu erklären. Ich verwende dieses JSBin zum Testen. Ich habe ein onclick-Ereignis, um die Javascript-Funktion oben auszulösen.

Der Prozess beginnt auf der ersten Registerkarte.

Nachdem Sie auf den Text geklickt haben, wird eine neue Registerkarte geöffnet. Aber es ist leer!

Und es stellt sich heraus, dass auf der Registerkarte Original (jetzt ausgeblendet) eine Meldung angezeigt wird, ob die Datei geöffnet oder gespeichert werden soll.

Wenn Sie auf "Öffnen" oder "Speichern" klicken, wird die Datei problemlos geöffnet. Aber der Prozess ist schrecklich verwirrend und inkonsistent mit anderen Browsern.

EDIT 3 : Ein Schritt vorwärts, einer zurück. Wenn ich window.open() benutze, um ein neues Fenster zu erstellen, und dann form.target programmgesteuert auf den Namen dieses Fensters setze, kann ich zumindest die Open / Save-Nachricht in der geöffneten Registerkarte erhalten ... obwohl ich es viel lieber hätte Schließen Sie den Tab sofort wie andere Browser. Schlimmer noch, bei dieser Technik wird der neue Tab nicht mehr sofort geschlossen. Vielleicht gibt es eine andere Technik?

    
David Alan Hjelle 11.02.2013, 23:04
quelle

1 Antwort

1

Eine Off-Shot-Lösung wäre es, IE- und PDF-Plugin-Availability zu erkennen und dann das 'target' -Attribut auf '_self' in (& gt; IE9 & amp; & amp; .plugin) -Situation zu setzen. Ich habe PluginDetect gefunden, das die Erkennung von AdobeReader-Plugins beansprucht.

Alles in allem ist es eine ziemlich hässliche und unzuverlässige Methode, sollte aber in einigen Fällen Ergebnisse liefern.

    
Bizniztime 13.02.2013, 10:56
quelle