为什么 downloadURL 和 updateURL 键的使用被称为异常,它们是如何工作的?
Why is usage of the downloadURL & updateURL keys called unusual and how do they work?
我正在阅读 GM's wiki 以确定 @downloadURL
和 @updateURL
之间的区别(我没有)。但更让我困惑的是,两者都不明智:
It is unusual to specify this value. Most scripts should omit it.
我对此感到惊讶,因为这是脚本自动更新的唯一方式,我不明白为什么不应该使用这些密钥。
wiki 本身很缺乏,没有其他论坛来源被建议,所以我不得不在这里问。也希望获得有关这些密钥的更多详细信息。
主要是 Greasemonkey 的首席开发人员不鼓励使用这些密钥。大多数其他人,包括 the Tampermonkey team 认为不需要这样的警告。
另请注意,这些指令 而不是 始终是自动更新工作所必需的。
他会说这是不寻常的并且 "most" 脚本应该省略它的一些原因:
- 在大多数情况下都不需要,请参阅下面的更新工作原理以及这些指令的工作原理。
- 添加和使用这些指令只是脚本编写者必须检查和维护的更多项目。如果不需要,为什么要工作?
- 更新实现和那些指令have been buggy,也许在 Greasemonkey 中没有很好地实现。
- Tampermonkey 和其他引擎以稍微不同的方式实现更新和那些指令。这意味着在 Tampermonkey 上运行的代码在 Greasemonkey 上可能会失败。
请注意,该 wiki 条目是 made by Greasemonkey's lead developer (Arantius) himself;所以这不仅仅是 wiki 噪音。
更新的工作原理:
脚本更新分 4 个阶段进行:
- 启用阶段and/or"forced"更新。
- 检查阶段。
- 下载阶段。
- 解析和安装阶段。
对于这个问题,我们只关心check和download两个阶段。我们规定更新已启用并且更新的脚本有效且安装正确。
更新脚本时,Greasemonkey(和 Tampermonkey)下载文件两次:
- 第一次下载,由脚本的
updateURL
值控制,只是为了检查文件的 @version
(如果有)和日期 -- 查看是否有可用更新。
第二次下载,由脚本的 downloadURL
值控制,是要安装的新脚本的实际下载。
仅当服务器文件的 @version
编号高于本地文件 and/or 且服务器文件的日期晚于本地文件时,才会进行此下载。 (请注意,脚本引擎之间存在重大差异。)
请参阅下面的 "Why you might use @downloadURL and @updateURL",了解使用 2 个文件下载的原因。
@downloadURL
和 @updateURL
的工作原理:
@downloadURL
仅覆盖默认的内部 "download URL" 位置。
@updateURL
仅覆盖默认的内部 "update URL"(或检查)位置。
在大多数情况下,没有必要这样做。见下文。
- 当您安装用户脚本时,Greasemonkey 会自动记录安装位置。 不需要元指令。
默认情况下,Greasemonkey 将在此处检查 更新并下载 任何更新。
- 但是,如果指定
@downloadURL
,那么 Greasemonkey 将 both 检查并从指定位置下载,而不是从存储位置。
- 但是,如果指定了
@updateURL
,那么 Greasemonkey 将从给定的 "update" 位置检查(而不是下载)。
因此:@updateURL
覆盖 @downloadURL
和默认位置,仅用于 检查 操作。
同时:@downloadURL
覆盖 checking 和 downloading 的默认位置(除非存在 @updateURL
)。
为什么你可以使用 @downloadURL
和 @updateURL
:
首先,有 2 次下载 并且可能有 2 个不同的位置,主要是出于速度和带宽原因。
考虑一个非常大的用户脚本有数千个用户的场景:
- 那些用户的浏览器会不断地敲击主机服务器,检查是否有更新可用。大多数时候,一个人不会,并且会不必要地一遍又一遍地下载大文件。
对于像现在已经不存在的网站
userscripts.org
. 这样的网站来说,这一定是个问题
- 因此开发了一个系统,其中创建了一个单独的文件来保存版本(和日期)信息。所以服务器现在有
veryLarge.user.js
和 veryLarge.meta.js
veryLarge.meta.js
将在每次用户脚本更新时(由开发人员)更新,并且只会包含来自 veryLarge.user.js
. 的 the Metadata Block
- 因此成千上万的浏览器只会重复下载更小的文件
veryLarge.meta.js
-- 节省每个人的时间并节省服务器带宽。
如今,Greasemonkey 和 Tampermonkey 都会自动查找 *.meta.js
文件,因此 通常不需要单独指定。
那么,为什么要明确指定@downloadURL
and/or@updateURL
?一些可能的原因:
- 您的脚本可以通过多种方式或从多个来源(剪切和粘贴、本地复制的文件、辅助服务器等)安装,您只想维护一个 "master" 版本。
- 你想要to track how many initial and/or upgrade downloads your script has.
@downloadURL
也是 recording/conveying 用户从中获取脚本的便捷 "self documenting" 方式。
- 出于某种原因,您希望
*.meta.js
文件与用户脚本位于不同的服务器上。
- 可能是 http 与 https 的问题(有朝一日需要深入研究)。
- 你是个坏人,你希望脚本在未来的某个日期从你控制的服务器更新恶意版本——这不是安装脚本的地方。
Greasemonkey 和 Tampermonkey 之间的一些区别:
(警告:我已经有一段时间没有验证所有这些了。由于 Tampermonkey 不断改进(并且 Greasemonkey 也发生了很多变化),无论如何都会发生变化。)
Tampermonkey 需要对当前文件和较新文件使用 @version
指令。这就是 Tampermonkey 确定更新是否可用的方式。
Greasemonkey 也将使用此方法,因此始终在您可能希望自动更新的脚本中包含 @version
。
不过,Greasemonkey 也要求更新文件要更新。如果没有版本,Greasemonkey 只会比较日期。请注意,这在过去曾导致 Greasemonkey 出现问题,并且还愚蠢地假设许多不同的机器都与正确的日期和时间准确同步。
Greasemonkey 默认只会从 https://
方案更新,但可以选择设置为允许 http://
和 ftp://
方案。
两个引擎都不允许来自 file://
方案的更新。
我正在阅读 GM's wiki 以确定 @downloadURL
和 @updateURL
之间的区别(我没有)。但更让我困惑的是,两者都不明智:
It is unusual to specify this value. Most scripts should omit it.
我对此感到惊讶,因为这是脚本自动更新的唯一方式,我不明白为什么不应该使用这些密钥。
wiki 本身很缺乏,没有其他论坛来源被建议,所以我不得不在这里问。也希望获得有关这些密钥的更多详细信息。
主要是 Greasemonkey 的首席开发人员不鼓励使用这些密钥。大多数其他人,包括 the Tampermonkey team 认为不需要这样的警告。
另请注意,这些指令 而不是 始终是自动更新工作所必需的。
他会说这是不寻常的并且 "most" 脚本应该省略它的一些原因:
- 在大多数情况下都不需要,请参阅下面的更新工作原理以及这些指令的工作原理。
- 添加和使用这些指令只是脚本编写者必须检查和维护的更多项目。如果不需要,为什么要工作?
- 更新实现和那些指令have been buggy,也许在 Greasemonkey 中没有很好地实现。
- Tampermonkey 和其他引擎以稍微不同的方式实现更新和那些指令。这意味着在 Tampermonkey 上运行的代码在 Greasemonkey 上可能会失败。
请注意,该 wiki 条目是 made by Greasemonkey's lead developer (Arantius) himself;所以这不仅仅是 wiki 噪音。
更新的工作原理:
脚本更新分 4 个阶段进行:
- 启用阶段and/or"forced"更新。
- 检查阶段。
- 下载阶段。
- 解析和安装阶段。
对于这个问题,我们只关心check和download两个阶段。我们规定更新已启用并且更新的脚本有效且安装正确。
更新脚本时,Greasemonkey(和 Tampermonkey)下载文件两次:
- 第一次下载,由脚本的
updateURL
值控制,只是为了检查文件的@version
(如果有)和日期 -- 查看是否有可用更新。 第二次下载,由脚本的
downloadURL
值控制,是要安装的新脚本的实际下载。 仅当服务器文件的@version
编号高于本地文件 and/or 且服务器文件的日期晚于本地文件时,才会进行此下载。 (请注意,脚本引擎之间存在重大差异。)请参阅下面的 "Why you might use @downloadURL and @updateURL",了解使用 2 个文件下载的原因。
@downloadURL
和 @updateURL
的工作原理:
@downloadURL
仅覆盖默认的内部 "download URL" 位置。
@updateURL
仅覆盖默认的内部 "update URL"(或检查)位置。
在大多数情况下,没有必要这样做。见下文。
- 当您安装用户脚本时,Greasemonkey 会自动记录安装位置。 不需要元指令。 默认情况下,Greasemonkey 将在此处检查 更新并下载 任何更新。
- 但是,如果指定
@downloadURL
,那么 Greasemonkey 将 both 检查并从指定位置下载,而不是从存储位置。 - 但是,如果指定了
@updateURL
,那么 Greasemonkey 将从给定的 "update" 位置检查(而不是下载)。
因此:@updateURL
覆盖 @downloadURL
和默认位置,仅用于 检查 操作。
同时:@downloadURL
覆盖 checking 和 downloading 的默认位置(除非存在 @updateURL
)。
为什么你可以使用 @downloadURL
和 @updateURL
:
首先,有 2 次下载 并且可能有 2 个不同的位置,主要是出于速度和带宽原因。 考虑一个非常大的用户脚本有数千个用户的场景:
- 那些用户的浏览器会不断地敲击主机服务器,检查是否有更新可用。大多数时候,一个人不会,并且会不必要地一遍又一遍地下载大文件。
对于像现在已经不存在的网站
userscripts.org
. 这样的网站来说,这一定是个问题
- 因此开发了一个系统,其中创建了一个单独的文件来保存版本(和日期)信息。所以服务器现在有
veryLarge.user.js
和veryLarge.meta.js
veryLarge.meta.js
将在每次用户脚本更新时(由开发人员)更新,并且只会包含来自veryLarge.user.js
. 的 the Metadata Block
- 因此成千上万的浏览器只会重复下载更小的文件
veryLarge.meta.js
-- 节省每个人的时间并节省服务器带宽。
如今,Greasemonkey 和 Tampermonkey 都会自动查找 *.meta.js
文件,因此 通常不需要单独指定。
那么,为什么要明确指定@downloadURL
and/or@updateURL
?一些可能的原因:
- 您的脚本可以通过多种方式或从多个来源(剪切和粘贴、本地复制的文件、辅助服务器等)安装,您只想维护一个 "master" 版本。
- 你想要to track how many initial and/or upgrade downloads your script has.
@downloadURL
也是 recording/conveying 用户从中获取脚本的便捷 "self documenting" 方式。- 出于某种原因,您希望
*.meta.js
文件与用户脚本位于不同的服务器上。 - 可能是 http 与 https 的问题(有朝一日需要深入研究)。
- 你是个坏人,你希望脚本在未来的某个日期从你控制的服务器更新恶意版本——这不是安装脚本的地方。
Greasemonkey 和 Tampermonkey 之间的一些区别:
(警告:我已经有一段时间没有验证所有这些了。由于 Tampermonkey 不断改进(并且 Greasemonkey 也发生了很多变化),无论如何都会发生变化。)
Tampermonkey 需要对当前文件和较新文件使用
@version
指令。这就是 Tampermonkey 确定更新是否可用的方式。Greasemonkey 也将使用此方法,因此始终在您可能希望自动更新的脚本中包含
@version
。不过,Greasemonkey 也要求更新文件要更新。如果没有版本,Greasemonkey 只会比较日期。请注意,这在过去曾导致 Greasemonkey 出现问题,并且还愚蠢地假设许多不同的机器都与正确的日期和时间准确同步。
Greasemonkey 默认只会从
https://
方案更新,但可以选择设置为允许http://
和ftp://
方案。两个引擎都不允许来自
file://
方案的更新。