问题标签 [chrome-extension-manifest-v3]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
9366 浏览

google-chrome - chrome 扩展 mv3 - 模块化服务工作者 js 文件

我正在尝试将我的 chrome 扩展从清单版本 2 迁移到 3。现在后台脚本已被清单 v3 中的服务人员替换,我不能再使用 html 文件并js在脚本标签中引用文件。

有什么方法可以将我的单个脚本文件导入service_worker.js文件中?

我在互联网上搜索了几乎所有内容,但找不到任何解决方案。甚至这里的官方文档注册后台脚本也没有太大帮助。任何帮助,将不胜感激。

0 投票
1 回答
4101 浏览

javascript - executeScript 未定义或不是 ManifestV3 扩展中的函数

为什么 Chrome 的这个功能不起作用?我正在尝试这个例子: https ://developer.chrome.com/docs/extensions/mv3/content_scripts/#programmatic 。

我正在为 chrome 开发一个扩展,并从popup.js向 service worker background.js发送一条消息,并在executeScript.

popup.js

清单.json

背景.js

0 投票
1 回答
375 浏览

google-chrome-extension - 无法使用 Manifest V3 将消息响应发送回 Chrome 扩展程序中的内容脚本

我成功地从服务工作者后台脚本向社交 OAuth 提供者启动了webauthflow(根据清单 v3 要求,后台脚本现在是成熟的服务工作者)

但是,在应该是最简单的情况下,我无法将消息发送回我的内容脚本。

