我正在添加一些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();
}
});
答案 0 :(得分:0)
我可以在setTimeout
来电中看到问题 - 超时为0
。 Javascript通常是单线程的,可以锁定浏览器的其他组件,因此超时0不会让任何内容被下载。你必须增加那些毫秒,并检查脚本是否已经可操作;如果没有,请安排新的超时。虽然我无法看到首先需要异步功能。
我喜欢在类似的情况下尝试访问由该东西提供的属性或函数,然后在它失败时再等一些。
我不喜欢回调的是你必须非常狭隘地进入由平台开发人员准备的铁路,并且对灵活性的任何额外需求都会破坏整个代码。毕竟,使用setTimeout可能会更好。然后,您可以快速处理“丢弃的连接”,更新任何throbbers /进度条,任何东西。