【问题标题】:Creating Embeddable JS that requires jQuery, how to not overwrite existing jQuery创建需要 jQuery 的 Embeddable JS,如何不覆盖现有的 jQuery
【发布时间】:2015-01-26 03:58:35
【问题描述】:

我正在创建一个用户可以在他们的网站上包含的 JS sn-p。这个 sn-p 依赖于 jQuery(和 Backbone)。如果我将它嵌入到尚未加载 jQuery 的站点中,它工作正常,但如果它加载,它通常仍然可以,除非他们编写了自定义 jQuery 扩展,然后被覆盖。

是否可以对我的 jQuery 进行限定,使其不会覆盖任何现有的 jquery?

【问题讨论】:

  • 这一切都取决于它们包含您的脚本的位置。您可以指定某人将您的
  • @guavacat。诚然,这始终是一种选择。我想知道是否有可能以某种我不必这样做的方式来确定 jquery 的范围

标签: javascript jquery ruby-on-rails backbone.js


【解决方案1】:

我最近遇到了一个非常相似的问题。

我们使用的是 Requirejs 1.0.6,然后我们使用 segment.com 将分析集成到我们的 web 应用程序中。里面包含了另外一个叫做inspectlet.js的js,用来重新定义jquery。

因为我们的原始应用程序有 jquery 扩展,所以在我们集成分析代码的那一刻,所有的都消失了,因为 jquery 被重新定义了。

在我们的案例中,问题是inspeclet.js 在amd/require 中重新定义了jquery,当升级到requirejs2.0.5 时解决了这个问题。

我建议使用与 inspectlet.js 相同的代码来使用/定义 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;
}

【讨论】:

  • 有趣的方法!我会调查的。
  • 我不能推荐这种方法。我只是尝试在我的项目中使用使用 AMD 加载器 (CujoJS Curl) 的 Inspectlet,但由于嵌入式 jQuery 代码与 AMD 兼容,它根本无法加载,因此试图重新定义已经加载的 jquery AMD模块。
猜你喜欢
  • 2013-08-03
  • 1970-01-01
  • 1970-01-01
  • 2011-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多