在javascript中调用javascript适用于某些脚本,但并非所有脚本
我在html文件中调用的script.js文件中包含以下代码:在javascript中调用javascript适用于某些脚本,但并非所有脚本,javascript,Javascript,我在html文件中调用的script.js文件中包含以下代码: function loadScript(url) { var head = document.getElementsByTagName('head')[0]; var script = document.createElement('script'); script.type = 'text/javascript'; script.src = url; script.async = f
function loadScript(url)
{
var head = document.getElementsByTagName('head')[0];
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = url;
script.async = false;
head.appendChild(script);
}
loadScript('https://polyfill.io/v3/polyfill.min.js?features=es6')
loadScript('https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js')
loadScript('https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js')
hljs.initHighlightingOnLoad();
我之所以使用这段代码,是因为我想在html中只调用一个.js文件,而不是多个.js文件
我加载的前两个脚本可以正常工作。但是,要调用的第三个脚本未运行
当我将文件'highlight.min.js'中的所有代码粘贴到my script.js文件中时,当我打开html时,javascript确实正常运行
我不明白为什么用loadScript()加载'highlight.min.js'文件不起作用,或者我能做些什么让它起作用。非常感谢您的帮助。您的联机处理程序在哪里
script.onload = function(){};
让我们暂时不要担心错误
如果LIB相互需要,则需要延迟,因为子项可能比父项小。脚本加载是异步的,因此当调用
hljs.initHighlightingOnLoad()
时,脚本尚未加载
备选案文1
您可以修改loadScript()
函数,使其与承诺一起工作,承诺在加载脚本()时解析:
现在,您可以调用代码,并确保在调用hljs.initHighlightingOnLoad()之前加载了所有库。
:
备选案文2
您可以修改loadScript()
函数,使其使用defer
加载脚本,并添加可选的onload
处理程序,可用于调用hljs.initHighlightingOnLoad()
:
嗯,为什么我需要一个承诺,我可以在我的脚本元素上使用async属性吗?谢谢你的帮助。我显然做错了什么,因为将代码复制到我的script.js文件中不起作用,但是当我将以下行添加到我的html中时,highlight.js正常运行:@Jay你是对的,你可以使用
async=false
延迟加载,然后你可以使用onload
处理程序调用函数。我会在答案中添加这个选项。谢谢你,但你的答案永远不会像我的一样好:)siek-nah
function loadScript(url) {
return new Promise(function(resolve, reject) {
var script = document.createElement("script");
script.onload = resolve;
script.onerror = reject;
script.src = url;
document.getElementsByTagName("head")[0].appendChild(script);
});
}
(async function init() {
await loadScript('https://polyfill.io/v3/polyfill.min.js?features=es6');
await loadScript('https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js')
await loadScript('https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js')
hljs.initHighlightingOnLoad();
})()
function loadScript(url, onload)
{
var head = document.getElementsByTagName('head')[0];
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = url;
script.async = false;
script.onload = onload;
head.appendChild(script);
}
loadScript('https://polyfill.io/v3/polyfill.min.js?features=es6')
loadScript('https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js')
loadScript('https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js', () => {hljs.initHighlightingOnLoad()})