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

在IE8中,获取对嵌套框架对象的引用并不是每次都有效。它在添加警报()时工作!

  •  1
  • Tony_Henrich  · 技术社区  · 14 年前

    我对IE8有个奇怪的问题。我正在尝试获取对帧(同一域)对象的引用。帧驻留在iframe中。iframe驻留在多层div的深处,整个html是一个ASP.NET服务器控件。获取引用的jQuery代码是 jQuery(top.window.frames['the_iFrame'][1].document).contents()[0] . 代码驻留在jQuery ready()函数中。(iframe id是动态生成的,并且有代码来获取id)。

    这在Firefox中每次都有效。然而在IE8中,有时对象是空的。 但是 如果我在上面的jQuery代码前面放置一个dummy alert(),它就会工作 每次 在IE8中。我不知道为什么,但我猜这和挂起的代码执行有关?alert()无法剪切它,因此我尝试在包含延迟的循环中获取引用,认为可能需要一些时间,但没有帮助。

    :为什么放置警报会使代码在IE中工作?有没有办法用非视觉的东西来伪装警报的好副作用?为什么它不能在IE中可靠地工作?

    1 回复  |  直到 14 年前
        1
  •  1
  •   Pointy    14 年前

    <iframe> 不会再等了 <iframe> 装载。

    1. 如果你能做到的话,最可靠的办法可能就是把责任推卸掉。让框架内的页面将信息从自己的“就绪”处理程序推送到父页面。

    2. 如果您不能影响对 <iframe>

      function waitForFrame(whenReady) {
        function doWait() {
          var obj = jQuery(top.window.frames['the_iFrame'][1].document).contents()[0];
          if (obj)
            whenReady(obj);
          else
            setTimeout(doWait, 100);
        }
        setTimeout(doWait, 100);
      }