@ require-ing jQuery覆盖页面的$变量

man*_*els 3 jquery greasemonkey tampermonkey

@require在我的脚本文件中使用此行为我的Greasemonkey脚本执行jQuery:

// @require https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js
Run Code Online (Sandbox Code Playgroud)

而且效果很好; 我可以$('#id')用来访问DOM.

但是,$"真实"页面的变量被修改($jQuery 1.2.xx 在哪里):我得到一个$.include未定义的错误.

我认为Greasemonkey的沙盒模型会阻止目标页面的变量被覆盖?

如何确保包含javascript库不会影响"真实"网站,而只影响我的Greasemonkey脚本?

Bro*_*ams 8

Greasemonkey 1.0彻底改变了沙盒的工作方式,破坏了成千上万的脚本.另请参阅,Greasemonkey 1.0中的jQuery与使用jQuery的网站冲突.

这是一个很大的问题,我希望你能和我一起就这个问题发表关于原则错误报告的意见/经验.

同时,$通过编辑元数据块以使用以下行结束,将沙箱恢复到脚本并解决冲突:

// @grant       GM_addStyle
// ==/UserScript==
/*- The @grant directive is needed to work around a major design change introduced in GM 1.0,
    It restores the sandbox.
*/
Run Code Online (Sandbox Code Playgroud)


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


您也可以考虑切换到过去提供了卓越功能和性能的Scriptish,并且不会受到这种新沙盒行为的影响.