只能在闭包中加载jQuery
Possible to load jQuery only inside closure?
我认为这是无法做到的,尽管我知道requirejs可以做类似的事情,我想知道这是否可以在require之外实现。
我正在编写一段SaaS JavaScript代码,它很可能需要jQuery来跨浏览器运行。有些网站有,有些没有,但如果他们不使用它,我不想将 jQuery 粘贴在窗口对象上。虽然我可以单独为我使用 jQuery 的所有内容创建替代方案......我想知道是否有一种方法可以加载 jQuery 仅在我的闭包中使用。这可能吗?
当你加载jQuery的标准版本时,默认情况下jQuery将自身分配给全局名称jQuery和$。如果你在页面中的闭包文件之前加载你的jQuery版本,那么在你的闭包中做
var $ = jQuery.noConflict(true);
它将撤消您的 jQuery 版本对全局对象所做的任何修改。
但是,值得注意的是,这会产生争用条件。如果在加载 jQuery 文件和闭包调用之间触发任何事件或超时jQuery.noConflict(true)
它们将意外使用您加载的 jQuery 版本。
另一种方法是编辑您正在使用的 jQuery 文件,以便在 jQuery 文件底部包含对 jQuery.noConflict(true)
的调用。您可以将结果分配给其他人不会想到使用的任意名称,例如"abcRandomNumberHere"。然后,您可以在闭包中从该全局名称中检索 jQuery 实例,将其分配给名为 jQuery 和/或 $ 的局部变量,并在那时删除全局引用。
// Your jQuery file on your server
// ...
// End of file:
someRandomGlobalName = jQuery.noConflict(true);
// The file that contains your closure:
(function() {
var $, jQuery;
$ = jQuery = someRandomGlobalName;
delete window.someRandomGlobalName;
// Your code that uses jQuery here
} ());
这是 RequireJS 为将 jQuery 排除在全局命名空间之外所做的粗略近似。最新版本的jQuery具有内置代码,可以检测脚本加载器(如RequireJS(的存在,而不是分配给全局名称jQuery,而是将对自身的引用传递到RequireJS中,并使全局对象保持不变。这样,RequireJS在内部包含对jQuery的引用,但全局.requirejs变量被修改。
为jQuery版本创建自己的非冲突全局名称,并关闭"会合"类似于RequireJS的功能。 RequireJS使用的名称是"全局名称":requirejs.s.contexts._.jQuery(不完全是,而是像这样(。
调用jQuery.noConflict(true)
,它会将$
重新分配给它所在的位置,并将jQuery
重新分配给它所在的位置。
然后,您可以将上述表达式返回的引用传递到闭包中。
(function(jQuery) {
})(jQuery.noConflict(true));
是的,调用jQuery.noConflict(true)
将完全删除 jquery 从全局命名空间中添加的任何内容,将其恢复到以前允许冲突库和/或多个版本的 jQuery 的状态。
<script src="jquery.min.js"></script>
<script>
(function($){
$("el").doSomething();
})(jQuery.noConflict(true));
</script>
- 使用javascript函数在页面初始化后加载jquery
- 什么'这是加载jQuery的最佳方式
- 在WordPress站点中加载jquery.js后加载javascript代码
- 延迟加载jquery后替换$(document).ready(function)
- 如何使用onLoad加载jQuery JSON.从Zipcode On Form获取城市和州
- 对页面重新加载 Jquery 执行操作
- 在Ajax(过滤器)加载之后加载jQuery脚本
- 异步加载JQuery时Tabbed Box已损坏
- 加载Jquery时Chrome扩展出错
- 在更改事件上加载jQuery DataTable
- 手动加载JQuery而不触发内容安全策略
- 如果更改,请在ng之后重新加载Jquery
- 脚本似乎在加载jQuery之前运行-未定义Uncaught ReferenceError:$
- 在使用jquery之前动态加载jquery
- 如何重新加载jquery,以便它能为下一个进程工作
- Firefox没有't从ajax.googleapis.com加载jquery
- 我无法在自定义Wordpress主题中成功加载jQuery
- 正在从maphilight href加载Jquery选项卡
- 如何在完全加载html之后加载jquery代码段
- 在页面加载jQuery/Javascript时,按.class对表行进行排序