代码之家  ›  专栏  ›  技术社区  ›  rg88

IE7中的间歇性运行时错误:发生在第0行,是否需要对象?嗯?

  •  0
  • rg88  · 技术社区  · 15 年前

    我正在工作的一个站点显示间歇性运行时错误,但仅在IE7和8中显示。此错误几乎是随机出现的(例如,它可能会在初始页面加载时弹出一次,或者直到第n个页面加载时才会弹出)。错误表明它发生在第0行,错误为“需要对象”。我在整个站点中使用jquery,但是将其分块禁用(即各种插件和其他插件)并没有解决这个问题。我仍在努力,但我想得到这个“帮助!”在StackOverflow上,以防有人以前处理过类似的事情。

    它的间歇性是真正让我头痛的原因。

    4 回复  |  直到 15 年前
        1
  •  3
  •   belugabob    15 年前

    从你的答案来看,我猜ID为“header-section”的元素在页面的顶部,有时,CSS规则会在页面的其余部分加载之前应用。这意味着表达式试图在元素存在之前计算“content-section”的offsetheight。

    关于如何处理这个问题,我有几个建议,但是您必须尝试它们,以评估它们的有用性。

    1/不要基于“header-section”的ID创建规则,而是基于“header-section”类创建规则。不要将这个类添加到标记中,而是在文档加载完成后通过jquery添加它-保持元素的ID不变…

    $(document).ready(function(){
      $("#header-section").addClass("header-section");
    });
    

    2/使规则对未找到的“内容部分”更为宽容-不确定表达式的计算频率,因为我从未觉得有必要在CSS规则中使用表达式,因此这可能不起作用。

    #header-section {margin-top: expression((0 - (this.offsetHeight + (document.getElementById("content-section") ? document.getElementById("content-section").offsetHeight : 0))) + "px");}
    

    让我知道你是怎么相处的。

    另外,我不知道这条规则要达到什么样的效果——我用假设相同的布局来模拟一个页面,它所做的就是将大量内容从页面顶部移开,以防止被人看到。

        2
  •  1
  •   DLS    15 年前

    似乎在完全创建DOM之前,脚本可能正在尝试访问对象。您确定您的函数在jquery ready函数中吗?

       $(document).ready(function() {
              // put all your jQuery goodness in here.
    
       });
    
        3
  •  0
  •   rg88    15 年前

    我知道了。只有IE的CSS文件中使用了两个表达式。例如:

    #header-section {margin-top: expression((0 - (this.offsetHeight + document.getElementById("content-section").offsetHeight)) + "px");}
    

    注释掉使用这些表达式的两个实例可以解决问题。不知道为什么会发生这种情况(我也没有写这么做的CSS,所以我甚至不知道要查看这个CSS文件)。

    它不能与其他JS发生冲突,因为至少有两个地方正在使用它,而没有加载其他JS,但仍然发生了错误。可能由于某种原因找不到ID(内容部分或标题部分)?不太确定…尤其是在行为如此不一致的情况下。六羟甲基三聚氰胺六甲醚。。。

        4
  •  0
  •   Claus    15 年前

    谢谢你的解决方案,白鲸

    我在第0行中遇到了与所需对象相同的错误。 你用“修复”这个词…?在IE样式表的CSS中,…:0完成了任务。

    使用此类代码(向上移动导航/标题)的原因与SEO相关。你希望你的内容在上面,而下面的导航则不那么重要。