Javascript 当页面已经包含jQuery时,为什么用户脚本需要创建自己的jQuery副本?
我正在编写一个在我知道已经包含jQuery库的站点上运行的用户脚本。因此,在我的第一次尝试中,我只是直接在userscript中调用jQuery函数,例如:Javascript 当页面已经包含jQuery时,为什么用户脚本需要创建自己的jQuery副本?,javascript,jquery,userscripts,Javascript,Jquery,Userscripts,我正在编写一个在我知道已经包含jQuery库的站点上运行的用户脚本。因此,在我的第一次尝试中,我只是直接在userscript中调用jQuery函数,例如: $('.some-class').css('color', 'red'); 或者别的什么。这工作得很好(使用Tampermonkey和Greasemonkey,我在那里进行了测试) 但是我在看其他人的代码,我看到他们在用户脚本的顶部制作了自己的jQuery副本。比如: var $, jQuery; $ = jQuery = window.
$('.some-class').css('color', 'red');
或者别的什么。这工作得很好(使用Tampermonkey和Greasemonkey,我在那里进行了测试)
但是我在看其他人的代码,我看到他们在用户脚本的顶部制作了自己的jQuery副本。比如:
var $, jQuery;
$ = jQuery = window.jQuery;
这样做的目的是什么?要访问userscript内部的jQuery,似乎不需要它,那么人们为什么要这样做呢
在研究这一点时,我发现建议做同样的事情:
如果您想在已经包含jQuery的站点上使用jQuery,那么
《前进之路》(灵感来源于布鲁诺姆):
但答案并不能解释为什么建议这样做。有人能解释一下这背后的逻辑和它的作用吗?如果我不做,会出什么问题?我的用户脚本会在其他浏览器中崩溃吗?我是在为自己设置某种安全风险吗?我猜这是为了让您确切地知道正在使用的jQuery版本。不过,我建议使用
noConflict()
将其分配给$
之外的另一个变量,否则您可能会破坏网站。因为可以对用户脚本进行沙箱处理,因此它与窗口名称空间隔离。请注意,“引用”和“复制”不是一回事。你不是在抄袭anything@Katie,我还将使用var$=unsafeWindow.jQuery代码>作为窗口。$
可能会被页面上的某些脚本覆盖。请参阅关于jQuery.noConflict()
的任何讨论。这就是为什么我要将对真实的unsafeWindow.jQuery
的引用存储在局部变量$
中;为了确保在我的代码中始终$==jQuery
,我想这是为了让您确切地知道正在使用的jQuery版本。不过,我建议使用noConflict()
将其分配给$
之外的另一个变量,否则您可能会破坏网站。因为可以对用户脚本进行沙箱处理,因此它与窗口名称空间隔离。请注意,“引用”和“复制”不是一回事。你不是在抄袭anything@Katie,我还将使用var$=unsafeWindow.jQuery代码>作为窗口。$
可能会被页面上的某些脚本覆盖。请参阅关于jQuery.noConflict()
的任何讨论。这就是为什么我要将对真实的unsafeWindow.jQuery
的引用存储在局部变量$
中;确保在我的代码中始终$==jQuery
var $ = unsafeWindow.jQuery;