创建需要 jQuery 的可嵌入 JS,如何不覆盖现有的 jQuery
Creating Embeddable JS that requires jQuery, how to not overwrite existing jQuery
我正在创建一个用户可以包含在他们网站上的 JS 片段。此代码段取决于 jQuery(和 Backbone)。如果我将它嵌入到尚未加载 jQuery 的站点中,它会工作正常,但如果加载了,它通常仍然没问题,除非他们编写了自定义 jQuery 扩展,然后被覆盖。
是否可以限定我的 jQuery 范围以便它不会覆盖任何现有的 jqueries?
我最近遇到了一个非常相似的问题。
我们使用 Requirejs 1.0.6,然后我们使用 segment.com 将分析集成到我们的网络应用程序中。它包括另一个名为inspectlet.js的js,用于重新定义jquery。
因为我们的原始应用程序有 jquery 个扩展,所以在我们集成分析代码时所有扩展都消失了,因为 jquery 被重新定义了。
我们案例中的问题是 inspectlet.js 在 amd/require 中重新定义 jquery,升级到 requirejs2.0.5 后解决了。
我建议使用与 inspectlet.js 到 use/define jquery 相同的代码。
http://cdn.inspectlet.com/inspectlet.js
var __inspsetjqueryback = false;
if (typeof jQuery != "undefined"){
__inspsetjqueryback = jQuery;
}
var __inspsetdollarback = false;
if (typeof $ != "undefined"){
__inspsetdollarback = $;
}
if(typeof jQuery != "undefined") jQuery.noConflict(true);
//define jquery - execution execution code goes here...
var $i = $i || jQuery.noConflict(true);
if(__inspsetjqueryback !== false){
jQuery = __inspsetjqueryback;
}
if(__inspsetdollarback !== false){
$ = __inspsetdollarback;
}
我正在创建一个用户可以包含在他们网站上的 JS 片段。此代码段取决于 jQuery(和 Backbone)。如果我将它嵌入到尚未加载 jQuery 的站点中,它会工作正常,但如果加载了,它通常仍然没问题,除非他们编写了自定义 jQuery 扩展,然后被覆盖。
是否可以限定我的 jQuery 范围以便它不会覆盖任何现有的 jqueries?
我最近遇到了一个非常相似的问题。
我们使用 Requirejs 1.0.6,然后我们使用 segment.com 将分析集成到我们的网络应用程序中。它包括另一个名为inspectlet.js的js,用于重新定义jquery。
因为我们的原始应用程序有 jquery 个扩展,所以在我们集成分析代码时所有扩展都消失了,因为 jquery 被重新定义了。
我们案例中的问题是 inspectlet.js 在 amd/require 中重新定义 jquery,升级到 requirejs2.0.5 后解决了。
我建议使用与 inspectlet.js 到 use/define jquery 相同的代码。
http://cdn.inspectlet.com/inspectlet.js
var __inspsetjqueryback = false;
if (typeof jQuery != "undefined"){
__inspsetjqueryback = jQuery;
}
var __inspsetdollarback = false;
if (typeof $ != "undefined"){
__inspsetdollarback = $;
}
if(typeof jQuery != "undefined") jQuery.noConflict(true);
//define jquery - execution execution code goes here...
var $i = $i || jQuery.noConflict(true);
if(__inspsetjqueryback !== false){
jQuery = __inspsetjqueryback;
}
if(__inspsetdollarback !== false){
$ = __inspsetdollarback;
}