2

だから私は信じているややユニークな問題を抱えており、それを回避する最善の方法は何なのかわかりません。過去にすべてのブラウザーで正常に機能していたレガシー コードがいくつかありますが、突然 IE10 で機能しなくなりました。それがどのように機能し、何が問題だと思うかをできる限り説明しようと思います。

ユーザーが自分のアカウント履歴を QIF、CSV などとしてダウンロードするオプションがあるオンライン バンキング ページに取り組んでいます。このページは、クラシック ASP および VB サーバー コードで記述されています。この機能が動作する方法は、ユーザーがダウンロード ボタンをクリックすると、クリック可能な一連の画像 (ダウンロード ファイルの種類ごとに 1 つずつ) を含むページがリロードされることです。クリックしたフォームに基づいて、javascript 関数が呼び出され、ページ上の非表示のフォームが送信され、2 つ目の非表示のフォームが送信されて、元のビューにアカウント履歴とフィルターが再度読み込まれます。最初のフォーム アクションは、ファイルを構築する asp ページを呼び出し、通常はブラウザーにファイルのダウンロードを促す応答添付ファイルとして返します。次に、2 番目の送信アクションは、履歴の詳細を含む元の ASP ページです。IE10 では、ファイルは

私が探して見つけたのは、2番目のフォームを送信するjavascript行をコメントアウトすると、ダウンロードが機能するため、送信が非同期で行われ、リダイレクトがダウンロードの前に返されることだと思います。またはそのようなもの。わからない。機能を完全に書き直すことなく、回避策を見つけようとしています。何かご意見は?

編集:

これがすべて発生するページは accountDetails.asp です

JavaScript --

function SetOFX(type){
    // There is some code that does conditional handling of the @type parameter
    document.forms.DownloadForm.submit();
    document.forms.Finished.submit();
    return false
}

ダウンロードフォーム --

<form name="DownloadForm" id="DownloadForm" action="downloadofx.asp" method="post">
    <!-- a bunch of input type="hidden" elements -->
</form>

完成形 --

<form name="Finished " id="Finished " action="accountDetails.asp" method="post">
    <!-- a bunch of input type="hidden" elements -->
</form>

そのため、DownloadForm は別の ASP ページを呼び出してダウンロード ファイルを取得し、Finished フォームは、ダウンロード イメージ ボタンを表示する代わりに、ユーザーが既にアクセスしているページに投稿してアカウント履歴の詳細をリロードします。そもそもこれは本当に悪い方法だと思います。これは学習中の人々によって書かれたレガシー コードであり、すでに何百ものクライアントが本番環境で使用しているため、上司やすべてのクライアントからの主要なプロジェクトの承認なしに書き直すことはできません。

4

2 に答える 2

0

最終的にたどり着いた答えがこちらです。上記の javascript はそもそも機能するはずがありませんでした。実際、テストした結果、多くの場所で機能していないことがわかりましたが、気になった部分 (ファイルのダウンロード) は常に機能していました。IE10 までは、すべてのブラウザーは、2 つのフォームをそのように送信するべきではないことを十分に認識しており、最終的に 2 番目の送信を無視していました。ただし、IE10 は両方を処理しており、ファイルのダウンロード前にリダイレクトが返されていました。自動リダイレクトは気にしなかったので、その送信を取り除き、代わりに完成したフォームに送信ボタンを追加して、ユーザーが手動で前のビューに戻ることができるようにしました。

修正された Javascript --

function SetOFX(type){
    // There is some code that does conditional handling of the @type parameter
    document.forms.DownloadForm.submit();
    return false
}

固定完成形

<form name="Finished" id="Finished" action="accountDetails.asp" method="post">
    <!-- a bunch of input type="hidden" elements -->
    <input type="submit" value="Return to Account Details" />
</form>
于 2013-04-25T00:12:54.047 に答える
0

これらのアイデアをテストしたことはありませんが、現在のアーキテクチャを維持したい場合は、ファイルが完全にダウンロードされたことを検出してから移動することができます.

この質問を見て、ファイルがブラウザーによってダウンロードされたことを検出する方法を確認してください。

もう 1 つのアイデアは、追加のデータを渡すためにクエリ文字列パラメーターを使用して、ファイルのダウンロード リンクを指す属性を持つ単純なaリンクを優先して、最初のフォーム送信を削除することです。リンクがなくても同じ問題が発生する場合は、リンクhrefを貼り付けることもできます。taget="_blank"

于 2013-04-15T23:13:54.977 に答える