Lon*_*ner 6 html javascript callback
档案loader.js:
function main()
{
if (typeof window !== 'undefined') {
var script = window.document.createElement('script')
script.src = 'https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.core.min.js'
script.onload = function () { console.log('script loaded') }
window.onload = function () { console.log('window loaded') }
window.document.head.appendChild(script)
} else {
console.log('window not available yet')
}
}
if (typeof module !== 'undefined' && module.exports) {
exports.main = main
}
main()
Run Code Online (Sandbox Code Playgroud)
档案window.html:
<!DOCTYPE html>
<html>
<head>
<title>Test</title>
<script src="loader.js"></script>
</head>
<body>
<div>Test</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
打开此HTML页面时的控制台输出:
script loaded
window loaded
Run Code Online (Sandbox Code Playgroud)
我的问题:
在上面的代码中,是否保证脚本onload事件总是在窗口onload之前触发?
是的,您看到的输出是有保证的,因为load事件是在"资源及其相关资源已完成加载时" 触发的.该window直到不会满载每一个东西来下载元素已下载完毕,包括脚本和图像.所以,<script>必须在负载之前window加载.
事实上,动态创建的脚本不会产生影响(假设main在窗口完全加载之前调用,就像在代码中一样) - 一旦插入到DOM中,它现在就是窗口所依赖的东西,所以必须load在窗前.