为什么使用downloadURL& updateURL键称为异常,它们如何工作?

时间:2016-06-25 00:09:55

标签: greasemonkey userscripts tampermonkey

我正在阅读GM's wiki以确定@downloadURL&之间的差异@updateURL(我没有)。但令我更加困惑的是,两者都没有得到修改:

  

指定此值是不常见的。大多数脚本都应该省略它。

我对此感到惊讶,因为它是脚本自动更新的唯一方式,我不知道为什么不能使用这些密钥。

维基本身非常缺乏,没有其他论坛消息来源,所以我不得不问这里。也希望了解有关这些密钥的更多详细信息。

1 个答案:

答案 0 :(得分:34)

主要由Greasemonkey的首席开发人员阻止使用这些密钥。包括the Tampermonkey team在内的大多数人都不需要这样的警告 另请注意,这些指令始终需要 才能使自动更新生效。

为什么他会说这是不寻常的,而且#34;大多数"脚本应该省略它:

  1. 在大多数情况下都不需要,请参阅下面的更新如何工作以及这些指令的工作方式。
  2. 添加和使用这些指令只是脚本编写者必须检查和维护的更多项目。如果不需要,为什么要工作?。
  3. 更新实现和那些指令have been buggy,也许,在Greasemonkey中没有很好地实现。
  4. Tampermonkey和其他引擎,以稍微不同的方式实现更新和这些指令。这意味着在Greasemonkey上运行Tampermonkey的代码可能会失败。
  5. 请注意,该wiki条目为made by Greasemonkey's lead developer (Arantius) himself;所以它不仅仅是维基的噪音。

    更新的工作原理:

    脚本更新分四个阶段进行:

    1. 启用阶段和/或"强制"更新。
    2. 检查阶段。
    3. 下载阶段。
    4. 解析并安装阶段。
    5. 对于这个问题,我们只关注检查下载阶段。我们规定启用更新,并且更新的脚本有效且安装正确。

      更新脚本时,Greasemonkey(和Tampermonkey)下载文件两次

      1. 第一次下载由脚本updateURL值控制,只是检查文件@version(如果有)和日期 - 以查看是否有更新可以。
      2. 由脚本downloadURL值控制的第二次下载是要安装的新脚本的实际下载。 仅当服务器文件的编号比本地文件高{/ 1}时和/或服务器文件的日期晚于本地文件时,才会进行此下载。 (请注意脚本引擎之间存在严重差异。)

        请参阅"为什么您可以使用@downloadURL和@ updateURL",以下为使用2个文件下载的原因。


      3. @version@downloadURL如何运作:

        @updateURL仅覆盖默认的内部"下载网址"位置。
        @downloadURL仅覆盖默认的内部"更新网址" (或检查)位置。
        在大多数情况下,没有必要这样做。见下文。

        1. 安装用户脚本时, Greasemonkey会自动记录安装位置。不需要meta指令。 默认情况下,这是Greasemonkey将检查以获取更新并下载任何更新的地方。
        2. 但是,如果指定了@updateURL,那么Greasemonkey将 两者 从指定位置检查并下载,而不是存储位置。
        3. 但是,如果指定了@downloadURL,那么Greasemonkey将检查(不下载)"更新"给定的位置。
        4. 因此:@updateURL会覆盖@updateURL仅检查操作的默认位置。
          同时:@downloadURL会覆盖检查下载的默认位置(除非@downloadURL存在)。


          为什么您可以使用@updateURL@downloadURL

          首先,有2次下载,可能有两个不同的位置,主要是,因速度和带宽原因。 考虑一个非常大的用户脚本有数千个用户的场景:

          • 那些用户'浏览器会经常敲击主机服务器检查是否有可用的更新。大多数情况下,一个人不会,并且不必要地一次又一次地下载大文件。 对于像现在已经不存在的@updateURL
          • 这样的网站来说,这会成为一个问题
          • 因此开发了一个系统,通过该系统创建一个单独的文件来保存版本(和日期)信息。因此,服务器现在具有userscripts.orgveryLarge.user.js
          • veryLarge.meta.js会在每次使用用户脚本时由开发人员更新,并且只会包含来自veryLarge.meta.js的{​​{3}}。
          • 因此,成千上万的浏览器会反复下载更小的veryLarge.user.js - 节省每个人的时间并节省服务器带宽。

          如今,Greasemonkey和Tampermonkey都会自动查找veryLarge.meta.js文件,因此通常无需单独指定。

          那么,为什么要明确指定*.meta.js和/或@downloadURL一些可能的原因:

          1. 您的脚本可以通过多种方式安装,也可以从多个来源安装(剪切和粘贴,本地复制的文件,辅助服务器等),您只需要维护一个" master"版本
          2. 您想要the Metadata Block
          3. @updateURL也是一个方便的自我记录"记录/传达用户从中获取脚本的方式。
          4. 由于某种原因,您希望将@downloadURL文件放在与用户脚本不同的服务器上。
          5. 可能是http与https问题(需要深入了解这一天)。
          6. 你是一个坏人,你希望脚本在将来某个日期从你控制的服务器更新恶意版本 - 这不是安装脚本的地方。

          7. Greasemonkey和Tampermonkey之间的一些区别:

            (警告:我暂时没有对这一切进行过验证。无论如何,Tampermonkey会不断改进(Greasemonkey也会发生很大变化)。)

            1. Tampermonkey在当前文件和新文件上都需要*.meta.js指令。这就是Tampermonkey如何确定更新是否可用。

              Greasemonkey也会使用此方法,因此始终在您可能要自动更新的脚本中包含@version

              但是,Greasemonkey还要求更新文件更新。如果没有版本,Greasemonkey只会比较日期。请注意,这在过去的Greasemonkey中引起了问题,并且愚蠢地假设许多不同的机器准确地与正确的日期和时间同步。

            2. Greasemonkey默认只会从@version方案更新,但可以选择设置为允许https://http://方案。

            3. 两个引擎都不允许ftp://方案的更新。