Javascript 有没有办法防止YUI3加载程序加载页面上已经存在的脚本?

Javascript 有没有办法防止YUI3加载程序加载页面上已经存在的脚本?,javascript,yui,yui3,Javascript,Yui,Yui3,我正在将一个手动写入脚本标记的应用程序迁移到一个使用YUI3加载程序管理脚本依赖关系的应用程序。我遇到了一个问题,像jQuery这样的脚本不应该加载两次,因为在某些情况下,遗留代码会将脚本放到页面上,然后YUI加载程序会再次加载它。有没有办法防止这种情况发生?似乎在注入新标记之前,加载程序应该能够查询与要创建的脚本标记具有相同src的脚本标记。大约四分之三的用户将看到如何加载非为YUI编写的外部模块,并通知加载程序它已加载,这样它就不会尝试执行两次。基本上,监视加载程序的onProgress事件

我正在将一个手动写入脚本标记的应用程序迁移到一个使用YUI3加载程序管理脚本依赖关系的应用程序。我遇到了一个问题,像jQuery这样的脚本不应该加载两次,因为在某些情况下,遗留代码会将脚本放到页面上,然后YUI加载程序会再次加载它。有没有办法防止这种情况发生?似乎在注入新标记之前,加载程序应该能够查询与要创建的脚本标记具有相同src的脚本标记。

大约四分之三的用户将看到如何加载非为YUI编写的外部模块,并通知加载程序它已加载,这样它就不会尝试执行两次。基本上,监视加载程序的onProgress事件,当它触发时,调用YUI.add(),并使用您想要给模块的名称,然后加载程序将该模块标记为已加载

一种方法是主动调用模块名上的Y.add()。这对于本身不是用Y.add()定义的模块(例如jQuery插件)非常有效。但是,如果对使用Y.add()定义的模块执行此操作,则可能存在争用情况。例如,考虑下面的顺序:

  • 模块A的脚本正在运行(调用Y.add('A',…))
  • 在运行回调之前,YUI将加载模块A的需求
  • 使用空回调再次调用Y.add('A')(通知YUI A的脚本文件在页面上)
  • 由于异步加载尚未返回,YUI将空回调作为
  • 修复方法是使用以下脚本:

    var preloadedModules = ['a', ... ]; // list of module scripts already on the page
        , noop = function (Y) { }, version = '@VERSION@', i, len, moduleName;
    for (var i = 0, len = preloadedModules.length; i < len; ++i) {
        moduleName = preloadedModules[i];
        if (!YUI.Env.mods[moduleName]) { // avoids overwriting YUI module definitions
            YUI.add(moduleName, noop, version);
        }
    }
    
    var-preload-edmodules=['a',…];//页面上已存在的模块脚本列表
    ,noop=函数(Y){},version='@version@',i,len,moduleName;
    对于(变量i=0,len=preforedModules.length;i