这是我的服务人员(background.js

这是我的内容脚本...(popupsignin.js

0 投票
0 回答
118 浏览

json - 迁移到清单 v3 时,Chrome 扩展程序显示错误

我指定了 a host_permissions,当我从清单 v2 迁移到清单 v3 时它显示错误。

警告我得到

我在清单中指定的东西是

谁能解释这个问题的解决方法是什么?虽然它没有造成任何问题,但我想解决这个问题。谢谢。

0 投票
1 回答
227 浏览

google-chrome-extension - 具有大量持久 RAM 使用的 Chrome 扩展 MV3,这可能吗?

我正在开发一个 Chrome 扩展程序,该扩展程序旨在检查用户导航到的任何网页的内容,然后提醒用户该内容的某些“功能”。(也许最容易想到的是在网页的文本数据中搜索大量字符串,尽管这是一个相当大的简化。)按照设计,有一个非常大的集合(数千万)扩展程序检测到并因此可以做出反应的功能。每个这样的特性都可以表示为一个 JS 数字(8 个字节),因此数据总量可能在 100 MB 左右,甚至更多。

该数据可以存储在 IndexedDB 中,但是为了能够快速分析页面数据(由内容脚本发送),后台页面脚本(MV2 中)或服务工作者(MV3 中)确实需要具有这些功能(其中被检查)存储在 RAM 中,以便能够从网页中快速检查小得多但仍然大量的特征,以查看其中是否存在于其自己的数据集中。

这个设置实际上在我创建的原型清单版本 2 (MV2) 扩展中运行良好。后台脚本将首先从 IndexedDB 中获取数据并将其放入 RAM 中的结构中。这在我的笔记本电脑上需要一些时间(几秒钟,我没有精确的数字),但只需要在浏览器启动时完成一次。之后,后台脚本能够快速响应来自内容脚本的请求以检查网页内容。

现在,试图过渡到 manifest 版本 3 (MV3),问题是服务工作者不是持久的,甚至不是特别长寿。因此,每次重新启动时,直接翻译都会让服务工作者从 IndexedDB 到 RAM 进行昂贵且缓慢的加载。这显然不是一个有效的设置。

那么显而易见的问题是:有什么方法可以避免 Chrome 停止服务工作者(从而让扩展服务工作者持续很长时间)?如果没有,是否有某种方式可以让 RAM 中的数据保留下来,并且服务人员在启动时获取对它的访问权限?(我远不是 Chrome 扩展和服务工作者方面的专家,所以如果我的问题很幼稚,我深表歉意。)我阅读了一些讨论,这些讨论似乎表明上述任何一种方式目前都不可能,但如果是这样,它基本上会让整个概念在 MV3 下是非首发。有什么解决方法吗?(如果是,这些变通办法在 Chrome 网上应用店审核过程中是否可接受?)

我将非常感谢任何指示!

0 投票
1 回答
6188 浏览

javascript - Chrome 扩展清单 v3 内容安全政策

我正在尝试在页面中加载(注入)javascript 代码。javascript 文件是扩展的本地文件。文件路径是“js/somefile.js”。

我的网络可访问资源是:

我得到的错误是:

0 投票
1 回答
1171 浏览

google-chrome-extension - chrome 扩展清单 v3,访问窗口变量

如何通过 Manifest v3 访问页面的窗口变量。

在 V2 中,我可以让内容脚本通过将 javascript 注入主页面来访问页面的窗口变量。但是,javascript 代码的 appendChild() 不适用于 V3。

我尝试使用 scripting.executeScript 但这仍然无法访问 window 变量(DOM 是可访问的)。

例如,下面的代码应该在 frameid 0 上注入,但顶部 javascript 上下文的窗口仍然不可读:

0 投票
1 回答
197 浏览

google-chrome - 将 .html 文件从打包的 chrome 扩展目录注入新窗口选项卡

我正在构建一个 Chrome 扩展程序(v3),我试图index.html从扩展程序的目录中加载一个,并在新创建的窗口中用我的 html 替换旧的 html。但它不是 html,而是呈现为文本。这是我到目前为止得到的:

我将 html 文件存储在我的background.js中:

在我的popup.js中,我首先创建了一个新窗口。然后我尝试注入一个内容脚本,用我的index.html文件覆盖当前的 html,如下所示:

setBackground()函数删除现有的 html 并替换它,但保留tab[0].url活动页面中的 url 以将其嵌入为 iframe

如何用自己的 html 替换新窗口而不是渲染文本?

0 投票
0 回答
505 浏览

google-chrome-extension - 如何避免 MV3 Chrome 扩展中同时出现多个服务人员?

我正在将 Chrome 扩展程序从清单版本 2 (MV2) 转换为清单版本 3 (MV3)。在 MV2 版本中,后台页面脚本在扩展中起到了突出的作用:在启动时,后台脚本从 IndexedDB 读取大量数据到 RAM,然后(在运行期间)处理来自注入页面的内容脚本的查询用户访问。要迁移到 MV3,现在需要将 MV2 后台脚本提供的功能转换为由 MV3 服务工作者执行。

因为从 IndexedDB 读取数据到 RAM 很慢(相对而言),所以根据内容脚本的查询动态执行此操作是不可行的;相反,它必须由服务工作者仅执行一次,然后保留数据,以便为来自内容脚本的传入请求提供服务。因此,服务工作者应该是持久的(并且不会被浏览器终止);为此,至少存在一种解决方案:https ://stackoverflow.com/a/66618269/4432991

但是,在某些情况下(我无法准确指出在什么情况下),当内容脚本向 service worker 发送消息时,Chrome 会启动 service worker 的第二个副本,即使第一个副本仍在活着,并且两个服务人员共存了一段时间。有什么方法可以避免这种情况,并确保如果服务工作者仍然活着(在内存中),没有活动(通过内容脚本)将导致创建服务工作者的第二个副本,而不是内容的所有请求因此脚本将由先前存在的服务人员处理?

谢谢你的帮助!

0 投票
0 回答
1202 浏览

javascript - Chrome 扩展清单 V3 如何读取我的用户正在查看的网页的 HTML 和文本内容

我正在尝试学习如何制作 chrome 扩展,并一直在尝试使用新的 manifest v3 进行学习,因为我的理解是这将成为未来的常态。但是,许多文档都非常残酷,而且似乎落后了。

我正在寻找一个简单的扩展,可以在网站上找到特定的关键字。我想在用户访问网站时找到与特定 html id 匹配的文本。

目前,我的后台脚本调用一个单独的内容脚本来发现用户导航到的网站何时与我想要搜索的网站匹配。如果我到达适当的网站,则会调用另一个内容脚本来搜索该网站。

这是我的后台脚本中的相关代码:

onSite 只有在填充了我要访问的网站的 url 时才真正/活跃。

scrapeSite 的相关代码是

如果我删除了 catch(err),那么控制台日志会输出以下错误处理响应:ReferenceError: document is not defined at scrapeSite

我真的只是想在这里学习,所以如果你有任何关于更好的文档、推荐的 stackoverflow 问题等的建议,我将不胜感激。另外,如果你一直在学习 manifest v3 并且有关于好的文档/教程的建议,那就太好了。