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

Javascript Greasemonkey 1.0中的jQuery与使用jQuery的网站冲突,javascript,jquery,firefox,greasemonkey,tampermonkey,Javascript,Jquery,Firefox,Greasemonkey,Tampermonkey,自从几天前新的Greasemonkey 1.0发布以来,每个有jQuery的站点以及我在Greasemonkey脚本中使用jQuery的站点都没有正确运行我的脚本。GS脚本中的jQuery(使用@require元数据)与页面的jQuery冲突。这是由于新的代码 我已经阅读了文档,但仍然不知道如何再次在沙箱中运行GS脚本;唯一的选择似乎是要么授予对GS API的访问权限,要么不授予任何权限,并在没有任何安全限制的情况下运行脚本,这对我来说根本不起作用,因为我已经设计了几十个GS脚本,以安全限制的方

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

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

,破坏了数千个脚本。这是一个巨大的问题,我希望你能和我一起表达你对这个问题的看法/经历

:

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

通过指定
@grant
值(除了
none
)重新激活沙箱。编辑您的以以下行结束:

/@grant GM\u addStyle
//@grant GM.getValue
//==/UserScript==
/*-需要@grant指令来解决GM 1.0中引入的设计缺陷
在GM 4.0中也是如此。
它会恢复沙箱。
*/
沙箱将被恢复,所有冲突都将得到解决。
这些脚本将与Tampermonkey和Violentmonkey等高级引擎兼容。

也有同样的问题

自GM版本1.0以来,我所有的
@需要
jQuery的脚本,在同样使用jQuery的站点上运行,都停止工作

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

这里的重点是他们过去工作,现在不工作了

添加
@grant GM_log
修复了它们。

两年过去了,这个“功能”仍然没有得到充分的记录或解决

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

可能的解决办法是:

  • 添加
    @grant GM_log
    或类似于沙箱脚本
  • 通过添加以下块,别名脚本中的现有jQuery对象:

    var my_jquery=jquery

    jQuery.noConflict(true)

    var$=my\u jquery,jquery=my\u jquery

  • 不要使用jQuery


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

    我应该在
    @grant
    指令中输入什么?这不是只适用于Greasemonkey API吗?我怎样才能使
    @require
    在沙箱中工作?只要使用
    @grant GM_getValue
    ,就可以了。即使您实际上没有调用
    GM_getValue()
    @grant
    指令也有恢复沙箱的副作用;所以,
    @require
    应该回到应该的工作方式。啊,是的,我想这是一个选择。这只是一种解决办法,但至少是一种选择。不过,我现在仍然坚持使用0.9,因为我有太多需要更改的脚本,在GS解决此问题之前,我宁愿让它们保持不变。现在,我收到了来自我脚本的多个用户的支持请求。请和/或对8月24日左右发布的.GS 1.0发表评论。大约从8月27日开始,他们就被GS 1.0的问题所困扰。看来终于有办法了。看起来他们也在GS的博客上发布了一些相关信息。
    this.$ = this.jQuery = jQuery.noConflict(true);