用户脚本与 Chrome 扩展程序 [关闭]

     2023-05-08     233

关键词:

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

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

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

【问题讨论】:

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

另见

http://developer.chrome.com/extensions/content_scripts.html http://developer.chrome.com/extensions/match_patterns.html

【讨论】:

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 调用。

可以将油脂猴类型的用户脚本打包为 Chrome 扩展程序吗?

】可以将油脂猴类型的用户脚本打包为Chrome扩展程序吗?【英文标题】:Canagreasemonkey-typeuserscriptbepackagedasaChromeextension?【发布时间】:2012-07-1322:10:31【问题描述】:今天谷歌changedthewayuserscriptsareinstalledinChrome。您再也不能只单击... 查看详情

检查用户是不是安装了 Chrome 扩展程序

】检查用户是不是安装了Chrome扩展程序【英文标题】:CheckwhetheruserhasaChromeextensioninstalled检查用户是否安装了Chrome扩展程序【发布时间】:2011-09-1117:14:08【问题描述】:我正在构建一个Chrome扩展程序,为了让整个事情按我希望的... 查看详情

尝试将数组从内容脚本发送到弹出脚本的 Chrome 扩展程序错误

...布时间】:2016-07-0902:03:31【问题描述】:我正在尝试查找用户当前所在网页上的所有图像,并在用户单击扩展程序时显示它们。我查看了很多帖子,似乎找到了最好的方法:让popup.js脚本在激活content.js脚 查看详情

Chrome 扩展后台脚本如何与网页服务工作者通信?

】Chrome扩展后台脚本如何与网页服务工作者通信?【英文标题】:HowcanChromeextensionbackgroundscriptcommunicatewithwebpageserviceworker?【发布时间】:2016-09-2314:25:54【问题描述】:我们的webapp注册了一个serviceworker。我们还有一个Chrome扩展程... 查看详情

使用 Chrome 35 及更高版本启用非 PlayStore 用户脚本

】使用Chrome35及更高版本启用非PlayStore用户脚本【英文标题】:Enableanon-PlayStoreUserScriptwithChrome35andabove【发布时间】:2014-07-2812:02:18【问题描述】:自GoogleChrome版本35起,在GooglePlayStore之外安装的任何扩展程序的执行都会被阻止,... 查看详情

chrome无法从该网站添加应用,扩展程序和用户脚本

#开始  更新谷歌浏览器之后发现不能通过本地crx文件安装离线插件了网上找到的方法有两种一个就是通过添加浏览器参数解决但是这个方法我尝试之后失败了第二个方法就是用工具安装具体如何太麻烦了就没有用 #解决过... 查看详情

“未经检查的 runtime.lastError:消息端口在收到响应之前关闭。” Chrome 扩展程序

...】:我正在构建一个chrome扩展,并试图在我的背景和内容脚本之 查看详情

从 Chrome 内容脚本扩展访问 iframe

】从Chrome内容脚本扩展访问iframe【英文标题】:AccessingiframesfromaChromecontent-scriptextension【发布时间】:2011-04-2515:21:58【问题描述】:我正在编写一个Chrome扩展程序,它需要在加载时更改流行的网络应用程序。不幸的是,该Web应用... 查看详情

chrome扩展开发中contentscript问题求助

...隐患的api屏蔽掉,然后提供更安全的方式来实现吧。内容脚本不能:调用chrome.*API,除了以下API:extension(getURL、inIncognitoContext、lastError、onRequest、sendRequest)i18nruntime(connect、getManifest、getURL、id、onConnect、onMessage、sendMessage)st... 查看详情

Chrome 扩展程序:如何在 chrome 扩展程序更新后删除孤立的脚本

】Chrome扩展程序:如何在chrome扩展程序更新后删除孤立的脚本【英文标题】:Chromeextension:Howtoremoveorphanedscriptafterchromextensionupdate【发布时间】:2019-12-1910:45:25【问题描述】:我有一个带有弹出页面的chrome扩展,它通过简单的一次... 查看详情

Chrome/Tampermonkey 用户脚本存储在文件系统的啥位置? [关闭]

】Chrome/Tampermonkey用户脚本存储在文件系统的啥位置?[关闭]【英文标题】:WhereareChrome/Tampermonkeyuserscriptsstoredonthefilesystem?[closed]Chrome/Tampermonkey用户脚本存储在文件系统的什么位置?[关闭]【发布时间】:2012-08-0417:35:54【问题描述... 查看详情

如何在 Chrome 扩展程序中以编程方式关闭 gmail 撰写对话框

...。我可以发送电子邮件并获得回复。现在,为了使其更加用户友好,我想在发送电子邮件后关闭撰 查看详情

Chrome 扩展程序 |如何在 CDN 的内容和后台脚本中包含库

】Chrome扩展程序|如何在CDN的内容和后台脚本中包含库【英文标题】:ChromeExtension|Howtoincludelibraryincontentandbackgroundscriptsfromcdn【发布时间】:2016-10-0305:58:21【问题描述】:我的Chrome扩展程序有两个文件:内容和后台脚本。我还需要... 查看详情

在开发 chrome 扩展程序时,如何打开一个空白页来运行脚本?

】在开发chrome扩展程序时,如何打开一个空白页来运行脚本?【英文标题】:WhendevelopingachromeextensionhowcanIopenablankpagetorunascripton?【发布时间】:2013-10-2019:42:02【问题描述】:我正在创建一个chrome扩展,它需要打开一个空白页面,... 查看详情

JavaScript 回调/异步问题? Chrome 扩展程序的后台脚本在完成之前停止功能

】JavaScript回调/异步问题?Chrome扩展程序的后台脚本在完成之前停止功能【英文标题】:JavaScriptcallback/asyncproblem?BackgroundscriptofChromeExtensionstopsfunctionbeforefinishing【发布时间】:2022-01-0612:26:53【问题描述】:我正在尝试创建一个小... 查看详情

了解chrome扩展程序开发--摘抄

...可以在浏览器的工具栏和地址栏中显示图标,它可以更改用户当前浏览的网页中的内容,也可以更改浏览器代理服务器的设置等等。0.认识Chrome扩展程序-最重要的入口ma 查看详情

googlechrome扩展程序与安全网站交互

...,这个Chrome扩展程序是否有办法从其他页面中提取只有在用户登录我的网站时才能看到的信息?答案是的,Chrome扩展程序可以在启用扩展程序时完全访问您在浏览器中执行的所有操作。 查看详情

Chrome 扩展程序可在不同的浏览器中打开特定的 URL [关闭]

】Chrome扩展程序可在不同的浏览器中打开特定的URL[关闭]【英文标题】:ChromeextensiontoopenupaspecificURLinadifferentbrowser[closed]【发布时间】:2015-04-2112:23:07【问题描述】:提前感谢您的任何帮助!我想知道是否有一个Chrome扩展程序可... 查看详情