有人有办法解决Internet Explorer上的“n项剩余”问题吗?

在我的ASP.Net应用程序中,它大量使用javascript和jQuery,但也使用母版页和.Net Ajax片段,我一直在IE 6(偶尔也有IE 7)的状态栏上看到消息“剩余2项”或“剩余15项”,然后是“loadingsomegraphicsfile.png | gif”这条消息永远不会消失,可能会也可能不会阻止某些页面功能的运行(它看起来确实停滞不前,但我并不肯定)

我可以通过刷新一个.aspx版本使99%的情况发生,但是项目的数量,有时,它提到的文件是不同的。通常是2、3、12、13或15

我在谷歌上搜索了答案,这里有一些建议或解释。其中一些对我们不起作用,而另一些对我们来说实施或尝试并不实际

以下是一些想法/理论:

  • IE没有正确缓存图像,因此如果图像在页面上重复,它会重复请求相同的图像,并且服务器认为应该在本地缓存图像,因为它已经在该页面上下文中提供了该图像。IE正确地显示图像,但会坐在那里等待永远不会出现的服务器响应。通常,它所说的正在等待的文件会在页面上重复

  • 页面使用的是透明的PNG图形。的确是这样,但它们是jQuery用户界面的开发者生成的图形,据jQuery用户界面的人说,这些图形是IE安全的。jQuery UI组件是唯一使用PNG的组件。如果有帮助的话,我们所有的PNG引用都是CSS格式的。我已经将一些图形从PNG更改为GIF,但它很可能会说它正在等待somegraphicsfile.PNG,就像它在等待somegraphicsfile.GIF

  • 图像是在CSS和/或JavaScript中指定的,但位于当前未显示的内容上(例如显示:无项)。这可能是真的,但如果是真的,那么我认为预加载图像会起作用,但到目前为止,添加预加载程序没有任何好处

  • IIS的缓存策略使浏览器混乱。如果这是真的,那么只有Microsoft服务器软件与Microsoft的浏览器存在问题(这一点我都不感到惊讶)。不幸的是,我无法控制将承载应用程序的IIS配置

有没有人看到了这一点,并找到了与之抗争的方法?特别是在使用jQuery和jQuery UI的ASP.Net应用程序上

更新

另一个数据点:在至少一个页面上,仅仅注释掉jQueryUIDatePicker组件设置就会导致问题消失,但我不认为(或者至少我不确定)这会修复所有页面。如果它真的“修复”了它们,我将不得不更换插件,因为那个功能需要存在。IE6/7上的jQueryUI目前似乎没有任何公开问题

更新2

我检查了IIS设置,在我的任何文件夹上都没有设置“启用内容过期”。取消选中该设置是解决此问题的常见建议

我有另一个更简单的页面,我可以一直在上面创建错误。我使用的是jQueryUI1.6rc6文件(尽管我也尝试了jQueryUI1.7.1,结果相同)。只有当我刷新包含jQueryUIDatePicker的页面时,问题才会出现。如果我注释掉Datepicker设置,问题就会消失。当我这样做时,我注意到以下几点:

  1. 此页面始终显示“(剩余1项)下载图片http:///images/Calendar_scheduleHS.gif,但仅在重新加载时
  2. 当我查看HTTP日志记录时,我发现每次动态打开该映像时,它都会从服务器请求该映像,而不考虑缓存
  3. 该图形的所有请求都已完成,并正确返回该图形。没有标记为代码200或304(表示服务器正在告诉IE使用缓存版本)。为什么它说当所有的请求都完成了,我不知道为什么还要等待那张图
  4. 页面上还有一个单独的其他图形(一个UI PNG文件),其代码为304(未修改)。在另一个页面上,我用“剩余2个项目”记录了HTTP流量,两个不同的图形文件(都是UI PNG)也有一个304(但都没有列为“下载”的)
  5. 此错误不是无害的-页面没有完全响应。例如,如果我单击其中一个应执行客户端操作的按钮,页面将刷新
  6. 离开页面并返回不会产生错误
  7. 我已将脚本和脚本引用移动到内容的底部,这不会影响此问题。但脚本仍在$(document).ready()中运行(除非我必须这样做,否则它太复杂,无法分割)

最终更新和回答

下面有很多很好的答案和建议,但没有一个是我们的问题。最近的一个(也是我找到解决方案的那个)是关于长时间运行的JavaScript的,所以我在那里获得了奖励(我想我自己也可以回答,但我更愿意奖励那些导致解决方案的信息)

这是我们的解决方案:我们在$(文档)上创建了多个jQueryUI日期选择器。ASP.Net母版页中包含脚本中的ready事件。在此客户端页上,本地脚本的$(文档)。ready事件的脚本在某些条件下销毁了日期选择器。我们必须使用“销毁”因为以前版本的datepicker在“disable”方面存在问题。当我们升级到最新版本的jQuery UI(1.7.1)并将datepicker的“destroy”替换为“disable”时,问题就消失了(或者大部分消失了——如果在加载页面时做得太快,仍然可以得到“n个剩余项”地位)

我的理论是这样的:

  1. 页面内容加载并有12个或多个
    所以带有日期选择器的文本框
    班级
  2. 母版页脚本创建
    这些文本框上的日期选择器
  3. IE将每个请求排队
    独立日历图形
    因为我不知道怎么做
    正确缓存动态图像
    请求
  4. 在请求得到处理之前,
    客户端区域脚本将销毁
    那些日期采集器让图形
    不再需要了
  5. IE只剩下一些
    孤立的请求,它没有
    知道该怎么办

如果您在代码中的任何地方(或使用它们的库)使用行为,例如

<style>
正文*{
行为:url(anyfile.htc);
}
</style>

然后,我不知道有解决方案,IE8(和IE7)在IE反馈中提交的缺陷报告在这两个版本中均被拒绝,声明如下:

这是IE中的一个已知错误,在以前的IE版本中也会发生
在状态栏中看到数百个请求是因为IE试图读取htc文件
一次又一次地从磁盘上获取页面上的每个元素。不幸的是,此时
我们不打算修复这一点。我们将在IE.

的未来版本中考虑这一点。

致以最良好的祝愿,
IE团队

由于这与IE7开发收到的回复相同,我不会屏住呼吸来修复这个问题

更新:

根据您的更新说明,还有一个想法。如果页面响应不太快,好像它仍在加载某些内容,请检查呈现的DOM内容中是否有对document.write(){您可能没有添加它们,但库可能有}

如果它们存在,请在它们完成后尝试添加document.close();语句,这将告诉浏览器您已“完成”渲染

PS这里有一个链接,您可以保存为书签(右键单击“添加到收藏夹…”),它将显示IE看到的生成的DOM(一个丑陋的无引号=camelcasemss)搜索结果以查找可能导致问题的任何奇怪代码

IE生成源:(将此添加为任何书签的位置,编辑器不允许我链接它)

javascript:'<xmp>'+window.document.body.parentNode.outerHTML+'</xmp>';

发表评论