在iFrame(jQuery)中检测DOM就绪状态
我有一个脚本在一个文档中运行,该文档可能嵌套在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 }); }
我已经阅读过这篇文章 ,但我没有看到我的具体问题的答案。 我可能误解了那里的解决方案,所以请随时纠正我。
编辑:这似乎是一个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();}
您可以在iframe BODY标记的末尾放置SCRIPT标记。
然后在那里添加你的代码,它将在iframe主体加载时执行。
您可以运行iframe的本地JS代码,也可以调用父代中的对象,如:
...
根据我的经验,IE中的onload事件不可靠。
即:它不会等待在iframe中的JS内部在加载之前加载。