基本上,我有一个gmail chrome扩展,它将特定版本的jQuery注入主页面(这样可以正常工作)然后添加一些jQuery插件,扩展程序稍后将根据需要使用它。
问题在于因为所有jQuery版本(据我所知)使用$来调用函数(和插件),如果另一个扩展进来并在我的顶部加载它的jQuery版本,那么我就失去了我的安装插件。有时,我甚至看到其他扩展使用的版本太旧了,我使用的一些“标准”jQuery函数不在其中,它们也是未定义的。
有没有简单的方法可以将我的版本与可能在我的旁边的Gmail邮箱中播放的任何和所有其他扩展分开?我无法知道我的用户可能正在安装哪些扩展程序,所以我不能只是以这种方式解释所有内容。这些天有大量的gmail chrome扩展,“玩得好”似乎是一个巨大的问题,随着时间的推移会变得更加棘手。
如何“保护”我的jQuery版本和插件的任何想法?
答案 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,并且不会覆盖任何内容,反之亦然。
在此处包括jQuery:https://developer.chrome.com/extensions/content_scripts
不要在可访问网络的资源部分中包括jQuery。 https://developer.chrome.com/extensions/manifest/web_accessible_resources