在下面的Mozilla函数中,JS用于向文档中添加标签。当onload事件触发时,我感到困惑。onload会在脚本开始下载或已经下载时触发吗?
function prefixScript(url, onloadFunction) {
var newScript = document.createElement("script");
newScript.onerror = loadError;
if (onloadFunction) { newScript.onload = onloadFunction; }
document.currentScript.parentNode.insertBefore(newScript, document.currentScript);
newScript.src = url;
}
https://developer.mozilla.org/en-US/docs/Web/API/HTMLScriptElement
谢谢
发布于 2019-06-05 03:33:03
当这些操作完成时,调用onload
的回调:
等副作用
以下是一个演示,其中将jQuery库的脚本添加到<head>
中,从而公开通过执行导入的脚本而创建的全局变量$
:
const script = document.createElement('script');
script.onload = () => {
try {
$;
console.log('onload - $ is defined');
} catch(e) {
console.log('onload - $ is not defined yet');
}
}
script.src = 'https://code.jquery.com/jquery-3.3.1.js';
try {
$;
console.log('main - $ is defined');
} catch(e) {
console.log('main - $ is not defined yet');
}
document.head.appendChild(script);
最后一个精度-在这种情况下,加载是通过将脚本附加到DOM来触发的,而不是由script.src = ...
!尝试注释掉最后一行-脚本永远不会加载。
也可能存在由script.src = ...
触发加载的其他情况,例如,当脚本被附加到DOM时,将设置.src
。
https://stackoverflow.com/questions/56449922
复制相似问题