2009-10-27 26 views
2

在使用$ .getScript动态加载.js文件的html页面上。jQuery - 如何检查页面上可用的JavaScript?

稍后如果我想检查是否加载了某个特定的.js文件。这个怎么做?

我可以使用filename.js进行检查吗?或者我必须检查该文件中的对象/函数/变量?

感谢您的答案人。你们建议使用回调函数,全局变量等。但事实是,我在企业环境中工作,其中一个企业.js加载其他.js(我试图检测的那个.js)。不仅我无法修改公司.js,我无法控制它何时会发生变化。我希望可能有一种方法来知道哪个.js文件在页面上加载。

+0

提取你怎么 “动态” 加载JS文件?通过DOM向头部添加脚本标记? – mauris 2009-10-27 15:59:10

+0

@Mauris:问题状态'$ .getScript'用于加载js文件。 – 2009-10-27 16:02:13

+0

他指的是jQuery getScript函数http://docs.jquery。COM /阿贾克斯/ jQuery.getScript – 2009-10-27 16:02:40

回答

0

我想一个办法是设置一些全局布尔(或其他):

var fooLoaded = false; 
var barLoaded = false; 

,并设定他们$.getScript的回调:

$(document).ready(function() { 
    $.getScript("/some/script.js", function(){ 
     fooLoaded = true; 
    }); 
    if(fooLoaded) { 
     ... 
    } 
}); 

这么说,我想一般在加载内的成功回调之后,做任何需要做的事情会是更好的做法。

0

全局对象?

var loadedFiles = {}; 
$.getScript('filename.js'); 
loadedFiles['filename.js'] = true; 

// later... 

if (loadedFiles['filename.js']) { 
    // Do stuff... 
} 

如果存在对该JS文件唯一的对象,那么是的,你也可以检查是否存在一个对象/函数/变量。

编辑 - 使用onSuccess方法的karim79方法将更加可靠,尽管您仍然可以将结果命名空间保留在全局对象内。

0

在您正在加载的脚本中触发某些事件以通知父脚本有关加载脚本的事实。将信息存储到某个全局类的某个数组中。编写简单的函数,它会在这个数组中找到文件名 - isLoaded(filename)。

1

测试此功能的最快捷方式是测试已加载的JavaScript文件中声明的函数或变量的存在性。

if(typeof foo == "undefined") { 
    //JS has loaded 
} else { 
    //JS has not loaded 
} 
0

我会建议在回调中触发一个自定义事件,它会通知您脚本何时加载。您将需要使用.bind()方法将自定义事件绑定到某些内容,并使用.trigger()从回调中触发该事件。例如,这样的事情:

$('body').bind('foo', function() { 
    // do something 
}); 
$.getScript(url, function() { 
    $('body').trigger('foo'); 
});