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

google-chrome-extension - 如何从 React 应用程序向我的 chrome 扩展程序发送消息?

我正在尝试以消息的形式将会话数据从我的 React 应用程序发送到 chrome 扩展程序(MV3)。根据文档,我应该使用

但是,这样做会给我以下错误:TypeError: Cannot read property 'sendMessage' of undefined

有没有办法解决这个问题?我/*global chrome*/在文件顶部添加了消除chrome undefined错误的内容,但现在它是未定义的运行时。

清单.json:

App.js(反应应用程序):

Background.js 中的监听器:

0 投票
1 回答
131 浏览

javascript - 是否有必要在后台服务人员中删除监听器以在暂停时进行 chrome 扩展?

我正在添加侦听器,例如chrome.tabs.onRemoved.addListener,在我的 chrome 扩展后台服务人员中。我在这里阅读:https : //developer.chrome.com/docs/extensions/mv3/service_workers/#unloading

服务人员在几秒钟不活动后自行卸载

这是否意味着当工作人员暂停时我不必调用removeListener逻辑来删除我的听众?即chrome.tabs.onRemoved.removeListenerbrowser.runtime.onSuspend

0 投票
1 回答
647 浏览

javascript - 如何处理基于 iframe 的 chrome 扩展中的权限?

我正在制作一个 chrome 扩展,其中包含一个 iframe。当扩展程序向服务器请求以获取页面时,它会返回一个错误Refused to display 'https://subdomain.example.com/' in a frame because it set 'X-Frame-Options' to 'deny'。虽然我已经在我的文件中设置了x-frame-optionsto并在我的后端项目的特定方法中添加了一个,但它返回了另一个错误。我在我的文件中添加了和。没有运气,它返回了,所以我从权限中删除并添加了 v3。没有结果!!然后我加了deny.htaccessheader('x-frame-options: GOFORIT')Refused to display 'https://subdomain.example.com/' in a frame because it set multiple 'X-Frame-Options' headers with conflicting values ('GOFORIT, DENY'). Falling back to 'deny'webRequestwebRequestBlockingpermissionsmanifest.json'webRequestBlocking' requires manifest version of 2 or lowerUnchecked runtime.lastError: You do not have permission to use blocking webRequest listeners. Be sure to declare the webRequestBlocking permission in your manifest.webRequestBlockingdeclarativeNetRequest

对我script.js来说,它回来了Uncaught TypeError: Cannot read properties of undefined (reading 'onHeadersReceived')

我应该怎么做才能只允许扩展向服务器请求?

0 投票
1 回答
2894 浏览

google-chrome - EvalError:拒绝将字符串评估为 JavaScript,因为 'unsafe-eval' - Chrome 扩展

我正在迁移到 manifest v3,我将所有需要的内容安全策略添加到 manifest.json 文件中。但是我收到以下错误:

EvalError:拒绝将字符串评估为 JavaScript,因为 unsafe-eval 不是以下内容安全策略指令中允许的脚本源:script-src self。

在 eval () 在 inboxsdk.js:1177

清单.json:

0 投票
0 回答
15 浏览

javascript - Chrome 扩展程序不在 gmail 页面上运行

我正在尝试创建一个 chrome 扩展程序(供个人使用),每次打开 gmail 消息时都会运行该扩展程序,但是我似乎无法在 gmail 页面中运行该功能。当我在其他页面上尝试它时,它运行成功,但在 gmail 上却没有。我尝试了不同类型的侦听器并添加了一些警报作为正在运行的指示,但在 gmail 上根本没有运行。

显现:

代理.js:

0 投票
0 回答
243 浏览

google-chrome-extension - 带有 Manifest v3 的 Sandbox 中的 Chrome 扩展中的 WebAssembly

我正在尝试在 Chrome 扩展程序中使用清单 v3 运行 WebAssembly 的库。

我有一个sandbox.html执行一些 JavaScript 的基本文件(调用它):

这是嵌入在带有此标签的页面中:

我没有添加sandbox或添加content_security_policy到我的manifest.json,因为我需要allow-same-origin,请参阅此评论

但是我收到以下错误:

根据thisthis,建议 usingunsafe-eval应该足以让这个运行。但是据我所知,我正在这样做,但我仍然收到此错误。

(我相信我应该使用wasm-evalover unsafe-eval;我都尝试过,但都没有工作。我也尝试过在我的钥匙中包含content_security_policywithout但不包括钥匙。)allow-same-originmanifest.jsonsandbox

