C# jQuery未在新IE窗口中加载 首先,我想表达一下这个问题,我很讨厌它。有时我在午夜从IE引起的噩梦中醒来,使我从床上跳出来尖叫,有时无情地殴打我周围的任何人。我的邻居讨厌它。一听到“IE”就让我畏缩。但我离题了

C# jQuery未在新IE窗口中加载 首先,我想表达一下这个问题,我很讨厌它。有时我在午夜从IE引起的噩梦中醒来,使我从床上跳出来尖叫,有时无情地殴打我周围的任何人。我的邻居讨厌它。一听到“IE”就让我畏缩。但我离题了,c#,javascript,jquery,asp.net,internet-explorer,C#,Javascript,Jquery,Asp.net,Internet Explorer,无论如何,我的MVC web应用程序上有一个页面,它通过AJAX(通过不同的视图)启动一个新页面,并显示一个图表。然而,问题是,当我仅在IE中打开新窗口时,脚本没有加载(或者至少没有及时加载?),但我在对jQuery对象的第一次引用中得到了“jQuery未定义” 然而,在重新加载时,一切都可以正常加载。知道什么会导致IE中无法加载脚本吗?铬和FF工作良好 下面是我在新窗口中使用的ajax调用: $.ajax({ type: "POST",

无论如何,我的MVC web应用程序上有一个页面,它通过AJAX(通过不同的视图)启动一个新页面,并显示一个图表。然而,问题是,当我仅在IE中打开新窗口时,脚本没有加载(或者至少没有及时加载?),但我在对jQuery对象的第一次引用中得到了“jQuery未定义”

然而,在重新加载时,一切都可以正常加载。知道什么会导致IE中无法加载脚本吗?铬和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);
        }

好的,从讨论中,我将对一个答案做一个赌注

想想看,IE带来的痛苦是多么频繁,它只是原始代码中的一个bug/实现差异,而实际上无法重写浏览器行为,这本质上是运气不好——就像IE需要的许多CSS黑客一样

但是,从您发布的代码来看,我假设ajax调用获取当前页面,对其执行一些操作,并返回一个打印友好的HTML格式负载?然后将此HTML打印到新窗口中

现在我能想到的唯一解决办法就是对你的架构做一点小小的改变;新窗口将需要打开一个页面,并在该页面上进行ajax调用以弹出内容

然而,我想说,Ajax调用的真正用途是,您可以保持在相同的窗口、页面和内容中,而无需刷新。当您打开一个新窗口时,我认为在querystring中只需一个带有报告ID、日期、DateFrom和DateTo的直接URL会更好

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


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

脚本究竟是如何加载的?加载到新窗口的页面的代码是什么样子的?如下:
,我无法发布源代码,但代码没有任何异常。它根据用户的不同,加载telerik图表或网格context@Pointy哦,新窗口通过一个不同的视图页面。几年前,我曾经遇到过一个类似的问题。解决方案是,我将javascript包含在页面底部(在新窗口中打开的页面)。希望这同样适用于you@RemarkLima是的,它们是,但这并不重要,因为
$().ready()
中的
$
只是jQuery对象的别名,所以不管怎样,它都会在调用时失败