自几天前发布新的Greasemonkey1.0以来,每个具有jQuery的站点以及我在Greasemonkey脚本中使用jQuery的站点均无法正常运行我的脚本。我的GS脚本中的jQuery使用@require元数据)与页面的jQuery冲突。这是由于新的@grant代码。
@require
@grant
我已经阅读了文档,但仍然不知道如何再次在沙箱中运行GS脚本;唯一的选择似乎是要么授予对GSAPI的访问权限,要么不授予其访问权限,然后在没有任何安全限制的情况下运行脚本,当我设计了数十个GS脚本以运行时,这对我根本不起作用具有安全性限制,并且喜欢这种方式。
Greasemonkey 1.0彻底改变了沙箱的工作方式,破坏了数千个脚本。这是一个很大的问题,我希望您能与我一起就该问题的主要错误报告表达您的意见/经验。
this.$ = this.jQuery = jQuery.noConflict(true);
…我不确定在所有情况下都可以使用。从副作用避免,DRY原理,原子编码原理来看,这是完全错误的方法。我认为,最好的策略是还原沙箱。
通过指定一个@grant值(除外none)重新激活沙盒。编辑您的 元数据块 ,以以下几行结尾:
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等高级引擎兼容。