jQuery没有在新的IE窗口中加载

时间:2012-06-21 14:16:44

标签: c# javascript jquery asp.net internet-explorer

首先,我想通过表达我讨厌IE的不可思议的事情来预先提出这个问题。有时候我会在半夜醒来时因IE引起的噩梦,让我从床上跳起来尖叫,有时甚至无情地殴打我周围的人。我的邻居讨厌它。只是听到“IE”让我感到畏缩。但我离题了。

无论如何,我在我的MVC网络应用程序上有一个页面,它通过AJAX(通过不同的视图)启动一个新页面并显示一个图表。但问题是,当我打开新窗口时,仅在IE中,脚本未加载(或者至少它们没有及时加载?)但是我在第一次引用时得到“jQuery未定义” 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);
        }

1 个答案:

答案 0 :(得分:1)

好的,从讨论开始,我要回答一下!

考虑它,以及它经常与IE引起的痛苦,它只是原始代码中的错误/隐藏差异,并且实际上没有能够重写浏览器行为,实质上是运气不好 - 很多就像IE中许多必需的CSS黑客一样。

然而,从你发布的代码看,我假设ajax调用取当前页面,用它做一些东西并返回一个打印友好格式化的HTML加载?然后将此HTML打印到新窗口中......

现在解决这个问题的唯一方法就是对你的架构稍作修改;新窗口需要打开一个页面,并在该页面上调用ajax来弹出内容。

但是,我会说,恕我直言,Ajax调用的真正用途是你可以保持在同一窗口,页面和内容中而无需刷新。当你打开一个新窗口时,我认为只有一个直接的URL,查询字符串中的报告ID,日期,DateFrom和DateTo会更好吗?

如果是时间问题(报告需要一段时间才能生成),那么我个人只是将内容传递到新窗口,并让新窗口脚本将其注入div

然后将其视为跨浏览器解决方案,而不是使用setTimeout IE浏览器;)