【问题标题】:IE6 crashes with this jQueryIE6 使用这个 jQuery 崩溃
【发布时间】:2024-01-22 09:43:01
【问题描述】:

以下代码每次都会导致 IE6 崩溃。它不断刷新页面并在一分钟后崩溃:

$(window).bind("load resize", function () {
    var hnf = $('#header').height() + $('#footer').height();
    $('#main').height($(window).height() - (hnf));
    $('.fluid').height($('#main').outerHeight());
    $('#content').width($('#main').width() - $("#aside").width() - 90);
});

..是什么原因造成的?

编辑:好的,$(window).bind("load resize", function () { 中的“调整大小”导致它,我该如何解决?

非常感谢您的帮助!

【问题讨论】:

  • 如果每次 IE6 让我生气时我都能得到一美元,那我会很有钱,并且是地球上最生气的富人。
  • 您会因为该评论而获得大量代表。我希望我能得到我的解决方案。 :)
  • 在没有 XP SP2 的情况下会发生这种情况吗?因为没有XP SP2的IE6用jQuery一直崩溃,SP2解决了。
  • 即使它是一个浏览器错误,您也可以尝试不同版本的 jQuery 来查看是否可以正常工作。然后,如果你找到了一个工作版本,你可以查看源代码,看看是什么引发了 IE6 中的错误,以及工作版本是如何“修复”或“没有破坏”它的。这是一段很长的路要走。
  • Test Swarm project for jQuery 提供支持的浏览器的测试结果。从此页面中选择一个提交:testswarm.com/user/jqueryui 然后您将看到每个支持的浏览器的每个相应 jQuery 部分的状态,如下所示:testswarm.com/job/111 您将找到有关各种浏览器的故障(红色标记)的答案,因此您将知道它是否不仅仅是您的计算机。不过我认为他们只使用最新的浏览器服务包,因此在 IE6 上可能没有低于 SP2 的官方测试结果。

标签: javascript jquery crash internet-explorer window


【解决方案1】:

即使文档正文尺寸发生变化,IE6 似乎也会错误地触发 onResize 事件。这是link with more information

我会寻找一种非 jQuery 的方式来做你想做的事。如果你使用 CSS 来控制页面的固定大小的元素,浏览器不会自己处理可变大小的元素吗?

【讨论】:

  • 谢谢,但我几乎不知道任何 JS 可以对我的代码实施修复。你能帮忙吗?谢谢!
【解决方案2】:

修复Drew Wills links to 听起来应该可以工作。试试:

var prevHeight;
$(window).bind("load resize", function () {
  var height = $(window).height();
  if ( prevHeight == height ) 
     return; // hack to prevent recursion in IE6
  prevHeight = height;

  // resize content
  var hnf = $('#header').height() + $('#footer').height();
  $('#main').height(height - (hnf));
  $('.fluid').height($('#main').outerHeight());
  $('#content').width($('#main').width() - $("#aside").width() - 90);
});

随意修饰一下(将 prevHeight 附加到其他东西等)。

【讨论】:

  • 在这种情况下,您需要一些更聪明的东西...尝试修复 Drew Wills 链接到的问题。
【解决方案3】:

我认为这可能与您尝试在没有 CSS 的情况下设置高度和宽度的事实有关。我不确定,但如果我要这样做,我会使用 JQUERY .css() 方法来设置他的高度和宽度。所以它看起来像这样,

$(window).bind("load resize", function () {
    var hnf = $('#header').height() + $('#footer').height();
    $('#main').css("height", ($(window).height() - hnf));
    $('.fluid').css("height", ($('#main').outerHeight()));
    $('#content').css("width", ($('#main').width() - $("#aside").width() - 90));
});

这可能行不通,我没有测试过。

【讨论】: