Gar*_*ary 19 javascript firefox jquery greasemonkey tampermonkey
自从几天前发布了新的Greasemonkey 1.0以来,每个拥有jQuery的站点以及我在Greasemonkey脚本中使用jQuery的站点都没有正确运行我的脚本.我在我的GS脚本中使用@require
的jQuery (使用元数据)与页面的jQuery冲突.这是由于新@grant
代码.
我已经阅读了文档,但仍然不知道如何再次在沙箱中运行GS脚本; 唯一的选择似乎是授予对GS API的访问权限或将其授予无API并在没有任何安全限制的情况下运行脚本,当我设计了几十个GS脚本来运行时,这对我来说根本不起作用有安全限制,喜欢这样.
Bro*_*ams 14
Greasemonkey 1.0彻底改变了沙盒的工作方式,破坏了成千上万的脚本.这是一个很大的问题,我希望你能和我一起就这个问题发表关于原则错误报告的意见/经验.
Greasemonkey博客声称您可以使用以下方法解决问题:
this.$ = this.jQuery = jQuery.noConflict(true);
Run Code Online (Sandbox Code Playgroud)
......我不确定在所有情况下都会有效.从避免副作用,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.
*/
Run Code Online (Sandbox Code Playgroud)
沙箱将被恢复,所有冲突都将得到解决.
脚本将与Tampermonkey和Violentmonkey等高级引擎兼容.
两年过去了,这个"特征"仍然没有得到充分记录或解决.
需要jQuery的脚本仍然与使用jQuery的一些页面冲突.
可能的解决方案是
@grant GM_log
或类似于沙箱脚本通过添加此块来对脚本中的现有jQuery对象进行别名:
var my_jquery = jQuery;
jQuery.noConflict(true);
var $ = my_jquery, jQuery = my_jquery;
不要使用jQuery
总而言之,Greasemonkey做出了一个糟糕的决定.
有同样的问题。
从 GM 版本 1.0 开始,我所有@require
使用 jQuery 的脚本在也使用 jQuery 的站点上运行都停止工作了。
我知道,我可以尝试类似$ = unsafeWindow.$
,但这不是重点。
这里的重点是他们曾经工作过,现在他们不会了。
添加@grant GM_log
固定它们。
归档时间: |
|
查看次数: |
6449 次 |
最近记录: |