我错过了什么吗?

0 投票
0 回答
42 浏览

google-chrome-extension - 内容脚本的 sendResponse 永远不会到达 service worker 的 sendMessage

tl; 博士:我在内容脚本中实现了一个运行时侦听器,我sendMessage从 background.js 对其进行了处理。问题是,这样做时,background.js 中函数的回调永远不会执行。


我有这个函数,它由我的服务工作者(background.js)执行,它对chrome.tabs.sendMessage活动选项卡的内容脚本执行操作。这是内容脚本

问题是sendMessage永远不会执行回调,即使我console.log在内容脚本中执行了一个,它也会显示出来。也没有runtime.LastError。我试图chrome.tabs.sendMessage(37, {color: "FOO"}, resp=>console.log)在我的扩展程序的控制台中手动执行。但是每当我这样做时,控制台总是会终止。我的内容脚本功能是同步的,所以不需要做return true;. 即使我添加return true;,问题仍然存在。

0 投票
0 回答
229 浏览

javascript - 如果用户已登录,我如何重定向到路由(AWS 放大 + React 中的 Chrome 扩展)

如果用户在我的 chrome 扩展(内置 React)中登录,我正在尝试重定向到特定路线。登录流程如下:

首先,用户通过 React 应用程序登录,并使用chrome.runtime.sendMessage扩展 id 作为参数将用户会话发送到 chrome 扩展。上面的代码如下所示:

一旦会话被发送到扩展,在background.js消息中被拦截,会话在创建 CognitoUser 对象后重建并附加到用户(如下所示:https ://stackoverflow.com/a/64325402/14410047 ) . 在此之后,登录确认消息被发送到弹出窗口,导致扩展重定向到/extension路由(我在扩展中使用 createMemoryHistory 进行路由),用户可以访问扩展的功能(默认路由重定向到 React 应用程序进行登录)。

这里的问题是,要重定向到/extension路由,我每次都必须从 React 应用程序发送会话,即使会话是在后台创建的。我决定使用 React Hooks 来检查会话是否已经存在于后台,在这种情况下,它应该重定向到/extension. 由于某种原因,这没有奏效。消息进入后台,但弹出窗口未收到确认消息。

Background.js

Popup.jsx

0 投票
0 回答
48 浏览

google-chrome - chrome 存储同步不跨多个设备同步

我正在使用chrome.storage.sync将数据保存到用户的谷歌帐户。每当我保存我的数据时,我都会检查我的另一台计算机以查看数据是否保存在我的谷歌帐户中。我发现我的数据没有保存在我的帐户中。

这可能是因为我正在加载我的扩展程序Load Unpacked吗?为了清楚起见,在我发布的扩展中,该chrome.storage.sync功能正在运行

index.js

所以我storeItems()在计算机 1 中使用,我希望计算机 2 应该getItems()成功

通过检查文档,只要我使用同一个谷歌帐户,它就应该跨设备保存。

0 投票
0 回答
75 浏览

sandbox - Chrome 扩展沙盒 iFrame 中的 SharedArrayBuffer

我试图SharedArrayBuffer通过设置一个跨域隔离的文档来使用。但是,由于它位于 Google Chrome 扩展程序中并且我需要 WebAssembly,因此我需要在沙盒页面中运行它。

我有一个沙盒页面,在 manifest.json 中定义为这样

而且我还使用 COOP 和 COEP 启用了跨域隔离。

除了使用这个sandbox.html脚本之外什么都不做:

然后我有一个outer.html嵌入sandbox.htmliFrame 的页面。

当我打开时outer.html,我收到消息“BAD am not crossOriginIso”,即sandbox.htmliFrame 内的文档不是跨域隔离的(我不能使用SharedArrayBuffer)。

有没有办法在内部文档被沙盒化的 iFrame 中使用清单 v3 在 Chrome 扩展中启用跨域隔离(通过manifest.json)。

也许更具体地说,如何featurePolicy.allowedFeatures()向沙盒 iFrame 添加更多内容(它是在 Chrome 扩展程序的沙盒中manifest.json,而不是sandbox属性)。

我注意到以下几点:

  • 没有iFrame直接打开sandbox.html,页面是跨域隔离的。
  • 删除该sandbox属性会manifest.json导致 iframe 内的文档被跨域隔离。
  • 在 iFrame 内执行document.featurePolicy.allowedFeatures()会提供非常小的功能列表(并且不包括cross-origin-isolated)。这个列表比sandbox.html直接打开时执行相同的命令要小很多。