假设我使用 js 动态创建一个 iframe 节点,然后设置 src 属性 (1),最后将该节点附加到 DOM (2)。
浏览器何时请求 src 内容?在(1)之后?在(2)之后?或者它是不可预测的?它取决于浏览器吗?
假设我使用 js 动态创建一个 iframe 节点,然后设置 src 属性 (1),最后将该节点附加到 DOM (2)。
浏览器何时请求 src 内容?在(1)之后?在(2)之后?或者它是不可预测的?它取决于浏览器吗?
当一个
iframe
元素第一次插入到文档中时,用户代理必须创建一个嵌套的浏览上下文,然后 第一次处理iframe
属性。
var f = document.createElement('iframe');
f.src = '/?';
资源永远不会被获取(我只展示了最低和最高测试的浏览器版本):
因此,仅在将框架附加到文档后才发送请求。
(2) 之后。在此之前,它只是 JS。在它附加到 DOM 之前,浏览器不会对其进行操作。
好吧,我不会为您测试每个浏览器,但我总是希望具有 src 和 href 属性的元素链接到或加载某种内容,在它们实际附加后总是加载,因为何时/何地 iframe 或js 文件落在文档中,涉及大量安全性和一般实现问题。对于浏览器供应商而言,以任何其他方式做到这一点将是严重的失败,我可以看到一个事实,即 chrome 通过一些实验就可以做到这一点。
我能想到的唯一例外是可以在插入之前加载的图像。
以我的经验,它总是在将节点添加到 DOM 时。您可以加载 Firebug 或其他一些开发控制台,并查看何时发生这种情况。抛出几个警报来确定这样的时间:
<script type="text/javascript">
ifrm = document.createElement("IFRAME");
ifrm.setAttribute("src", "http://blah.com/");
alert('SRC SET');
ifrm.style.width = 640+"px";
ifrm.style.height = 480+"px";
document.body.appendChild(ifrm);
alert('ADDED TO DOM');
</script>
运行类似的东西并观察 Firebug 中的“Net”选项卡以查看何时请求该页面。我相信只有在调用 appendChild 之后才会请求它。
(2)之后!!看看这个:http: //jsfiddle.net/lbstr/td7DD/
打开 firebug 或 chrome 的控制台并查看 net 选项卡。你会看到谷歌加载。然后,注释掉第三行并再次运行。你不会看到谷歌加载。