用户脚本与Chrome扩展的区别

23

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

使用原生Chrome扩展和用户脚本编写此扩展的优缺点是什么?


除非您需要操作浏览器控件、操作文件、在选项卡或窗口之间进行复杂的交互,或跨会话和域跟踪复杂的数据/状态,否则请使用用户脚本。到目前为止,您所描述的内容可以轻松地通过用户脚本处理。 - Brock Adams
3个回答

18

本文介绍了原生Chrome扩展和用户脚本之间的几个区别。

请参阅此Wiki部分,了解Greasemonkey脚本和Chrome用户脚本之间的差异列表。

如果您想利用跨浏览器用户脚本,请尽量不要使用GM_*方法或unsafeWindow

从开发者的角度来看,无论是用户脚本还是Chrome扩展都没有优劣之分,因为任何用户脚本都可以轻松地嵌入到Chrome扩展中。

如果您从部署的角度来看待这个话题,那么差异就很明显:

  • 一键安装仅在Chrome Web Store中提供。仅限原生扩展。
  • 用户脚本和原生扩展都可以从本地文件浏览器拖动到扩展页面以安装扩展。
    (用户脚本将被转换为Chrome扩展;警告:请参见下文)
  • 原生用户脚本支持将在2013年底停止工作,因为转换后的用户脚本使用的是已弃用的清单版本1。(请参阅此处)

结论

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

manifest.json
whatever.user.js

最简 manifest.json:

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

参见


@BrockAdams 当用户脚本转换为Chrome扩展时,它使用的是清单版本1。因此,在Chromium开发人员决定使用清单v2之前,用户脚本将在明年底无法正常工作。 - Rob W
@BrockAdams 我没有阅读任何官方来源,但是自从manifest v2被引入以来已经过去了八个月;他们有足够的时间更新现有的代码。在他们这样做之前,关于本地用户脚本支持的声明是正确的(事实证明用户脚本仍然使用manifest v1)。 - Rob W
好的,知道这不是官方支持很好。尽管用户脚本很受欢迎,但我不认为Google会轻易放弃对它们的支持。当然,他们也可以说,“接受现实,安装Tampermonkey吧。” - Brock Adams
@BrockAdams 嗯,与本机扩展相比,在Chrome中安装用户脚本确实很麻烦。除非Chrome使用了“--easy-off-store-extension-install”标志运行,否则用户需要执行太多步骤才能使用用户脚本(右键单击,保存,打开文件浏览器,打开“chrome://extensions/”,将文件拖到其中,接受),而本机扩展在Chrome Web Store中只需点击并接受即可。 - Rob W
@VarunAgw,我不知道你所说的“不”,但如果你已经安装了Tampermonkey,我的评论也适用。单独的内容脚本扩展比Tampermonkey用户脚本的开销要小。Tampermonkey使安装和使用用户脚本更容易,但如果你想最小化资源使用,则最好创建一个扩展并使用内容脚本。 - Rob W
显示剩余6条评论

3
写(并分享!)用户脚本的理由是:只要使用普通的浏览器DOM API,您的脚本就可以轻松地被其他支持用户脚本的浏览器中的任何人使用(通常只需安装而无需编辑)。
当您使用Google Chrome时,反对使用它们的理由是,在Chrome 21中,安装它们变得非常混乱:您需要右键单击安装链接,将其保存到磁盘上,打开扩展页面,并将已保存的脚本拖入其中(是的),或从Chrome网络应用商店安装TamperMonkey(它是免费的,并且与Greasemonkey为Firefox做的事情基本相同:提供用户脚本安装和维护的可接受用户界面)。
虽然您只需要执行列出的操作,但您可能不需要比用户脚本本地提供的更高特权API访问权限:尝试在另一个站点上执行您将为脚本编写的XMLHttpRequest代码,您会看到它是否足够满足您的需求。许多Web API这些天都允许CORS支持,这可能会使您的用例避免使用专有的浏览器本机扩展API。

-3

直接在Chrome中安装的用户脚本(例如Greasemonkey脚本)最终会自动转换为带有内容脚本的扩展程序,因此它们本质上是相同的。 用户脚本编写起来快速简单,并且可以在其他浏览器中支持。然而,在Chrome中,用户脚本存在一些限制。它们不能直接从网页读取或写入变量(只能共享标准DOM)。它们也不能进行跨源XHRs。 相反,扩展程序更加强大但开发难度更大。

看起来您需要编写一个Chrome扩展程序,因为您需要“向外部网站进行API调用”。


3
不,Chrome 的用户脚本可以进行“跨源 XHRs”,并且它们可以很容易地使用注入的代码读取或写入变量。而且它们也可以向外部网站发出 API 调用。 - Brock Adams

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接