Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript中调用javascript适用于某些脚本,但并非所有脚本_Javascript - Fatal编程技术网

在javascript中调用javascript适用于某些脚本,但并非所有脚本

在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

我在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 = 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()})