Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当页面已经包含jQuery时,为什么用户脚本需要创建自己的jQuery副本?_Javascript_Jquery_Userscripts - Fatal编程技术网

Javascript 当页面已经包含jQuery时,为什么用户脚本需要创建自己的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.

我正在编写一个在我知道已经包含jQuery库的站点上运行的用户脚本。因此,在我的第一次尝试中,我只是直接在userscript中调用jQuery函数,例如:

$('.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;