问题标签 [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 回答
281 浏览

google-chrome-extension - 将 Manifest V2 升级到 V3,将在 Web 可访问资源中触发升级时禁用和警告?

我们的 Chrome 扩展程序拥有相当数量的用户。每当权限更改并且扩展程序被禁用直到用户批准权限时,都会丢失一些用户,因此我们仅将其作为最后的手段。

升级到清单 V3 有一些我担心的关于禁用和升级警告的变化。

  1. host_permissions-- 如果我们不更改主机权限,只是升级清单以符合 V3 标准,这会禁用并警告用户升级吗?
  2. web_accessible_resources-- 该扩展在太多网站上工作,无法维护匹配列表,所以我选择了<all_urls>,如下所示,它会触发禁用和警告吗?
  1. 文档说内容脚本的匹配被视为网络商店审查的权限——这是否意味着这可能会触发升级到 V3 的禁用,即使它们没有更改?
0 投票
0 回答
42 浏览

google-chrome-extension - Manifest.json 阻止 Chrome 扩展中的脚本标签

当我尝试<script src="https://savehut.xyz/files/file.js"></script>使用 chrome 扩展时出现此错误:

我的 manifest.json 文件中有这个:(它是 manifest v3 btw)

jsdelivr 有效,但 savehut.xyz 无效。

顺便说一句,文件位置不是/files/file.js,这只是一个示例

0 投票
0 回答
69 浏览

javascript - chrome.identity.getAuthToken 在谷歌账户页面撤销令牌后不调用回调

我正在开发一个 Chrome Extension usng manifest V3,并使用类似于以下的行来获取用于访问某些 Google API 的 AuthToken。

该代码工作正常,并显示一个对话框,使我能够登录(或者如果有一个缓存,则只返回令牌)。然后我可以使用令牌成功调用 API。但是,如果我随后转到授权用户的 Google 帐户页面,并从那里撤消令牌,则下一次(以及随后的每次)调用不会产生错误(runtime.lastError 未定义)但回调不会不叫chrome.identity.removeCachedAuthToken({ token: accessToken});我在发生 API 错误时删除了令牌,但这无济于事(即使令牌在 chrome: //identity-internals.xml 中显示为已删除)

重新启动 Chrome 也不起作用。我可以让代码再次工作的唯一方法是删除并重新创建安装了扩展的 chrome 配置文件,这显然不是扩展用户的有效解决方案。

任何帮助,将不胜感激!

0 投票
0 回答
30 浏览

ajax - 我怎么解决这个问题?: 谷歌浏览器扩展 ajax

我现在正在开发一个 chrome 扩展。但是,在开发过程中存在一个问题。

任何意见,将不胜感激。

首先,我想将 mysql(database) 与我的 chrome 扩展程序连接起来。这是因为我想实现一个函数,它获取 chrome 执行脚本页面的文本并将其与 mysql(数据库)数据进行比较。

其次,在搜索上述内容时,我发现mysql和chrome扩展之间的直接连接是不可能的,并且我必须在中间使用Web应用程序api(例如ajax或xmlhttprequest)。

第三,我决定使用ajax,下面的代码就是我写的。但是某处存在一些问题/错误,chrome 扩展程序无法正常工作。

我很好奇三件事:

  1. 如何更正下面编写的代码?
  2. 我现在用file.php,但是连接mysql的时候不能用php以外的js吗?我的意思是,在脚本 js 中,我可以在 ajax url 中使用 file.js 而不是 file.php 吗?
  3. 也许有一种有效的方法可以在不使用 ajax 的情况下与 mysql 连接?谢谢你。
  • 所有文件都在 chrome 扩展文件夹(同一文件夹)内。

<manifest.json>

<popup.html>

  • body标签有我之前写的代码,但是我删除它并上传它,因为这个问题不需要它。

<script.js>

<文件.php>

0 投票
1 回答
102 浏览

google-chrome-extension - 如果清单 v3 中不允许当前选项卡 url,则防止弹出

我正在编写一个 chrome 扩展,我想完全禁用弹出窗口,或者如果当前选项卡的 url 不允许通过 v3 清单的host_permissions属性显示,则显示一条消息。

这是一个开发支持工具,我们不希望它为生产 URL 启用。所以如果我设置:

...然后,如果用户在www.some-site.com(或其他任何地方)上,我希望禁用弹出窗口。

我可以很容易地获得相关的网址:

...我可以通过以下方式获得允许的文件模式数组

但是我怎样才能使用这个或其他任何东西来防止弹出?此外,将该通配符转换为真正的正则表达式会有点痛苦。难道没有一些开箱即用的方法来做这一切吗?

0 投票
0 回答
15 浏览

google-chrome-extension - 是什么触发扩展程序说“通过单击此图标来使用此扩展程序”

完成安装后,一些 Chrome 扩展程序会显示“通过单击此图标使用此扩展程序”:

uBlock 起源

其他人不:

博克塞尔反弹

我的分机没有这条线,但我希望它有。这是什么触发的?

非常感谢任何提示!

0 投票
1 回答
64 浏览

google-chrome - Chrome 扩展程序不同步

我写了一个 google chrome 扩展程序,它应该将数据同步到我的 chrome 配置文件到我的所有计算机。因此我使用 chrome storage api:Google Chrome Storage

我能够在我的主 PC 上存储和读取数据。但是在我的另一台计算机上,无法访问数据。

我在两台计算机上使用相同的配置文件。我正在使用这些chrome.storeage.sync方法。因为我现在不想发布扩展程序,所以我在激活开发人员模式的情况下安装了扩展程序,而不是通过 chrome 商店。这是数据不同步的原因吗?

0 投票
0 回答
597 浏览

browser-extension - Chrome 扩展 MV3 服务工作者持久数据

我正在将 v2 Chrome 扩展迁移到 Manifest V3 格式。寻找输入什么是使用 chrome 存储维护持久数据的最佳方式。在 v2 版本中,逻辑是后台脚本保存所需的持久数据(例如选项卡、文档等),这些数据会在多个事件上更新,现在同样需要迁移到 V3,以便数据在 GoogleChrome 实例的生命周期内保持不变. 当服务工作者即将变为非活动状态时是否会触发一个事件,以便可以将数据存储到 chrome 存储中。(没有这个,存储数据的逻辑将在脚本中的多个位置,不确定这是方法)。

0 投票
0 回答
19 浏览

google-chrome-extension - 在 Manifest V3 chrome 扩展背景页面上运行 Socket

我正在创建一个 chrome 扩展程序,需要您的帮助。由于我决定使用最新的清单版本(3),但是我仅限于background scripts现在只是一个service worker.

我的应用程序正在使用 socket.io(推送通知)和后台脚本(现在是服务人员)似乎不允许它(importing socket.io)给出错误Uncaught ReferenceError: document is not defined

除了降级到清单 v2 之外,还有其他解决方法吗?

现在,我正在使用套接字连接content script,但我对此并不满意。

0 投票
0 回答
30 浏览

javascript - 在内容页面上执行脚本

我正在为一个网站制作扩展程序,在特定页面上,有一个按钮可以执行我需要从扩展程序触发的逻辑。可以说页面有按钮<button onclick="page_action('1')">Click me</button>page_action函数位于托管在 CDN 中的单独文件中,例如https://website.cdn.com/my_script.js,这my_script.js是在网站页面 ( head tag) 上定义的。

所以我的问题是如何以及是否可以page_action从 chrome 扩展中手动执行?

查找和单击按钮元素不是一个选项,因为在某些情况下此按钮是隐藏的。

尝试了不同的变体,我偶然发现的一个错误与 CSP 有关。此代码甚至抛出错误: