任何人都有解决Internet Explorer中"剩余n项"问题的想法?

CMP*_*mer 31 css asp.net jquery internet-explorer jquery-ui

在我的ASP.Net应用程序,它是javascript和jQuery重,但也使用母版页和.Net Ajax片段,我一直在IE 6的状态栏(偶尔IE 7)看到消息"剩下2个项目"或"剩下15项",然后是"加载somegraphicsfile.png | gif".这条消息永远不会消失,可能会或可能不会阻止某些页面功能运行(它肯定似乎陷入困境,但我并不积极).

我可以通过刷新.aspx年龄使99%的时间发生这种情况,但项目数量,有时候,它提到的文件会有所不同.通常是2,3,12,13或15.

我用Google搜索了答案,并提出了一些建议或解释.他们中的一些人没有为我们工作,其他人对我们实施或尝试不切实际.

以下是一些想法/理论:

  • IE不是正确缓存图像,因此如果在页面上重复图像并且服务器假定它应该在本地缓存,则它会重复请求相同的图像,因为它已经在该页面上下文中提供了它.IE正确显示图像,但坐着等待从未到来的服务器响应.通常,页面上会重复它说它正在等待的文件.

  • 该页面使用具有透明度的PNG图形.确实如此,但它们是jQuery-UI Themeroller生成的图形,根据jQuery-UI人员,IE是安全的.jQuery-UI组件是使用PNG的唯一内容.如果有帮助的话,我们所有的PNG引用都在CSS中.我已经将一些图形从PNG更改为GIF,但它可能会说它正在等待somegraphicsfile.png,就像somegraphicsfile.gif一样

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

  • IIS的缓存策略使浏览器混乱.如果这是真的,那么只有Microsoft服务器SW出现微软浏览器的问题(这根本不会让我感到惊讶).不幸的是,我没有太多控制将托管应用程序的IIS配置.

有谁见过这个并找到了打击它的方法?特别是在使用jQuery和jQuery-UI的ASP.Net应用程序上?

UPDATE

另一个数据点:在至少一个页面上,只是注释掉jQuery-UI Datepicker组件设置会导致问题消失,但我不认为(或者至少我不确定)是否修复了所有问题的页面.如果它"修复"它们,我将不得不换掉插件,因为该功能需要存在.目前在IE6/7上似乎没有针对jQuery-UI的任何公开问题......

更新2

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

我有另一个更简单的页面,我可以始终如一地创建错误.我正在使用jQuery-UI 1.6rc6文件(尽管我也尝试过jQuery-UI 1.7.1,结果相同).只有当我刷新包含jQuery-UI Datepicker的页面时才会出现此问题.如果我注释掉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母版页中包含的脚本中的$(document).ready事件中创建的.在此客户端页面上,本地脚本的$(document).ready事件具有在特定条件下销毁日期选择器的脚本.我们不得不使用"destroy",因为以前版本的datepicker遇到了"禁用"问题.当我们升级到最新版本的jQuery UI(1.7.1)并用"禁用"替换了"destroy"s为datepickers时,问题就消失了(或者大部分都消失了 - 如果你在页面上做得太快的话正在加载,仍然可以获得"n项剩余"状态).

我关于发生的事情的理论是这样的:

  1. 页面内容加载并有12个左右的文本框与datepicker类.
  2. 母版页脚本在这些文本框上创建日期选择器.
  3. IE独立地对每个日历图形的请求进行排队,因为IE不知道如何正确缓存动态图像请求.
  4. 在处理请求之前,客户区脚本会销毁这些日期选择器,因此不再需要图形.
  5. IE留下了一些孤立的请求,它们不知道该怎么做.

scu*_*ffe 10

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

<style>
  body * {
    behavior:url(anyfile.htc);
  }
</style>
Run Code Online (Sandbox Code Playgroud)

然后没有我知道的解决方案,IE浏览器上提交错误报告 IE8(和IE7)的反馈在两个版本中被拒绝,并附有以下全面的固定声明:

这是IE中的已知错误,也发生在以前的IE版本中.您在状态栏中看到数百个请求的原因是因为IE尝试从页面上的每个元素反复读取磁盘中的htc文件.不幸的是,目前我们还没有计划解决这个问题.我们将在IE的未来版本中考虑这一点.

此致,IE团队

由于这是IE7发展收到了同样的答复,我不会坚持我的呼吸EVER具有这种固定.

更新:

根据您的更新说明另外一个想法.如果页面响应不充分,就像它仍在加载某些内容一样,请检查呈现的DOM内容是否有任何调用document.write() {您可能没有添加它们,但lib可能有}.

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

PS这里是一个链接,你可以保存为书签(右键单击"添加到收藏夹..."),它将显示生成的DOM,因为IE看到它(一个丑陋的quoteLess = CaMelCaSeMeSS)搜索结果找到任何可能导致问题的古怪代码.

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

javascript:'<xmp>'+window.document.body.parentNode.outerHTML+'</xmp>';
Run Code Online (Sandbox Code Playgroud)


Mit*_*ers 7

我之前遇到过类似的问题,这是因为在页面中间有一个长时间运行的JS片段,浏览器在完成下载站点的附加文件之前等待它完成执行.

我不确定这对你是否是一个问题,但它以类似的方式表现出来.