javascript - 访问函数存在于动态添加的 javascript 文件中

标签 javascript jquery html

我正在添加一些 javascript 文件。然后我需要使用它们中存在的函数。在 firebug 的 Scripts 选项卡中,我可以看到添加了脚本。函数 LoadScript1Function 存在于一个脚本中,而 LoadScript2Function 存在于其他脚本中。 但我得到的错误是:

`ReferenceError: LoadScript1Function is not defined`

这是我的代码:

function LoadScripts(){
    try{
        var allScripts = document.getElementsByTagName('script');
        for (var x = 0; x < jsPaths.length; x++) {
            if($.inArray(jsPaths[x], allScripts) == -1){
                loadScript(jsPaths[x], null);
            } 
        }

        async(LoadScript1Function, function(){ ; });
        async(LoadScript2Function, function(){ ; });
    }
    catch(e){
        console.log(e);
    }
}

// Load script
function loadScript(url, callback){
    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;
                callback();
            }
        };
    } else {  //Others
        script.onload = function(){
            callback();
        };
    }

    script.src = url;
    document.getElementsByTagName("head")[0].appendChild(script);
}

// Async call
function async(fn, callback) {
    setTimeout(function() {
        fn();
        callback();
    }, 0);
}

尝试按照 adeneo 的建议进行操作。但不工作。

loadScript(jsPaths[x], function(){ 
     if(jsPaths[x].indexOf('Script1') != -1){ // script name check in the path
         LoadScript1Function();
     }
});

最佳答案

我发现您的 setTimeout 调用有问题 - 超时为 0。 Javascript 通常是单线程的,可以锁定浏览器的其他组件,因此超时为 0 不会让任何内容下载。您必须增加这些毫秒数并检查脚本是否已经可以运行;如果没有,安排一个新的超时。尽管我一开始看不出为什么需要异步函数。

在类似情况下,我喜欢做的是尝试访问事物提供的属性或函数,然后在失败时等待更多时间。

我不喜欢回调的一点是,您必须非常狭窄地走平台开发人员准备的轨道,并且对灵 active 的任何额外需求都会使您的整个代码脱轨。毕竟对所有事情都使用 setTimeout 可能会更好。然后,您可以快速处理“断开的连接”,更新任何跳动器/进度条,等等。

关于javascript - 访问函数存在于动态添加的 javascript 文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24061979/

相关文章:

javascript - 防止页面重新加载和重定向表单提交 ajax/jquery

javascript - 使用功能更改复选框上的 div 内容单击不起作用

javascript - 动态改变 Awesome Icon 的颜色

javascript - ionic / Cordova : How to debug JavaScript codes that require "cordova.js" library in a web-browser

javascript - 按名称访问 JavaScript 变量的值?

Javascript计时器进度条

javascript - 如何使用 javascript/jQuery 获取透明元素的有效背景颜色

php - AJAX 调用成功后更新元素

PHP/HTML : If url is domain. co.uk/?debug 然后

javascript - 松露网页包 : Can't resolve 'module' in require-from-string