Chrome 扩展程序 V3 - 弹出窗口关闭时继续进程

Chrome extension V3 - continue process when popup closes

提问人:syydi 提问时间:11/15/2023 最后编辑:syydi 更新时间:11/15/2023 访问量:32

问:

StackOverflow 上还有其他类似的问题,但我认为我有一个独特的案例。

我正在使用 React 创建一个 Chrome 扩展程序。该扩展程序从服务器请求数据,并在特定网站上填写表单。扩展可以通过单击按钮在视图之间移动。该过程可能需要几分钟时间。我希望用户能够在进程运行时使用其他浏览器选项卡/窗口,但目前如果用户单击,弹出窗口将关闭并终止进程。

目前,这一切都使用 React 工作。当代理按下按钮时,将找到正确的 Executor 类,并在其上调用方法。但是,当用户单击离开时,弹出窗口将关闭,进程将被终止。我发现了一个提示,即使用 chrome/window 侦听器,如果使用侦听器,扩展程序应该保持/处于活动状态。

我尝试将执行器调用放在 Service Worker 中。但是,Executor 使用的库内部需要 window 对象,并且由于后台进程无法访问它,我收到错误(未定义窗口)。

然后我尝试使用内容脚本来调用执行器。当进程尝试单击按钮时,它会使用 调用答题器脚本。Content-scripts 无法使用脚本 API,我再次收到错误(executeScript 不是函数)。chrome.scripting.executeScript

如何执行该过程,以便在弹出窗口关闭时不会被杀死?

编辑:库中的 Window 属性

declare global {
  interface Window {
    __SOMETHING__?: boolean;
  }
}

库中的错误被抛出一行

if (!window.__SOMETHING__) {
javascript 打字稿 google-chrome-extension

评论

0赞 wOxxOm 11/15/2023
它使用什么属性?如果没有,则只需添加到 Service Worker。windowself.window = self
0赞 syydi 11/15/2023
我添加到文件中。我不得不禁用检查,但无论如何它似乎什么也没做。self.window = self
0赞 wOxxOm 11/15/2023
这个特殊的检查将与self.window补丁一起使用,假设你在代码运行之前应用它。如果还有更多,您应该对其进行调试并找到它需要的其他内容,然后添加类似的补丁。
0赞 syydi 11/15/2023
添加到配置错误源头库的文件中,我得到self.window = selfUncaught TypeError: Cannot set property window of #<Window> which has only a getter
0赞 wOxxOm 11/15/2023
由于 Service Worker 没有这样的错误,我猜当代码在选项卡/弹出窗口中运行时您会看到此错误。您可以添加类似 .另请注意,如果通过 static 语句导入库,则代码运行可能太晚。在这种情况下,您需要使用一个单独的 js 文件来设置 self.window,并在库之前导入它。if (!self.window) self.window = selfimport

答: 暂无答案