考虑如下HTML文档
<div id="foobar"></div>
<iframe id="content" src="https://example.com/someUri"></iframe>
进一步考虑如下的JavaScript
document.addEventListener( 'DOMContentLoaded', function ( event ) {
var content = document.querySelector( '#content' );
console.log( content );
console.log( content.contentWindow );
} );
在检查content
的第一个控制台输出时,元素的contentWindow
属性将显示为基于iFrame {{1}中指定的相同URI的窗口元素}属性。但是第二个控制台输出显示了一个基于URI src
的窗口元素。
如标题中所述,我使用的是FireFox(59.0.1 x64)。
我愿意接受,但我想知道为什么?
答案 0 :(得分:1)
实际上这个问题是基于DOMContentLoaded
不等待加载iFrame内容的事实。
为了使主文档完全加载,contentWindow
的输出基于空白页。实际上,iFrame本身的输出在同一时刻的检查过程中会显示相同的结果。
<强>但是强>
控制台会在每次更改时立即更新iFrame的输出,但不适用于contentWindow属性的单个日志。虽然更新速度如此之快,但我不能简单地识别控制台中的变化,并且可能首先会出现问题,就像我一样。
修改(2018-03-20)
同时我发现,在加载src
中传递的内容之前,iFrame首先包含一个虚拟对象。