javascript - 同步动态加载 JavaScript

标签 javascript

我正在使用 module pattern ,我想做的一件事是动态包含一个外部 JavaScript 文件,执行该文件,然后在我的模块的 return { } 中使用文件中的函数/变量。

我不知道如何轻松地做到这一点。是否有执行伪同步外部脚本加载的任何标准方法?

function myModule() {
    var tag = document.createElement("script");
    tag.type = "text/javascript";
    tag.src = "http://some/script.js";
    document.getElementsByTagName('head')[0].appendChild(tag);

    //something should go here to ensure file is loaded before return is executed

    return {
        external: externalVariable 
    }
}

最佳答案

只有一种方法可以同步加载和执行脚本资源,那就是使用同步 XHR

这是一个如何做到这一点的例子

// get some kind of XMLHttpRequest
var xhrObj = createXMLHTTPObject();
// open and send a synchronous request
xhrObj.open('GET', "script.js", false);
xhrObj.send('');
// add the returned content to a newly created script tag
var se = document.createElement('script');
se.type = "text/javascript";
se.text = xhrObj.responseText;
document.getElementsByTagName('head')[0].appendChild(se);

但是您通常不应该使用同步请求,因为这会阻止其他一切。 但话虽如此,当然在某些情况下这是合适的。

我可能会通过使用 onload 处理程序将包含函数重构为异步模式。

关于javascript - 同步动态加载 JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2879509/

相关文章:

javascript - 数组只能存储一种类型的对象?

Javascript/NodeJS : html rendering before . 在 forEach 内查找完成

javascript - 单击按钮和鼠标离开后,Bootstrap 的工具提示不会消失

javascript - 四舍五入的纬度和经度以在 Google map 中显示大致位置

javascript - 如何使用 Jasmine 在 javascript 中模拟新函数/对象创建调用?

javascript - Google reCAPTCHA v2 忽略 CSS 对齐

javascript - 在三元运算符中使用 count + 1 可以吗?

javascript - 如何通过单击按钮显示 iframe (JavaScript)

javascript - parseFloat 不适用于移动设备

javascript - react 更新状态奇怪的行为