有没有办法防止 YUI3 加载器加载页面上已有的脚本
Is there a way to prevent the YUI3 loader from loading scripts that are already on the page?
我正在努力将手动写入脚本标签的应用程序迁移到使用 YUI3 加载器管理脚本依赖项的应用程序。我遇到了像jQuery这样的脚本不应该加载两次的问题,因为在某些情况下,遗留代码会将脚本放在页面上,然后YUI加载器稍后再次加载它。有没有办法防止这种情况发生?似乎加载器应该能够在注入新标签之前使用与它将要创建的相同的 src 查询脚本标签。
在本视频的大约 3/4 中,您将看到如何加载不是为 YUI 编写的外部模块,并通知加载器它已加载,这样它就不会尝试执行两次。 基本上,你监视加载器的onProgress事件,当它触发时,你调用YUI.add()与你想要给模块命名,然后加载器将该模块标记为已加载。
事实证明,一种方法是在模块名称上主动调用 Y.add()。这适用于本身不是使用 Y.add() 定义的模块(例如 jQuery 插件)。但是,如果使用使用 Y.add() 定义的模块执行此操作,则存在潜在的争用条件。例如,请考虑以下顺序:
- 运行模块 A 的脚本(调用 Y.add('A', ...))
- YUI 在运行回调之前关闭以加载模块 A 的要求
- 再次调用 Y.add('A'),回调为空(通知 YUI A 的脚本文件在页面上)
- YUI 由于异步加载尚未返回,YUI 将空回调作为 A 的定义
解决方法是使用以下脚本:
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);
}
}
相关文章:
- Google Adsense多次加载脚本
- 如何准确执行加载脚本&退出弹出窗口
- RequireJ无法随机加载脚本
- 通过浏览器加载页面时触发加载脚本(js或jQuery)'s”;返回“;作用
- 在以前的文件夹中加载脚本
- 如何重新加载脚本标记
- 正在脚本中加载脚本
- 在pjax完成其工作时加载脚本
- I'我用setTimeout加载脚本,你能找到一个更快的方法吗
- 在页面模板上加载脚本
- 如何在我的情况下创建加载脚本
- 当用$.getScript()加载脚本时,有一种方法可以从用$.get script()装载的脚本中调用父脚本中的函数
- 延迟加载 脚本加载和/或执行
- 如何使用谷歌页面速度CSS加载脚本延迟多个CSS文件
- 最后加载脚本
- 如何基于HTML中的类加载脚本
- 在局部视图中加载脚本文件
- 如何防止在使用hapi.js reply().hold()时重新加载脚本
- 异步加载脚本
- 脚本加载脚本广告