我有一个非常简单的 HTML5 iPhone Web 应用程序,几乎可以完美运行;只有一个问题:在启动图像和应用程序主屏幕之间,出现大约一秒钟的全白屏幕(即闪烁)。
我正在使用“添加到主屏幕”按钮将应用程序从网络下载到我的手机。javascript 文件 ( functions.js
) 和样式表都是非常小的文件。
有人遇到过这个问题吗?有没有办法解决/修复它?
索引.html
<!doctype html>
<html manifest="demo.manifest">
<head>
<meta charset="UTF-8">
<title>HTML5 Application</title>
<link rel="stylesheet" type="text/css" href="style.css" />
<link rel="apple-touch-icon-precomposed" href="Icon@2x.png" />
<link rel="apple-touch-startup-image" href="Default@2x.png" />
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="viewport" content="user-scalable=no, width=device-width" />
</head>
<body>
<div id="wrapper">...</div>
</body>
<script type="text/javascript" src="function.js"></script>
</html>
演示清单
CACHE MANIFEST
index.html
Default@2x.png
functions.js
style.css
.htaccess
AddType text/cache-manifest .manifest
编辑#1:我做了更多的研究并得出了这个答案:
由于 HTML 的渐进性,在渲染时清除屏幕和其他工件是 HTML 渲染的常见问题。这个概念是浏览器应该尽可能早地和经常地绘制,并在样式/脚本/内容可用时呈现它们。标记可能存在一个问题,即所有渲染都会延迟,直到某些内容或脚本可用。如果出现以下情况,可能会发生这种情况:
- 您有基于图像尺寸的动态高度,但您没有在标记或 CSS 中设置图像尺寸。
- 您的布局基于表格,并且您没有在 CSS 中使用“table-layout:fixed”。
- 您的 HTML 使用带有 document.write() 的内联脚本。
- 您有某种 onLoad() 函数可以显示/修改内容。
- 您链接到外部样式表。
- 您正在使用不可缓存的外部内容,或者您已禁用缓存。
- 您正在使用返回 404 或无法离线使用的外部内容。
我已遵循此答案中的所有建议,但它并没有消除我的网络应用程序的白色闪烁。有什么技巧可以解决这个问题吗?
编辑#2:我尝试不使用 Javascript 和样式表,只使用:
body { background-color: black }
但仍有白色闪烁。由于这似乎是所有此类 Web 应用程序的问题,我的问题是:是否有任何黑客可以解决此问题?