【发布时间】:2012-03-08 00:10:29
【问题描述】:
我正在做一个项目,我们从 XHTML 到 HTML 再到 XHTML,关于加载 CSS 之前的页面渲染和在加载 CSS 之前读取样式的脚本有一些明确的行为变化.谁能解释为什么会发生以下情况以及可以采取什么措施?
基本上,我的页面结构如下:
<body>
<!-- Content from Source A -->
<link href="http://a.example.com/style.css" />
<header>...</header>
<!-- Content from Source B -->
<link href="http://b.example.com/style.css" />
<div>...</div>
<!-- Content from Source A -->
<footer>...</footer>
<script src="http://a.example.com/script.js">
/* e.g. */
alert($('header').offset().height);
</script>
</body>
当我们处于 HTML 渲染模式时,页面会阻塞在预期点的渲染。当我们点击 Source A CSS 时,渲染暂停(空白屏幕);当我们点击 Source B CSS 时,渲染暂停(标题可见)。当我们点击 Source A JavaScript 时,渲染暂停(显示整页),脚本从渲染状态读取元素样式。 (实际上,当然,WebKit 不会在 CSS 加载时停止解析 DOM 或执行 JavaScript,但它会在脚本需要读取样式的第一个点停止执行。)
当我们处于 XHTML 模式时,页面根本不会停止渲染,而是会完全无样式地渲染整个页面。之后,它似乎按加载顺序处理脚本和样式表,或者更确切地说,它按顺序执行脚本,但在执行加载的脚本之前不等待样式表加载。这意味着页面将呈现 3 次(无格式、一个样式表和两个样式表),并且脚本可能会推断出完全不准确的元素大小值。
有人可以解释一下吗?这发生在我测试过的所有 WebKit 浏览器中,包括 Chrome 17、Mobile Safari 5 和 Android Browser 2.1。有什么方法可以确保 HTML 呈现顺序而不使用 text/html mime 类型?
【问题讨论】:
标签: html xhtml webkit mobile-safari