Javascript Greasemonkey 1.0中的jQuery与使用jQuery的网站冲突
自从几天前新的Greasemonkey 1.0发布以来,每个有jQuery的站点以及我在Greasemonkey脚本中使用jQuery的站点都没有正确运行我的脚本。GS脚本中的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脚本,以安全限制的方
@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);