File 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()
File window.html
:
<!DOCTYPE html>
<html>
<head>
<title>Test</title>
<script src="loader.js"></script>
</head>
<body>
<div>Test</div>
</body>
</html>
当我打开此 HTML 页面时控制台输出:
script loaded
window loaded
我的问题:
在上面的代码中,是否保证脚本 onload 事件始终在窗口 onload 之前触发?
是的,您看到的输出是有保证的,因为load
事件被触发“当资源及其依赖的资源已完成加载。”window
不会被完全加载,直到every包含要下载内容的元素已下载并准备就绪,包括脚本和图像。所以<script>
必须在之前加载window
loads.
事实上,有一个动态创建的脚本不会产生影响(假设main
在窗口完全加载之前调用,就像在您的代码中一样) - 一旦插入到 DOM 中,它现在就是窗口所依赖的东西,所以必须load
在窗口之前。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)