【问题标题】:Userscripts vs. Chrome Extension [closed]用户脚本与 Chrome 扩展程序 [关闭]
【发布时间】:2012-11-09 08:57:59
【问题描述】:

我正在开发一个扩展,它将读取 HTML 元素的值,然后对外部网站进行 API 调用,获取结果并将它们显示在新创建的 HTML 元素中。

用原生 chrome 扩展与用户脚本编写它的优缺点是什么?

【问题讨论】:

  • 使用用户脚本,除非您需要: 操作浏览器控件;处理文件;在选项卡或窗口之间进行复杂的交互,或跨会话和域跟踪复杂的数据/状态。到目前为止,您所描述的内容可以很容易地由用户脚本处理。

标签: google-chrome-extension userscripts tampermonkey


【解决方案1】:

原生 Chrome 扩展程序和用户脚本之间存在一些差异。

请参阅this wiki section,了解 Greasemonkey 脚本和 Chrome 用户脚本之间的差异列表。

如果您想利用跨浏览器的用户脚本,请尝试使用GM_* 方法或unsafeWindow

从开发人员的角度来看,选择用户脚本或 Chrome 扩展程序没有任何优势,因为任何用户脚本都可以轻松嵌入到 Chrome 扩展程序中。

如果您从部署的角度来看这个主题,那么差异是显着的:

  • 一键安装仅适用于 Chrome 网上应用店。仅限原生扩展。
  • 用户脚本和原生扩展都可以从本地文件浏览器拖到扩展页面来安装扩展。
    (用户脚本被转换为 Chrome 扩展;警告:见下文)
  • 原生用户脚本支持将在 2013 年底停止工作,因为转换后的用户脚本使用清单版本 1,has been deprecated

结论

我建议开发原生扩展。您可以使用以下目录结构从用户脚本轻松创建 Chrome 扩展:

manifest.json
whatever.user.js

最小清单.json:

{
     "name": "name of extension",
     "version": "1",
     "manifest_version": 2,
     "content_scripts": [{
         "js": ["whatever.user.js"],
         "matches": ["http://example.com/*"]
      }]
}

另见

【讨论】:

  • Manifest 版本 1 已被弃用,但它在哪里说不再支持用户脚本(相对于切换到 manifest 版本 2)?
  • @BrockAdams 当用户脚本转换为 Chrome 扩展程序时,它使用的是清单版本 1。因此,在 Chromium 开发人员决定使用清单 v2 之前,用户脚本将在下一个结束时无法工作年。
  • 开发人员为什么不直接更改代码以使用版本 2 进行转换?更重要的是,谷歌是否表示将不再支持用户脚本,因为我(到目前为止)找不到他们这样做。?
  • @BrockAdams 我没有阅读任何官方资料,但是自从引入 manifest v2 以来已经过去了 个月;他们有足够的时间来更新现有代码。在他们这样做之前,关于本机用户脚本支持的声明是正确的(用户脚本仍然使用清单 v1 的事实支持)。
  • 好的,很高兴知道这不是官方的。尽管用户脚本很受欢迎,但我看不到 Google 如此轻易地放弃对它们的支持。当然,他们可以说,“接受它并安装 Tampermonkey。”
【解决方案2】:

编写(和共享!)用户脚本的案例:只要您只使用普通的浏览器 DOM API,任何人都可以轻松获取并运行您的脚本(通常只需安装它而无需编辑)另一个支持用户脚本的浏览器。

当您使用 Google Chrome 时,针对它们的情况是,从 Chrome 21 开始,安装它们变得非常混乱:您需要右键单击安装链接,将其保存到磁盘,打开扩展页面,然后将保存的脚本在那里(是的),或者从 Chrome Web Store 安装 TamperMonkey(它是免费的,并且对 Chrome 所做的基本上与 Greasemonkey 对 Firefox 所做的一样:为用户脚本安装和维护提供了一个可忍受的用户界面)。

虽然您只需要做您列出的事情,但您可能不需要比用户脚本本机提供的更多特权 API 访问:尝试在另一个开发工具控制台中执行您将为脚本编写的 XMLHttpRequest 代码网站,您会看到它是否足以满足您的需求。如今,许多 Web API 都支持 CORS,这可能使您的用例无需求助于专有的浏览器原生扩展 API。

【讨论】:

    【解决方案3】:

    直接与 Chrome 一起安装的用户脚本(即 Greasemonkey 脚本)最终会自动转换为带有内容脚本的扩展程序,因此它们本质上是相同的。 用户脚本编写起来又快又容易,一个好的用户脚本可以在其他浏览器中得到支持。但是,Chrome 中的用户脚本存在一些限制。它们不能直接从网页读取或写入变量(仅共享标准 DOM)。他们不能制作跨域 XHR。 相反,扩展功能更强大但更难开发。

    您似乎必须编写一个 Chrome 扩展程序,因为您需要“对外部网站进行 API 调用”。

    【讨论】:

    • 不,Chrome 用户脚本可以执行“跨域 XHR”,并且可以使用注入的代码轻松读取或写入变量。他们还可以对外部网站进行 API 调用。
    猜你喜欢
    • 1970-01-01
    • 2012-07-07
    • 1970-01-01
    • 2022-06-15
    • 2013-10-18
    • 1970-01-01
    • 2014-09-17
    • 1970-01-01
    • 2011-03-28
    相关资源
    最近更新 更多