Web 浏览器何时请求动态创建的 iframe 的 src 内容
When does a web browser request the src content of a dynamically created iframe?
假设我使用 js 动态创建一个 iframe 节点,然后设置 src 属性 (1),最后将节点附加到 DOM (2)。
浏览器何时请求 src 内容?之后(1)?之后(2)?还是不可预测?它取决于浏览器吗?
规范指出:
首次将
iframe
元素插入文档时, 用户代理必须创建嵌套的浏览上下文,然后 首次处理iframe
属性。
使用以下代码片段和本地服务器,我在许多浏览器中测试了该行为。
var f = document.createElement('iframe');
f.src = '/?';
资源永远不会被获取(我只显示了测试最低和最高测试的浏览器版本):
- IE 6 - 9
- FF 3.6 - 12.0
- 铬 1 - 18
- 歌剧 10.00 - 12.00
- 野生动物园 4.0 - 5.1.5
因此,只有在将框架附加到文档后才会发送请求。
在 (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中的"网络"选项卡,以查看何时请求页面。我相信只有在调用附录后才会请求它。
在 (2) 之后!! 看看这个: http://jsfiddle.net/lbstr/td7DD/
打开Firebug或chrome的控制台,查看网络选项卡。你会看到谷歌加载。然后,注释掉第三行并再次运行它。你不会看到谷歌加载。
- 如何使用Angular动态添加iframe-src
- 在不设置协议的情况下,使用javascript/jquery更改iframe-src
- 如何在使用JavaScript或jQuery刷新父页面后保留iframe-src
- Change iframe src
- 使用jQuery来foreach iframe-src,并通过函数获取ID和操作
- jQuery在iFrame Src中查找和替换文本
- 使用jQuery编辑iframe-src
- 如何更改具有相同类、名称的 iframe src
- 用vbscript更改iframe src(打开关于语言)
- iframe src 使用现有值在单击时添加自动播放=true 参数
- 为什么当我尝试为iframe-src属性构建URL时,AngularJS会抛出错误
- 防止iFrame src在加载时在单击时被触发
- 使用输入类型text更改iframe-src
- 更改iframe src可阻止父级隐藏
- 使用 JavaScript 更改 iframe src
- 使用jquery检测iframe-src更改
- 通过选择框“选项”更改 Iframe SRC
- 加载 Iframe src,并从水平下拉菜单中进行选择
- 单击元素时重新加载 iframe src
- 如何使用 iframe.src 下载文件时获取返回状态代码