JQueryのAJAXリクエストを使用して、ユーザーが入力したフォームデータを含むXMLをバックエンドアプリケーションに送信し、その情報からPDFを作成するhtml/javascriptフロントエンドがあります。フロントエンドは応答として UUID を受け取り、それをダウンロード URL で使用して、生成された PDF をダウンロードします。
これは Firefox と Safari ではうまく機能しますが、スクリプトによるダウンロードに対する Internet Explorer 8 の保護によってブロックされています。生成された情報バーを介してファイルをダウンロードするように IE8 に指示すると、ページが強制的にリロードされ、入力されたユーザー コンテンツがすべて消去されます。
ボタン風要素の単一の onMouseUp イベントは、送信する XML の生成をトリガーし、XML を送信し、その応答を取得してから、window.location オブジェクトに URL を設定してダウンロードを開始します。そのダウンロードを別のボタン (1 つは xml を生成して送信し、UUID をフェッチし、もう 1 つは UUID から作成された URL を使用してダウンロードを開始するだけ) に分離すると、情報バーはバイパスされますが、インターフェイスのシンプルさと直感性が損なわれます。
関連する JavaScript 関数は次のとおりです。
function sendXml()
{
var documentXml = generateDocumentXml();
var percentEncodedDocumentXml = escape(DocumentXml);
var url = "generate?document=" + percentEncodedDocumentXml;
$.ajax({
url: url,
type: "GET",
dataType: "xml",
success: function (xml)
{
var uuid = $(xml).find('uuid').text();
getPdf(uuid);
},
error: function (xhr)
{
alert("There was an error creating your PDF template");
}
});
}
function getPdf(uuid)
{
var url = "generate?get-pdf=" + uuid;
window.location = url;
}
この問題を最もうまく処理する方法についての提案を探しています。私の最初の好みは、情報バーがまったく邪魔にならないようにすることですが、その害を最小限に抑えることは、現在の状況よりも劇的な改善になるでしょう. フロントエンド インターフェースをリロードしてワイプできず、ユーザーが情報バーのメニューから [ファイルのダウンロード...] を選択したときに実際にファイルのダウンロードに進むことができれば、それは役に立ちます。