一尘不染

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

javascript

自几天前发布新的Greasemonkey1.0以来,每个具有jQuery的站点以及我在Greasemonkey脚本中使用jQuery的站点均无法正常运行我的脚本。我的GS脚本中的jQuery使用@require元数据)与页面的jQuery冲突。这是由于新的@grant代码。

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


阅读 275

收藏
2020-04-25

共1个答案

一尘不染

Greasemonkey 1.0彻底改变了沙箱的工作方式,破坏了数千个脚本。这是一个很大的问题,我希望您能与我一起就该问题的主要错误报告表达您的意见/经验。

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等高级引擎兼容。

2020-04-25