多个jQuery版本在gmail chrome扩展中异步覆盖

时间:2015-09-11 17:00:23

标签: jquery google-chrome google-chrome-extension

基本上,我有一个gmail chrome扩展,它将特定版本的jQuery注入主页面(这样可以正常工作)然后添加一些jQuery插件,扩展程序稍后将根据需要使用它。

问题在于因为所有jQuery版本(据我所知)使用$来调用函数(和插件),如果另一个扩展进来并在我的顶部加载它的jQuery版本,那么我就失去了我的安装插件。有时,我甚至看到其他扩展使用的版本太旧了,我使用的一些“标准”jQuery函数不在其中,它们也是未定义的。

有没有简单的方法可以将我的版本与可能在我的旁边的Gmail邮箱中播放的任何和所有其他扩展分开?我无法知道我的用户可能正在安装哪些扩展程序,所以我不能只是以这种方式解释所有内容。这些天有大量的gmail chrome扩展,“玩得好”似乎是一个巨大的问题,随着时间的推移会变得更加棘手。

如何“保护”我的jQuery版本和插件的任何想法?

2 个答案:

答案 0 :(得分:0)

您可以将jQuery对象保存在特定变量中,并在插件中引用这些变量:

// load jQuery and any plugins here
<script src="BryanPjQuery.js"></script>
<script src="plugins.js"></script>
<script>
var BryanPjQuery = jQuery.noConflict();
(function( $ ) {
  $(function() {

   // add all code here. $ refers to BryanPjQuery
   // so within this function $ = jQuery, outside this function
   // other versions of $ can be used

  });
})(BryanPjQuery);
</script>

有关详细信息,请参阅https://api.jquery.com/jquery.noconflict/或(更多示例)https://learn.jquery.com/using-jquery-core/avoid-conflicts-other-libraries/

答案 1 :(得分:0)

只需在清单中包含jquery,但不要将其包含在列表的Web可访问资源部分中。这似乎对我来说很好。这样,只有内容脚本仍然可以访问jQuery,并且不会覆盖任何内容,反之亦然。