Greasemonkey 1.0中的jQuery与使用jQuery的网站冲突

Gar*_*ary 19 javascript firefox jquery greasemonkey tampermonkey

自从几天前发布了新的Greasemonkey 1.0以来,每个拥有jQuery的站点以及我在Greasemonkey脚本中使用jQuery的站点都没有正确运行我的脚本.我在我的GS脚本中使用@require的jQuery (使用元数据)与页面的jQuery冲突.这是由于新@grant代码.

我已经阅读了文档,但仍然不知道如何再次在沙箱中运行GS脚本; 唯一的选择似乎是授予对GS API的访问权限或将其授予无API并在没有任何安全限制的情况下运行脚本,当我设计了几十个GS脚本来运行时,这对我来说根本不起作用有安全限制,喜欢这样.

Bro*_*ams 14

Greasemonkey 1.0彻底改变了沙盒的工作方式,破坏了成千上万的脚本.这是一个很大的问题,我希望你能和我一起就这个问题发表关于原则错误报告的意见/经验.

Greasemonkey博客声称您可以使用以下方法解决问题:

this.$ = this.jQuery = jQuery.noConflict(true);
Run Code Online (Sandbox Code Playgroud)

......我不确定在所有情况下都会有效.从避免副作用,DRY原则,原子编码哲学来看,这是完全错误的方法.在我看来,最好的策略是恢复沙箱.

通过指定@grant值(除了none)来重新激活沙箱.编辑元数据块以结束以下行:

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

沙箱将被恢复,所有冲突都将得到解决.
脚本将与Tampermonkey和Violentmonkey等高级引擎兼容.


Wac*_*Get 7

两年过去了,这个"特征"仍然没有得到充分记录或解决.

需要jQuery的脚本仍然与使用jQuery的一些页面冲突.

可能的解决方案是

  1. 添加@grant GM_log或类似于沙箱脚本
  2. 通过添加此块来对脚本中的现有jQuery对象进行别名:

    var my_jquery = jQuery;

    jQuery.noConflict(true);

    var $ = my_jquery, jQuery = my_jquery;

  3. 不要使用jQuery

总而言之,Greasemonkey做出了一个糟糕的决定.


RAS*_*ASG 5

有同样的问题。

从 GM 版本 1.0 开始,我所有@require使用 jQuery 的脚本在也使用 jQuery 的站点上运行都停止工作了。

我知道,我可以尝试类似$ = unsafeWindow.$,但这不是重点。

这里的重点是他们曾经工作过,现在他们不会了。

添加@grant GM_log固定它们。