当前位置: 首页 > 面试题库 >

通过回调异步加载JavaScript文件

端木元青
2023-03-14
问题内容

我正在尝试编写一个超简单的解决方案以异步加载一堆JS文件。到目前为止,我下面有以下脚本。但是,当未实际加载脚本时,有时会调用回调,这会导致未找到变量错误。如果我刷新页面有时会起作用,因为我猜这些文件是直接从缓存中提取的,因此比调用回调要快,这很奇怪吗?

var Loader = function () {

}
Loader.prototype = {
    require: function (scripts, callback) {
        this.loadCount      = 0;
        this.totalRequired  = scripts.length;
        this.callback       = callback;

        for (var i = 0; i < scripts.length; i++) {
            this.writeScript(scripts[i]);
        }
    },
    loaded: function (evt) {
        this.loadCount++;

        if (this.loadCount == this.totalRequired && typeof this.callback == 'function') this.callback.call();
    },
    writeScript: function (src) {
        var self = this;
        var s = document.createElement('script');
        s.type = "text/javascript";
        s.async = true;
        s.src = src;
        s.addEventListener('load', function (e) { self.loaded(e); }, false);
        var head = document.getElementsByTagName('head')[0];
        head.appendChild(s);
    }
}

无论如何,有没有方法可以测试JS文件是否已完全加载,而无需在实际的JS文件本身中放入任何东西,因为我想使用相同的模式从我的控件(GMaps等)中加载库。

在代码之前调用代码。

var l = new Loader();
l.require([
    "ext2.js",
    "ext1.js"], 
    function() {
        var config = new MSW.Config();
        Refraction.Application().run(MSW.ViewMapper, config);
        console.log('All Scripts Loaded');
    });

谢谢你的帮助。


问题答案:

据我所知,您的代码没有错,这只是Chrome中的一个错误(它也使用window.onload做到了。)

我将其添加到“加载”函数中触发的函数中。如果该变量存在,请执行JS代码,但如果不存在,请使用setTimeout在500毫秒左右再次进行检查。



 类似资料:
  • 回调 用户在支付完成后跳转回来的页面,一般只建议做显示用途。 // SDK实例化,传入公共配置 $pay = new \Yurun\PaySDK\AlipayApp\SDK($params); if($pay->verifyCallback($_GET)) { // 回调验证成功,可以通过GET参数来获取支付宝回传的参数 } else { // 回调验证失败 } 详见:test

  • 本文向大家介绍JavaScript异步加载方案相关面试题,主要包含被问及JavaScript异步加载方案时的应答技巧和注意事项,需要的朋友参考一下  

  • 本文向大家介绍异步安全加载javascript文件的方法,包括了异步安全加载javascript文件的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了异步安全加载javascript文件的方法。分享给大家供大家参考。具体如下: 使用方法: JavaScript实现代码: 希望本文所述对大家的javascript程序设计有所帮助。

  • 本文向大家介绍ios通过按钮点击异步加载图片,包括了ios通过按钮点击异步加载图片的使用技巧和注意事项,需要的朋友参考一下 比较原始的方法: 方法二: 方法三: 实现文件: 以上所述就是本文的全部内容 了,希望大家能够喜欢。

  • 本文向大家介绍JavaScript异步加载问题总结,包括了JavaScript异步加载问题总结的使用技巧和注意事项,需要的朋友参考一下 同步加载的问题 默认的js是同步加载的,这里的“加载”可以理解成是解析、执行,而不是“下载”,在最新版本的浏览器中,浏览器对于代码请求的资源都是瀑布式的加载,而不是阻塞式的,但是js的执行总是阻塞的。这会引起什么问题呢?如果我的index页面要加载一些js,但是其

  • 问题内容: 如何快速进行异步回调?我正在为我的应用程序编写一个小框架,因为它应该同时在iOS和OS X上运行。因此,我将非特定于设备的主要代码放入该框架中,该框架还处理对我的在线api的请求。很显然,我也希望应用程序的GUI以及ViewController在api请求完成后立即做出反应。在Objective- C中,我通过将包含必须在id变量中调用的函数以及函数本身的视图保存在选择器变量中的视图来