document.body.appendChild(scriptElement)之后的函数不可用

时间:2018-06-07 17:54:05

标签: javascript jquery html

以下是我在HTML页面中动态包含src脚本标记的代码。我想要使​​用的新导入的javascript文件中有一个函数:

var scriptFile= document.createElement("script");
scriptFile.src = "something.js";
var something=document.body.appendChild(scriptFile);

something.js包含一个名为doSomething()的函数。现在,当我在上面的appendChild之后立即调用此函数时,它说doSomething未定义。但是,当我从Chrome控制台启动它时,它会成功执行。我不确定为什么会这样。

2 个答案:

答案 0 :(得分:3)

当您使用源附加script标记时,首先将解析和编译源,这是一个asyn进程(非阻塞)。

如果您尝试立即调用该方法,则会因为尚未编译源而引发错误。

绑定在脚本可用时触发的load事件。这将确保您在脚本标记完全加载后才运行脚本标记的内容。

var scriptFile= document.createElement("script");

scriptFile.addEventListener('load', function() {
    console.log('Script is ready to execute');

    // invoke your function here
}); 

scriptFile.src = "something.js";
var something=document.body.appendChild(scriptFile);

答案 1 :(得分:1)

倾听onload

var scriptFile= document.createElement("script")
scriptFile.src = "something.js"
document.body.appendChild(scriptFile)
scriptFile.onload = () => {
   // call something.js functions here
}