【发布时间】:2019-10-27 13:47:51
【问题描述】:
以下有问题的代码会导致 Chrome 和 Firefox 之间出现差异:
<button id="add">add element</button>
<div id="container"></div>
<script>
const c = document.querySelector("#container");
document.querySelector("#add").onclick = function() {
const iframe = document.createElement("iframe");
c.appendChild(iframe);
const h1 = document.createElement("h1");
h1.innerText = "hello";
iframe.contentDocument.body.appendChild(h1);
};
</script>
JSFiddle:https://jsfiddle.net/vtbcu1zj/
尝试在 Chrome 中运行上述代码(应该可以正常运行),也可以在 Firefox 中运行(中断)。
这似乎是因为 Firefox 不会假设 iframe 会立即加载,而 Chrome 会。以下更改使代码在两种浏览器中都能正常工作:
iframe.onload = function () {
iframe.contentDocument.body.appendChild(h1);
}
c.appendChild(iframe); // append after setting up event listener
造成这种差异的原因是什么?这是错误还是功能? Chrome 在这里做出了错误的假设还是 Firefox 处理不正确?
【问题讨论】:
标签: javascript html google-chrome firefox iframe