引用通过JavaScript调用添加的新JS文件后调用JavaScript函数

引用通过JavaScript调用添加的新JS文件后调用JavaScript函数,javascript,html,Javascript,Html,好吧,标题可能有点含糊,但想法很简单 我有一段JavaScript代码,在HTML页面的Head部分添加了对JS文件的引用,在添加了新的JS文件之后,我想调用这个新添加的JS文件中存在的函数。因此,我有一个链接(使用javascript:eval)来执行以下JS代码: //PART 1 var head = document.getElementsByTagName('head')[0]; var script = document.createElement('script'); scrip

好吧,标题可能有点含糊,但想法很简单

我有一段JavaScript代码,在HTML页面的Head部分添加了对JS文件的引用,在添加了新的JS文件之后,我想调用这个新添加的JS文件中存在的函数。因此,我有一个链接(使用javascript:eval)来执行以下JS代码:

//PART 1
var head = document.getElementsByTagName('head')[0];
var script = document.createElement('script'); 
script.setAttribute('type', 'text/javascript'); 
script.setAttribute('src', 'http://localhost/test.js'); 
head.appendChild(script); 

//wait for JS file to load should go here

//PART 2
calltest(); //calltest is a function that exists within http://localhost/test.js
如果第1部分和第2部分之间存在延迟(例如,它们位于用户按顺序单击的两个单独的链接上),那么这可以正常工作,但如果整个代码按顺序在一个链接上执行,则不起作用(我猜是因为JS文件(添加在第1部分中)还没有机会加载)。在调用函数calltest()之前,是否有必要让第2部分等待第1部分完全完成?可能是某种延迟或等待要检索的JS文件?

这应该可以做到

window.onload = calltest;
或者将此添加到您的第一个脚本中

script.onreadystatechange= function () {
  if (this.readyState == 'complete') calltest();
 }
 script.onload= calltest;

根据Marcell的评论,我建议采用以下解决方案:


calltest()可能是您注入的JS文件中的最后一条语句

,例如,
calltest()
可能是您注入的JS文件中的最后一条语句。检查这篇文章,这两种技术都解决了我的问题。。。我选择马塞尔只是因为它简单一点。谢谢