0

まず、この質問の冒頭で、私が IE をどれほどひどく嫌っているのかを説明したいと思います。IE によって引き起こされた悪夢から夜中に目が覚めることがあり、叫びながらベッドから飛び起きたり、周囲の人を容赦なく殴ったりすることがあります。私の隣人はそれを嫌います。「IE」と聞くだけでゾッとする。しかし、私は脱線します。

とにかく、AJAX を介して (別のビューを介して) 新しいページを起動し、グラフを表示する MVC Web アプリのページがあります。ただし、問題は、IE でのみ新しいウィンドウを開くと、スクリプトが読み込まれないことです (または、少なくとも時間内に読み込まれませんか?)。 jQuery オブジェクト。

ただし、リロードすると、すべてが正常にロードされます。スクリプトが IE に読み込まれない原因は何ですか? Chrome と FF は正常に動作します。

新しいウィンドウに使用する ajax 呼び出しは次のとおりです。

$.ajax({
                type: "POST",
                url: actionURL + qs,
                data: $(this).serialize(),
                success: function (outputString) {
                    //$("#reportJSON").html(outputString).fadeIn();
                    var contentFromFirstPage = document.getElementById('reportArea').innerHTML;
                    var printContent = outputString;
                    var windowUrl = 'about:blank';
                    var uniqueName = new Date();
                    var windowName = 'Print' + uniqueName.getTime();
                    var printWindow = window.open(windowUrl, windowName, 'scrollbars=1,menubar=1,height=800,width=600,resizable=1');
                    printWindow.document.write(printContent);
                    printWindow.focus();
                    //printWindow.document.close();

                }
            }).error(function (response) {
                alert("something went wrong here with PrintPreview!!!" + response);
            });

ajax が呼び出すアクションは次のとおりです。

public ActionResult PrintPreview(string reportId, string date, string dateFrom, string dateTo)
        {
            Reports reports = new Reports
            {
                ReportId = Convert.ToInt64(reportId),
                Date = Convert.ToDateTime(date),
                DateFrom = Convert.ToDateTime(dateFrom),
                DateTo = Convert.ToDateTime(dateTo),
                AvailableReports = this.FetchAvailableReports()
            };



            reports.AvailableReports = this.FetchAvailableReports();
            reports.SelectedReport = this.FetchReportLayout(reports.ReportId);
            reports.DynamicGridDataSource = this.FetchReportGrid(reports);
            reports.DynamicChartDataSource = this.FetchReportChart(reports);

            return renderViewToString("PrintPreview", reports);
        }
4

1 に答える 1

1

OK、ディスカッションから、答えをパントします!

それについて考えてみると、IE によって引き起こされる痛みを伴うことがよくありますが、生のコードのバグ/実装の違いにすぎず、実際にブラウザーの動作を書き換えることができなければ、本質的に運が悪い-多くのようにIE だけに必要な CSS ハック。

ただし、投稿したコードを見ると、ajax 呼び出しが現在のページを取得し、それを処理して、印刷に適した形式の HTML の読み込みを返すと思いますか? この HTML は新しいウィンドウに出力されます...

これを回避する唯一の方法は、アーキテクチャを少し変更することです。新しいウィンドウでページを開く必要があり、そのページで ajax 呼び出しを行ってコンテンツを入力します。

ただし、私見によると、Ajax 呼び出しの実際の用途は、更新せずに同じウィンドウ、ページ、およびコンテンツにとどまることができることです。新しいウィンドウを開いているので、クエリ文字列にレポート ID、日付、DateFrom、DateTo を含む単純な URL の方がうまくいくと思いましたか?

時間の問題である場合 (レポートの生成に時間がかかる場合)、個人的にはコンテンツを新しいウィンドウに渡し、新しいウィンドウ スクリプトでそれをdiv.

setTimeoutそして、これをIEハックを使用するのではなく、クロスブラウザソリューションとして見てください;)

于 2012-06-22T12:35:26.283 に答える