【发布时间】:2020-06-20 14:06:09
【问题描述】:
我正在开发一个静态网站。我正在使用 JavaScript 将 CSS 样式表附加到文档头。在 CSS 加载之后,我会根据元素的位置和尺寸进行一些计算。所以CSS必须先加载再计算。
但问题是 Chrome 浏览器等待脚本执行,虽然它会将样式表附加到头部但实际上并没有下载它,因此 document.stylesheets 不会更新!
这个问题只存在于 chrome 中。 Firefox 会按预期立即下载!
我创建了一个示例代码来轻松演示问题
<!DOCTYPE html>
<head></head>
<body>
<p id='status'></p>
<button onclick="updateStatus()">updateStatus</button>
<script>
const link = document.createElement('link')
link.rel = 'stylesheet'
link.href = './style.css'
document.head.appendChild(link)
updateStatus()
function updateStatus() {
document.getElementById('status').innerHTML = document.styleSheets.length;
}
</script>
</body>
</html>
尝试在 chrome 和 Firefox 中打开这个问题。如果你在 Chrome 中运行 sn-p 它将增加一,这意味着 CSS 稍后加载。另一方面,Firefox 的值没有改变意味着它首先加载了 CSS。
如何强制 chrome 或任何其他浏览器先加载 CSS,然后继续执行 JavaScript?
我尝试将onload 事件(也建议here)附加到样式表并且它可以工作,但是我的代码很大而且用途广泛。我不能把它分成 pre-CSS 和 post-CSS 部分!
【问题讨论】:
标签: javascript css dynamic-loading