1

我正在使用 Manifest V3 编写一个 Chrome 扩展,并试图找到一种动态执行代码字符串的方法(类似于用户脚本)。有执行代码字符串的方法(eval、setTimeout、new Function等);但是,它们似乎在 Manifest V3 中被禁止。虽然 setTimeout 仍然有效,但 Chrome 团队表示,当提交到 Chrome 网上应用店时,将不再接受执行代码字符串。提交时,代码需要成为扩展的一部分。在下面的“远程托管代码”下的链接中也有说明:

https://developer.chrome.com/docs/extensions/mv3/intro/mv3-migration/

看到一些关于这个问题的论坛帖子和 crbugs,但它们似乎都已经过时,没有明确的答案。与上面的链接一样,较早的帖子声明将不再可能执行代码字符串。较新但仍然过时(2020 年)的帖子指出,Manifest V3 将有一些用例(例如 TamperMonkey),其中用户脚本可以动态注册,但只有在给用户一个提示之后。我看到的让扩展动态运行脚本的唯一两种方法是“chrome.scripting.registerContentScripts”和“chrome.scripting.executeScript”。这两种方法都从文件执行代码,而不是字符串。旧方法“chrome.tabs.executeScript”用于允许执行代码字符串,但现在已弃用。

Chrome网上应用店是否允许使用某种方法或对此问题进行任何更新?

编辑1:

如果从文件动态执行脚本是唯一的方法:

  1. Chrome 扩展程序是否允许将文件保存在扩展程序目录中?或者它会使扩展无效(由于某些安全策略,扩展会自动卸载)?
  2. 如果允许扩展将文件保存在扩展目录之外,那么当前的两种方法(上面提到的)可以执行这些文件吗?

编辑2:

重新措辞 2(在编辑 1 下)。

编辑3:

感谢所有回复的人。似乎还没有解决此问题的方法。我没有听到或读过关于如何(如果可能的话)脚本代码字符串可以动态执行(Chrome 网上应用店不会拒绝)的公开公告。

自 2021 年 11 月 13 日起,您可以执行以下操作之一:

  • 根据您的用例,从@wOxxOm 或@hashed 番茄那里获得建议。
  • 降级到 Manifest V2 并使用“chrome.tabs.executeScript”。这只是临时修复,因为 Manifest V2 将在指定时间后停止工作。
  • 不确定在向 CWS 提交扩展时这是否会被拒绝。允许用户通过扩展保存脚本。在我写这篇文章的时候,我不知道有一种方法可以保存文件,使保存的文件能够通过其他两种方法“chrome.scripting.registerContentScripts”和“chrome.scripting”之一执行.executeScript”。需要进行测试,否则,我会在这里说明。

感谢大家。

4

1 回答 1

1

在沙箱中,可以执行代码字符串。

https://developer.chrome.com/docs/extensions/mv3/manifest/sandbox/

沙盒代码有几个限制,例如,它不能访问 DOM。这取决于您想通过代码字符串做什么。

于 2021-11-12T12:46:19.993 回答