在iFrame(jQuery)中检测DOM就绪状态

时间:2010-02-01 17:18:23

标签: javascript jquery dom iframe fancybox

我有一个脚本在一个文档中运行,该文档可能嵌套在iframe中,也可能不嵌套在iframe中。我已经解决了检测嵌套的问题,但我无法弄清楚当它是iframe时如何检测DOM的就绪状态。

这是我已经拥有的:

if (window.self !== window.top) {
    // is nested
    // DOM ready test here
        // execute code here
} else {
    // is not nested
    $(document).ready(function() {
        // execute code here
    });
}

我已经阅读了this post,但我没有看到我的具体问题的答案。我可能误解了那里的解决方案,所以请随意纠正我。


编辑: 这似乎是一个Fancybox问题。这段代码:

alert(document.getElementById('username').className);
document.getElementById('username').focus();

我看到一个具有正确值的警报,但表单元素没有收到焦点。这告诉我,检测DOM的就绪状态不是问题。我试图使用的原始脚本是:

$(document).ready(function() {
    $('input.focus:last').focus();
});

编辑2 /解决方案: 我不得不求助于Fancybox特定的解决方案,因为它似乎是特定于Fancybox的问题。我将这一行添加到这些Fancybox iframed表单的配置中:

'onComplete':function(){$('input.focus:last').focus();}

1 个答案:

答案 0 :(得分:4)

您可以在iframe BODY标记的末尾放置SCRIPT标记 然后在那里添加你的代码,它将在加载iframe主体时执行。

您既可以运行iframe的本地JS代码,也可以调用父代中的对象,如:

<body>
  ...
  <script>
    parent.myObj.iframeLoaded(document.body);
  </script>
</body>

根据我的经验,IE中的onload事件不可靠 即:它不会等待在iframe中的JS内部在加载之前加载。