【问题标题】:Detecting DOM Ready State Within an iFrame (jQuery)在 iFrame (jQuery) 中检测 DOM 就绪状态
【发布时间】:2011-01-11 19:50:11
【问题描述】:

我在一个文档中运行了一个脚本,该文档可能嵌套在 iframe 中,也可能不嵌套。已经解决了检测嵌套的问题,但是不知道当DOM是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();}

【问题讨论】:

  • 如果您在嵌套时也使用 ready 函数,它应该可以工作...
  • $(document).ready(function() 在我的 iframe 中不起作用。这个特定的 iframe 是由 Fancybox 动态生成的。不过,我想要一个不特定于 Fancybox 的解决方案。跨度>

标签: javascript jquery dom iframe fancybox


【解决方案1】:

您可以在 iframe BODY 标记的末尾放置一个 SCRIPT 标记。
然后在此处添加您的代码,它将在 iframe 正文加载时执行。

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

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

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

【讨论】:

  • 我的脚本在一个文件中,该文件在结束正文标记之前被引用。我想我要么缺少对 iframe 中 DOM 的理解,要么 Fancybox 代码使某些东西短路。
  • 在上面的脚本标签中,您只需输入命令来启动某些东西。如果您只放置一个警报(“某事”);发生什么了? Fancybox(我不知道)可能也在做她的事情,但应该会弹出警报。你的 JS 文件应该在你在 iframe 中加载的文件的头部。
  • 您的建议让我找到了答案,所以我将您的建议标记为解决方案。
猜你喜欢
  • 2021-07-10
  • 2012-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-14
  • 1970-01-01
  • 2023-03-05
  • 1970-01-01
相关资源
最近更新 更多