javascript - 无法从动态加载的 javascript 文件调用函数

标签 javascript html dom

我正在从文档中存在的另一个 javascript 文件加载一个 javascript 外部文件,并且自从其加载后,我想从加载的 js 文件中调用一个函数。 这是加载函数:

function loadScript(url) {
    var head = window.top.document.getElementsByTagName('head')[0];
    var script = window.top.document.createElement('script');
    script.src = url;
    script.type= "text/javascript";
    head.appendChild(script);
    if(script.readyState) {  //IE
        script.onreadystatechange = function() {
            if ( script.readyState === "loaded" || script.readyState === "complete" ) {
                script.onreadystatechange = null;
                console.log("[BANDEAU] script loaded");
                testAlert();
            }
        };
    } else {  //Others
        script.onload = function() {
            console.log("[BANDEAU] script loaded");
            testAlert();
        };
    }
}

所以效果很好,因为 javascript 文件已成功加载,但我无法从加载的 javascript 文件访问 testAlert() 方法,正如我在打印脚本后在上面的代码中尝试的那样已加载。当我尝试在 window[testAlert] 上使用 typeOf 获取函数的类型时,我得到一个未定义的值。但是当我尝试在开发人员控制台中执行 testAlert() 方法时,它工作得很好。有人看到我做错了什么吗?

DOM 中调用者 javascript 文件和加载的 javascript 文件之间的位置可能是原因吗?

最佳答案

您需要在更改 src 之前分配负载处理程序

function loadScript(url) {
  var head = document.getElementsByTagName('head')[0]; // window.top in frames/iFrames
  var script = document.createElement('script');
  script.type = "text/javascript";

  if (script.readyState) { //IE
    script.onreadystatechange = function() {
      if (script.readyState === "loaded" || script.readyState === "complete") {
        script.onreadystatechange = null;
        console.log("[BANDEAU] script loaded");
        testAlert(); // window.top.testAlert() if needed
      }
    };
  }
  else {
    script.onload = function() {
      console.log("[BANDEAU] script loaded");
      testAlert(); // window.top.testAlert() if needed
    };
  }
  script.src = url;
  head.appendChild(script);
}

关于javascript - 无法从动态加载的 javascript 文件调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41167921/

相关文章:

javascript - 对象内部带有参数的函数

javascript - Jquery 计算元素中的字符并给太短的字符填充

javascript - 在 Javascript 中显示数组中的图像

javascript - 如何使用 React context API 实现多语言站点

javascript - 我应该将 JavaScript 的加载屏幕脚本放在 HTML 文档上的什么位置?

html - 轮播 slider 在 Angular4 中显示单个项目

如果可滚动的 div 溢出,Javascript 会阻止滚动

javascript - <head> 元素在 DOM 中是否始终可用,即使在 HTML 标记中不存在?

javascript - 如何知道哪个元素被点击

javascript - 数组分块 - 可以在一个数组中吗?