如何获取已加载脚本的列表,包括动态加载的脚本

时间:2011-11-14 02:02:35

标签: javascript jquery html dom

我正在尝试将某个脚本与页面上当前加载的脚本匹配:

if($('script[src="' + sn + '"]').length == 0)
  $('head').append('<scr' + 'ipt src="' + sn +'"></scr' + 'ipt>');  

这只适用于正常加载的脚本。

对于使用javascript注入的脚本,例如我的情况下的脚本,它不起作用:(

显然,以这种方式加载的脚本在DOM中是不可见的,即使它们运行。

4 个答案:

答案 0 :(得分:4)

var isThere = false;
$("script").each(function() {
    if ($(this).attr("src") == sn) {
        isThere = true;  
        // this works also with injected scripts!!
    }
});
if (isThere === false) {
    $('head').append('<scr' + 'ipt src="' + sn +'"></scr' + 'ipt>');
}

答案 1 :(得分:2)

无法可靠地知道已加载了哪些脚本元素,因为一旦加载并执行了脚本元素,就可以删除它对文档的影响为零。此外,插入使用 innerHTML 属性的脚本元素不会被执行,因此它们的存在毫无意义(或多或少)。

您所能做的就是获取文档中当前脚本元素的列表,您无法可靠地知道哪些脚本元素已被加载甚至已执行。

答案 2 :(得分:1)

为什么不测试脚本中是否存在某些内容(例如全局变量名,全局对象或函数名)。

if (!window.functionName) {
    // script holding functionName must not be present so load it dynamically
}

答案 3 :(得分:0)