我正在尝试尽快添加一个iframe
元素document.body
。
所有 4 种主要浏览器(Chrome、Safari、FF、IE ——各种版本)都出现错误报告,我们看到document.body
的是null
. 我认为当我的 JS 文件被缓存并快速加载时会发生这种情况。
这是插入的逻辑iframe
:
private loadIFrame(): void {
switch (document.readyState) {
case 'uninitialized':
case 'loading':
case 'loaded':
window.addEventListener('DOMContentLoaded',
this.appendIFrame.bind(this)
)
break
case 'interactive':
case 'complete':
default:
this.appendIFrame()
}
}
private appendIFrame(): void {
if (document.getElementById('iframeId')) {
return
}
let iFrame: HTMLIFrameElement = document.createElement('iframe')
iFrame.src = document.location.protocol + this.ORIGIN + '/iframe.html'
iFrame.id = 'iframeId'
// document.body is null here
document.body.appendChild(iFrame)
}
我很难在干净的环境中重现这个问题,这让我猜测这在野外是如何发生的。
本来我也试过这个rreadyState
逻辑,但是我们看到document.body
是undefined
在IE的时候处于loading
状态。
private loadIFrame(): void {
switch (document.readyState) {
case 'uninitialized':
case 'loading':
window.addEventListener('DOMContentLoaded',
this.appendIFrame.bind(this)
)
break
case 'loaded':
case 'interactive':
case 'complete':
default:
this.appendIFrame()
}
}
我目前的提问方式......
- 问题是
default
这样吗?我应该在那里添加事件侦听器吗?我可以修改案例的顺序,以便事件侦听器是默认的? body
有可能null
参加DOMContentLoaded
活动吗?- 是否有可能还有其他价值
document.readyState
正在下降?