@require
元数据)与页面的jQuery冲突。这是由于新的@grant
代码造成的。我已经阅读了文档,但是仍然不知道如何再次在沙箱中运行GS脚本;唯一的选择似乎是要么授予对GS API的访问权限,要么不授予它访问权限,然后在没有任何安全限制的情况下运行脚本,当我设计了数十个GS脚本以运行时,这对我根本不起作用具有安全性限制,并喜欢这种方式。
#1 楼
Greasemonkey 1.0彻底改变了沙箱的工作方式,破坏了数千个脚本。这是一个很大的问题,我希望您能与我一起就该问题的主要错误报告表达您的意见/经验。Greasemonkey博客声称您可以通过以下方法解决该问题:
this.$ = this.jQuery = jQuery.noConflict(true);
...我不确定在所有情况下都可以使用。从避免副作用,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.
*/
将恢复沙箱并且所有冲突都将得到解决。
脚本将与Tampermonkey和Violentmonkey等高级引擎兼容。
#2 楼
两年过去了,这个“功能”还没有得到足够的文档记录或解决。需要jQuery的脚本仍然与某些使用jQuery的页面冲突。
可能的解决方案是:
添加
@grant GM_log
或类似于沙箱的脚本通过添加以下内容来别名脚本中现有的jQuery对象块:
var my_jquery = jQuery;
jQuery.noConflict(true);
var $ = my_jquery, jQuery = my_jquery;
不要使用jQuery
总而言之,Greasemonkey做出了一个可怕的决定。
#3 楼
遇到了同样的问题。自GM 1.0版以来,我在qq1202079q jQuery上运行的所有脚本(也使用jQuery的站点)都停止运行。
我知道,我可以尝试一些方法像
@require
一样,但这不是重点。这里的要点是它们曾经工作过,现在却不再工作了。
添加
$ = unsafeWindow.$
可以修复它们。
评论
我将在@grant指令中输入什么?那不是仅适用于Greasemonkey API吗?如何使@require只需使用@grant GM_getValue,就可以解决问题。即使您实际上没有调用GM_getValue(),@ grant指令也具有恢复沙箱的副作用。因此@require应该恢复到应有的状态。
是的,我认为这是一个选择。只是一种解决方法,但至少是一种选择。我现在仍然坚持使用0.9,因为我有太多需要更改的脚本,我宁愿保持不变,直到GS解决此问题。
好吧,现在我收到了脚本的多个用户的支持请求。请向GM开发人员提交错误报告和/或对此错误发表评论。
GS 1.0于8月24日左右发布。从8月27日左右开始,他们就被GS 1.0问题所困扰。看起来终于可以解决了。看起来他们还在GS博客上发布了有关此内容的信息。