确定 IFrame 已加载后何时呈现 iFrame 内容

Posted

技术标签:

【中文标题】确定 IFrame 已加载后何时呈现 iFrame 内容【英文标题】:Determine when iFrame content is rendered after IFrame has already loaded 【发布时间】:2017-03-16 02:14:08 【问题描述】:

我正在使用 javascript 创建一个 iframe,将其添加到父 DOM,然后通过 iFrameEl.contentWindow.document.write() 将 html 写入它

在调用 iFrameEl.contentWindow.document.closed() 后,我需要确定 iFrame 中的所有内容何时呈现。

iframe 的 onload 事件似乎在 iframe 最初添加到 DOM 时被调用,然后我才能写入它,我需要将它添加到 DOM 以便访问 iFrame 的 contentWindow.document,所以抓住22.

在 Chrome 中,作为替代方法,我使用 srcdoc 属性将我需要的所有内容添加到 iframe,并将 iframe 添加到 dom 并等待 onload 事件,但是 IE 不支持 srcdoc

    var iFrameHTML = '<!DOCTYPE html><html><head>';

    iFrameHTML = iFrameHTML + '</head><body>' + htmlIncludingImagesEtc + '</body></html>';

    iFrameEl.srcdoc = iFrameHTML;

    myDiv.append(iFrame);


    iFrameEl.onload = function() 

        //proceed
    

我知道 iFrame 的 src 属性也可以使用,但 Data URI characters 的限制使我无法使用该方法

我知道这里有很多类似的问题,但我找不到任何符合我要求的问题。

我需要动态创建一个 iFrame,向其中添加内容并确定所有内容何时呈现,是否有一些明显的方法可以实现这一点,还是需要 MutationObservers 等?

【问题讨论】:

【参考方案1】:

查看DOMFrameContentLoaded。这是一个在框架中的内容被加载和解析时触发的事件。

【讨论】:

此事件“在框架完成加载和解析时执行,无需等待样式表、图像和子框架完成加载”,而我需要检测所有图像等何时加载 【参考方案2】:

迟到的答案,但它可能对某人有所帮助...我发现即使在将 iframe 添加到 DOM 之后,如果我将样式表的链接从父 DOM 的头部添加到 iframe 作为字符串,如下所示, 表示发生了加载事件

iFrame$.on('load',function()
//iFrame loaded
);

var headHTML = '<head>';
$('head link').each(function(index, link) 
headHTML = headHTML + link.outerHTML;
);

headHTML = headHTML + '</head>';

iFrameDoc.open();
iFrameDoc.write("<!DOCTYPE html>");
iFrameDoc.write("<html>");
iFrameDoc.write(headHTML);
iFrameDoc.write("</body>");
iFrameDoc.write("</html>");
iFrameDoc.close();

【讨论】:

以上是关于确定 IFrame 已加载后何时呈现 iFrame 内容的主要内容,如果未能解决你的问题,请参考以下文章

iframe 何时开始加载到页面上?

检测 Iframe 内容何时加载(跨浏览器)

当浏览器请求部分内容范围请求时,如何检测何时在 iframe 中加载 pdf?

如何识别网页是在 iframe 中加载还是直接加载到浏览器窗口中?

如何识别网页是在 iframe 中加载还是直接加载到浏览器窗口中?

android 7.0下的iframe加载问题