@要求使用jQuery覆盖页面';s$变量

@要求使用jQuery覆盖页面';s$变量,jquery,greasemonkey,tampermonkey,Jquery,Greasemonkey,Tampermonkey,我正在@require-ing jQuery以获取我的Greasemonkey脚本,脚本文件中有以下行: // @require https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js 它工作得很好;我可以使用$('#id')访问DOM 但是,“real”页面的$变量被修改(其中$是jQuery 1.2.xx): 我得到一个错误,$。未定义include 我认为Greasemonkey的沙盒模型可以防止目标页面的变量被覆

我正在
@require
-ing jQuery以获取我的Greasemonkey脚本,脚本文件中有以下行:

// @require https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js
它工作得很好;我可以使用
$('#id')
访问DOM

但是,“real”页面的
$
变量被修改(其中
$
是jQuery 1.2.xx): 我得到一个错误,
$。未定义include

我认为Greasemonkey的沙盒模型可以防止目标页面的变量被覆盖

如何确保包含javascript库不会影响“真实”网站,而只影响我的Greasemonkey脚本;这解释了很多

编辑:
在搜索时找到

可能的解决办法:

 this.$ = this.jQuery = jQuery.noConflict(true);
这样做,可能会隐式地指定$,jQuery将在脚本的命名空间中可用。

,破坏数千个脚本。另见

这是一个巨大的问题,我希望你能和我一起表达你对这个问题的看法/经历

同时,将沙盒恢复到脚本中,并通过编辑以以下行结束来解决
$
冲突:

/@grant GM\u addStyle
//==/UserScript==
/*-需要@grant指令来解决GM 1.0中引入的重大设计变更,
它会恢复沙箱。
*/

指定一个
@grant
值(除了
none
)将重新激活沙箱



您也可以考虑切换到过去,它提供了更好的特性和性能,并且不受这种新沙箱行为的影响。

调用<代码> unSeaveLoop.$ NuRulcIt()<代码>不会返回“旧”jQuery版本,但在此调用<代码> $ > <代码>未定义< /代码>。首先为什么要替换?因为通过
unsafeWindow
,您正在访问页面的js。我想你想做
$.noConflict()。不是真的:
$.include
未定义错误是由页面的js引起的。我不相信
noConflict()
hack在所有情况下都有效(但我现在不准备编写测试用例)。这是错误的方法,最健壮的解决方案是恢复沙箱。