Greasemonkey: Firefox < FF57(例如 FF56 和 52ESR)不应自动“升级”到 Greasemonkey 4

创建于 2017-12-13  ·  13评论  ·  资料来源: greasemonkey/greasemonkey

GM 4.1 中的strict_min_version52.0 。 这会导致人们使用支持遗留扩展(例如 FF56 和 52ESR)的 Firefox 版本“升级”到 4.1。 许多使用 FF 52ESR 或继续使用 FF55/56 的人正在这样做,以便他们能够继续使用旧版扩展。

Greasemonkey 的旧版本比 4.x 版本更实用,而且永远都是。 运行 Firefox < FF57 版本的人不应自动“升级”到 Greasemonkey 4.x。

因此, manifest.json应该有:

"strict_min_version": "57.0"

虽然用户可以选择禁用 GM 或一般扩展的自动更新(即这个strict_min_version设置可以在配置文件的基础上解决),但 GM4 并不是真正的“升级”。 大多数用户认为这是降级。 用户在使用 GM4 时不应自动升级到 GM4,因为他们使用的 Firefox 版本不支持旧版扩展。

最有用的评论

我认为动力在于您安装所需的 Greasemonkey 版本,然后关闭自动更新。

所有13条评论

我认为最低版本设置是3.x版本嵌入WebExtension以方便脚本迁移的时间段的神器。 如果不降低它,我不相信插件会正确安装。

4.1 以较低的最低版本推送,_oops?_。 我不认为这样做是为了“故意强迫”人们使用 4.x,并且帖子中的敌意是不必要的。

@Sxderp没有敌意。 我很抱歉听起来是那样的。 即使重新阅读我写的内容,我也不完全确定您认为哪个部分是敌对的。 所以,我编辑了它,猜测(部分)你觉得什么是令人反感的。

请注意,虽然我确实说“强制”(我只是想描述用户会发生什么),但我没有说“故意强制”(这表明我在设置背后有一些意图,我是不想做)。 [你让我第二次猜测自己。 我不认为我说的是“故意强迫”,但现在我已经编辑了原始评论,我无法 100% 验证它,因为作为帖子的作者,我没有收到包含内容的电子邮件。 如果我这样做了,我很抱歉。 这不是故意的。]

注意:虽然我确实对 Mozilla 对 WebExtensions-only 的切换持负面看法,但我觉得参与 GM 的人很好地处理了 Mozilla 将他们置于其中的情况。 这包括必须与大量指责扩展编写者的人打交道,这完全是 Mozilla 的错。

哎呀,我已经在 v56 上“冻结”了我的 FF,现在使用 GM4.1,我在非常简单的脚本上遇到了一些模糊的错误,比如"Error: Permission denied to access property "nodeType""

我遇到了一些晦涩的错误,例如

用户脚本在“内容脚本”上下文中运行。 如果在此上下文中声明对象/函数,则需要将它们克隆到窗口,然后窗口才能访问它们。 Mozilla 实现了这个安全功能,它可以防止泄漏到页面范围内。

https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Content_scripts#Sharing_content_script_objects_with_page_scripts

@Sxderp是的,我已经在更新说明中读到unsafeWindow的工作方式有所不同,应该使用exportFunction() or cloneInto()并链接您所做的同一篇文章(它解释了如何编写扩展,而不是用户脚本))。 没有人给出任何示例如何在用户脚本中实际做到这一点。 但这不是重点。 关键是 FF<=56 不会受到整个延迟的影响,因此没有理由强迫它。

没有人给出任何示例如何在用户脚本中实际做到这一点。

几乎完全一样。 如果有人说“内容脚本”,请将其替换为“用户脚本”。 照常进行。

例如,是我前段时间发布的内容。

此外,如果您使用window.eval() ,则该参数将直接在页面范围内运行,而无需处理导出。

谢谢。 至于eval() - eval 是邪恶的,使用 eval 的第一条规则是“不要使用 eval”。

@Spown IMO, exportFunction()cloneInto()应该避免,因为它们只是 Firefox。 用户脚本和 WebExtensions 的一个显着好处是它们可以在各种不同的浏览器中运行。 您可以通过多种方式在页面上下文中执行代码。 我在用户脚本和内容脚本中执行此操作的方式是一个函数executeInPage() ,您可以在 Stack Overflow 上的这个答案中找到它。 它允许您将参数传递给您正在调用的函数,将这些参数克隆到页面上下文中。 使用一个简单的函数,将传递给窗口上下文中的变量的参数值赋值(例如window[variableName] ),您可以轻松地完成cloneInto()所做的事情。

它不如cloneInto()灵活,因为它只处理ObjectArrayfunctionRegExpDate和/或其他原语( Booleannull 、 undefined 、 NumberString ,但不是Symbol )。

@Sxderp这一切可能都是真的,但我真的不在乎,因为我选择不通过不更新到 FF>56 来参与整个事情。 但它仍然像在这种情况下一样渗透。

顺便说一句,像您在示例中所做的那样,尝试在我的脚本中重用页面的 jQuery(返回上述错误)仍然会产生相同的错误。 非易失性

我认为动力在于您安装所需的 Greasemonkey 版本,然后关闭自动更新。

如果我升级到 Greasemonkey 4,是否可以安装 Greasemonkey 3 来降级并继续使用它,如果我愿意的话? 还是 Greasemonkey 4 做出了不可逆转的改变?

@garyking你应该可以毫无问题地降级。 脚本文件应该保留。

此页面是否有帮助?
0 / 5 - 0 等级