在body标记之前使用'defer'属性和脚本
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在body标记之前使用'defer'属性和脚本相关的知识,希望对你有一定的参考价值。
我在Google网页测试工具上运行了我的网页,它建议我使用'defer'或'async'属性来摆脱渲染阻止JS。我的html是这样的:
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>My Page</title>
<link href="https://mycdn.com/style.css" rel="stylesheet">
</head>
<body>
<div id="app-container"></div>
<script type="text/javascript" src="https://mycdn.com/shared.js"></script>
<script type="text/javascript" src="https://mycdn.com/main.js"></script>
</body>
</html>
因为,我的脚本在关闭'body'标签之前已经包含,而不是在'head'中,它们是否真的阻塞了?在解析结束'html'之前,画面是否会发生?
答案
使用异步或延迟或将脚本移动到文件底部并不总是可以在不同的浏览器中工作,一种推荐的加载外部脚本的方法是以下面的方式加载它是通过在结束之前放置这段代码。身体标签。
<script type="text/javascript">
function downloadJSAtOnload(){
var element = document.createElement("script");
element.src = "defer.js"; // Replace "defer.js" with your url or filename
document.body.appendChild(element);
}
if (window.addEventListener) window.addEventListener("load", downloadJSAtOnload, false);
else if(window.attachEvent) window.attachEvent("onload", downloadJSAtOnload);
else window.onload = downloadJSAtOnload;
</script>
以上是关于在body标记之前使用'defer'属性和脚本的主要内容,如果未能解决你的问题,请参考以下文章
Remote Server returned '420 4.2.0 Recipient deferred because there is no Mdb'