我惊讶地发现以下似乎不起作用,因为 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 level zeroonload
可以工作。
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(); });
尽管如此,最好知道第一种方法是怎么回事......