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