【发布时间】:2020-03-10 06:54:06
【问题描述】:
我惊讶地发现以下似乎不起作用,因为 DOMContentLoaded 事件没有触发(this.els 是元素的对象)。
this.els.stage_ifr.prop('src', 'templates/'+ee.globals.creating+'/item'+this.id);
this.els.stage_ifr[0].addEventListener('DOMContentLoaded', function() {
alert('loaded!');
}, false);
页面加载到 iframe 中正常,但没有回调。但是,DOM 零级 onload 可以工作。
this.els.stage_ifr[0].onload = function() { alert('loaded!'); }; //<-- fires
一种解决方法是在父页面中准备一个全局可访问的 jQuery 延迟对象,并通过调用 iframe 的页面触发 DOM-ready 事件来解决它,而不是从父页面监听 DOM-ready。
父页面:
dfd = new $.Deferred;
dfd.done(function() { alert("frame page's DOM is ready!"); });
框架页面:
$(function() { window.parent.dfd.resolve(); });
尽管如此,了解第一种方法的情况会很好......
【问题讨论】:
-
我提供了一个指向 MSDN 的链接:iframe element。正如您在该页面上看到的那样,
DOMContentLoaded不能附加到iframe。 -
有趣 - 如果框架属于同一域,我应该认为这非常好。如果这确实是案例结束,请随时将其作为答案发布,我会接受。
-
您可以尝试将
DOMContentLoaded(仅限document的方法)附加到stage_ifr[0].contentDocument,我只是不确定它是否在您需要的时候存在。 .. -
我会试一试的。 jQuery deferred 解决方法可以在不可行的情况下工作。谢谢。
标签: javascript events dom iframe domready