Javascript 如何知道iframe何时已完成加载DOM,但尚未加载所有图像?
我的网页有一个iframe,当用户单击Javascript 如何知道iframe何时已完成加载DOM,但尚未加载所有图像?,javascript,Javascript,我的网页有一个iframe,当用户单击showNewPage按钮时,我会更改它的src。我需要知道浏览器何时完成加载iframe的DOM,但不需要等待下载所有图像 var myIFrame = document.getElementById("myIframe") var count = 0; funcion showNewPage() { myIFrame.src = "http://example.com/page_" + count; count++; } 当iframe完成加载
showNewPage
按钮时,我会更改它的src。我需要知道浏览器何时完成加载iframe的DOM,但不需要等待下载所有图像
var myIFrame = document.getElementById("myIframe")
var count = 0;
funcion showNewPage() {
myIFrame.src = "http://example.com/page_" + count;
count++;
}
当iframe完成加载DOM和所有图像时,此代码调用doSomething()
:
myIFrame.addEventListener("load", function(event) { doSomething(); });
当iframe已完成加载DOM,但尚未加载所有图像时,如何要求myIFrame调用doSomething()
ps:有一个事件
DOMContentLoaded
,而不是load
,实现了这一点;但此事件不适用于iframe。它仅对文档或窗口可用。执行以下操作也不起作用,因为myIFrame.contentWindow
一开始就返回null:
myIFrame.contentWindow.addEventListener("DOMContentLoaded", function(event) { doSomething(); });
ps:另一个问题没有回答我的问题,因为它依赖于
onload
事件,该事件等待所有图像下载:正如您所发现的,在初始化iframe之前尝试获取其。contentWindow
将返回null
解决这个问题的一个办法是
- 使用空文档初始化框架(
)about:blank
- 获取对iframe的
内容窗口的引用,它将始终是同一个对象,但是我们附加在它上的事件将在每次新导航时被删除
- 添加一个
事件侦听器(因为它离导航最近)unload
- 请稍等一帧,以便我们的
启动导航contentWindow
- 添加您的
和我们的DOMContentLoaded
事件监听器,以便我们可以在下次导航时重复unload
由于受保护的iframe上的StackSnippets不允许我们访问内部框架的内容…可能会将
DOMContentLoaded
放置在iframe本身上,并使其输出一些主窗口可以与之通信的隐藏标志?这是否回答了您的问题@A.Meshu,iframe不会触发DOMContentLoaded
事件;它只触发load
事件。这就是问题所在@ℛƒæĿ,您提到的问题使用了onload
事件,该事件在所有图像完成下载时触发。我需要知道何时加载DOM,而不必等待下载所有图像。
frame.onload = e => {
const win = frame.contentWindow;
frame.onload = null;
win.addEventListener( 'unload', attachEvents );
YOUR_CALLBACK(); // make it fire even at beginning?
function attachEvents() {
setTimeout( () => {
win.addEventListener( 'DOMContentLoaded', YOUR_CALLBACK );
win.addEventListener( 'unload', attachEvents ); // do it again at next navigation
}, 0 );
};
};
frame.src = "about:blank";