问题标签 [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 投票
0 回答
637 浏览

google-chrome-extension - Manifest v3 后台服务工作者似乎过时了。如何验证是这种情况

我的目标是确保我有一个稳定的过程来处理扩展更新。我即将发布一个新的扩展,并注意到后台服务人员已经过时了。以下是详细信息:

我测试这个生命周期的方法是生成一个新的构建工件并将其拖放到页面chrome://extensions中。我希望这是测试这个生命周期的方法。但如果不是,我很乐意听到替代方案。

拖放后,我打开后台控制台以检查正确的版本,但似乎落后了。解决此问题的唯一方法是完全删除扩展程序并将其重新加载,这给我的印象是普通用户会遇到同样的问题。

下面的屏幕截图描述了这种情况:

  1. 0.3.33当前安装的版本
  2. 拖放新的构建版本0.3.34
  3. 拖放成功后,通知版本与版本滞后0.3.31
  4. 但是chrome.runtime.onInstall发布准确输出了之前的版本

旧版截图

此外,我查看了解压后的扩展目录,编译后的代码与预期版本一致

验证卸载的源目录

到目前为止,我所做的故障排除工作是完全删除扩展。它确实在一系列更新后成功更新manifest.version,但随后变得陈旧。需要明确的是,我所做的只是更新文件的version属性,manifest.json这似乎导致了这个问题

任何帮助将不胜感激。同时,我将重温服务工作者的架构,因为它与 chrome manifest v3 相关。谢谢!


编辑 - 2021 年 8 月 22 日,星期日:

最新动态:首先感谢woxxom 提供更多细节来调试。

我创建了一个示例项目来演示可重现步骤的问题。希望这有助于确定问题,但它似乎确实指向 Chrome 错误,所以我也会在 crbug.com 上报告它

Github 项目:https ://github.com/miguelespinoza/-v3-service-worker-update

最终,我发现加载 iframe 会导致 service worker 生命周期变得“陈旧”。

看着chrome://serviceworker-internals/?devtools,我注意到扩展程序包括两个工作人员,这看起来很奇怪,因为我想应该只存在一个,一个在后台。这可能没有任何意义,但也想分享。一名“活跃工人”和一名“等待工人”

在此处输入图像描述

重要提示:Service Worker 后台事件停止工作。就我而言,chrome.commands.onCommandchrome.action.onClicked

0 投票
1 回答
120 浏览

javascript - 如何防止 iframe 的 MutationObserver 的隐藏和显示闪烁

我正在开发隐藏文章的 chrome 扩展 MV3。

MutationObserver 隐藏文章而不在主框架闪烁。

例如,当有新文章时,下面的代码通过向下滚动隐藏了奇数在Reddit上的文章。

但是如果MutationObserver(在主框架中)观察文章(在iframe中),就会出现闪烁(先显示文章,然后隐藏文章)

下面的代码在韩国社区网站上工作,代码的作用与上面的代码相似。

看看它在织机上是如何工作的

为什么我不在 iframe 中而是在主框架中插入 mutationObserver 是当 iframe url 更改时,mutationObserver 被删除

请参阅我之前关注的问题

是否有任何 MutationObserver 属性需要停止与 iframe 相关的闪烁?

我用 stackoverflow 和 chrome 文档搜索了很多,但我找不到解决方案

0 投票
0 回答
248 浏览

google-chrome - 清单 v3 代理身份验证

随着新 manifest v3 的到来,and 的厄运来临了webRequestwebRequestBlocking我们应该如何验证代理请求?

老办法:

因此,除了上述问题之外,我的问题是这样做的新方法是什么?文档说它webRequest被替换为declarativeNetRequest,但他们没有提供一个如何做到这一点的例子。Manifest v3 看起来像坏了,谷歌开发者不再关心:

https://bugs.chromium.org/p/chromium/issues/detail?id=1135492

0 投票
0 回答
512 浏览

google-chrome-extension - Chrome 扩展:DOMParser 未使用 Manifest v3 定义

我开发了一个扩展程序来从网页中抓取一些内容,到目前为止它工作正常,但是自从我切换到 manifest v3 后,解析不再起作用。

我使用以下脚本来阅读源代码:

... ETC ... 此代码以前可以正常工作,但现在我在控制台中收到以下消息:

Uncaught (in promise) ReferenceError: DOMParser is not defined

代码是承诺的一部分,但我不认为承诺是这里的问题。我基本上需要将源代码加载到一个变量中,以便以后可以解析它。

我检查了文档,但没有发现 DOMParser 不能与 v3 一起使用。

任何想法?

谢谢

0 投票
0 回答
408 浏览

google-chrome-extension - 在 MV3 Chrome 扩展程序中维护持久连接

我正在尝试构建一个 chrome 扩展程序,每次在我的服务器上发生某些事件时更新其徽章 - 在这种情况下,我的服务器正在接收来自 Zoom 的 webhook,然后通知我的 chrome 扩展程序该事件发生了。从那里我的 chrome 扩展程序将更新其徽章上的计数器,以显示事件已发生。我正在尝试根据 chrome 扩展 Manifest V3 构建它,但我找不到有关如何正确执行此操作的任何信息。

据我了解,在 Manifest V3 中,所有客户端脚本都必须在 service worker 中运行。该服务工作者启动,运行一些代码,然后再次关闭。我打算在我的后台脚本中打开一个 websocket,这在 manifest v2 下会很好,但我认为你不能再这样做了。

我的问题是:如何保持连接以在我的 chrome 扩展程序中接收数据?当我在这种情况下说数据时,我真的只是指一个事件,通知我的 chrome 扩展程序更新其徽章上的计数器。

除了在后台保持 websocket 打开之外,还有其他路由吗?我已经查看了诸如 Google Cloud Messaging 之类的东西,但我认为这并不是我想要使用它的目的。

0 投票
0 回答
39 浏览

google-chrome-extension - Chrome 扩展:html 解析创建对象而不是源代码(清单 v3)

我正在尝试将现有的 chrome 扩展迁移到 manifest v3 扩展中,但我不断遇到问题。我已经设法解决了其中的大部分问题,但我现在有另一个案例,我不知道发生了什么。

扩展的目标是读取页面的源代码并解析 HTML。

“结果”的内容是预期的源代码,在那个阶段一切正常。当我显示“内容”的内容时,我得到了这个:

如您所见,我得到的是一个对象而不是代码。我在 v2 中使用相同的代码并且它可以工作。

代码在 popup.js 中而不是在 background.js 中执行

任何想法?

谢谢

0 投票
0 回答
72 浏览

google-chrome-extension - Chrome 扩展(从后台到其他 js 的消息):无法建立连接。接收端不存在

由于 background.js 是一个服务工作者,我不能使用 DOM 函数或本地存储。我试图通过使用消息在 background.js 之外执行 JS 来解决问题,但是通过简单的消息传递,我收到错误消息:无法建立连接。接收端不存在。

在 background.js 我有:

在 popup.js 我有:

我想要达到的目标:

  1. 每天更新一次翻译、错误消息等。在这种情况下,我在 background.js 中创建了一个警报,它下载包含元数据的 JSON,但我需要将其存储在本地,但这不适用于 background.js
  2. 创建一个选项卡,下载源代码并解析它。我可以在 manifest v2 中的 background.js 中执行此操作,但我不得不将这些函数移至 popup.js,但这很烦人,因为 popup.js 很容易被中断。

我如何使用 background.js 在后台创建重复任务并将一些内容发送到其他脚本以弥补 background.js 不能做的事情?我猜 popup.js 并不总是处于活动状态或总是在听,这可能就是我收到此错误消息的原因。

我想用这个:

但我需要一个我的用例没有的目标。

谢谢

0 投票
1 回答
137 浏览

javascript - 当我尝试将(解压缩的)扩展加载到 Edge 时,为什么它说 web_accessible_resources[0] 无效?

我正在为 Microsoft Edge 构建浏览器扩展,我需要在其中将脚本注入某些页面。每当我尝试加载解压后的扩展时,Edge 都会报告“<strong>Error Invalid value for 'web_accessible_resources[0]'”。但是,我查看了文档和一些示例,看来我有一个有效的配置。以下是重现错误的最小工作示例:


清单.json

脚本.js

<空>


我使用的是 Microsoft Edge 版本 86.0.622.69(官方版本)(64 位)。为什么我会收到此错误?我能做些什么来解决这个问题?我能够成功使用 Manifest v2,但我想使用 Manifest v3。

0 投票
0 回答
204 浏览

javascript - chrome.debugger.sendCommand 不适用于扩展,但适用于控制台

我正在从 chrome 扩展程序测试 Chrome DevTools 协议,但我在Emulation.setFocusEmulationEnabled工作时遇到了麻烦。这是我的测试扩展:

清单.json

背景.js

为了测试它,我加载了解压后的扩展,扩展打开了一个新选项卡,我按 F12 打开 devtools 并输入document.hasFocus(),结果是false. 然后我打开Settings > More Tools > Extensions并检查服务人员视图。我在那里运行:

将 XX 替换为 console.logs 中显示的选项卡 ID,然后我返回选项卡控制台,现在document.hasFocus()返回true.

为什么当我从控制台运行它而不是从扩展程序运行它时它工作?我尝试添加一个 setTimeout() 以确保完成创建选项卡,但得到了相同的结果。

0 投票
0 回答
13 浏览

javascript - 谷歌浏览器应用程序链接到另一个网站?清单 V3

我不断收到错误,不确定我做错了什么。如果有人可以帮助我解决它,我将不胜感激。这是使用清单 V3。这是我的背景.js:

它在下面的代码中不断中断:

});