使用Chrome Extension Manifest V3,如何执行代码字符串?

sit*_*guy 7 javascript google-chrome-extension chrome-extension-manifest-v3

我\xe2\x80\x99m 使用 Manifest V3 编写 Chrome 扩展,并试图找到一种动态执行代码字符串的方法(类似于用户脚本)。有执行代码字符串的方法(eval、setTimeout、new Function 等);然而,它们在 Manifest V3 中似乎被禁止。虽然 setTimeout 仍然有效,但 Chrome 团队表示,提交到 Chrome Web Store 后将不再接受执行代码字符串。提交时,代码需要成为扩展的一部分。在下面的链接中\xe2\x80\x9cRemotely Hosted Code\xe2\x80\x9d 下也有说明:

\n

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

\n

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

\n

Chrome Web Store 是否有允许的方式或对此问题的任何更新?

\n

编辑1:

\n

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

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

编辑2:

\n

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

\n

编辑3:

\n

感谢所有回复的人。\xe2\x80\x99t 似乎没有解决这个问题的方法。我还没有听到或读到过关于如何(如果可能的话)脚本代码字符串可以动态执行(Chrome Web Store 不会拒绝)的公开声明。

\n

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

\n
    \n
  • 根据您的使用案例,听取 @wOxxOm 或 @hashed tomato 的建议。
  • \n
  • 降级到 Manifest V2 并使用 \xe2\x80\x9cchrome.tabs.executeScript\xe2\x80\x9d。这只是临时修复,因为 Manifest V2 将在指定时间后停止工作。
  • \n
  • 不确定向 CWS 提交延期时是否会被拒绝。允许用户通过扩展保存脚本。截至我\xe2\x80\x99m 写这篇文章时,我不\xe2\x80\x99t 知道一种保存文件的方法,该方法将使保存的文件能够通过其他两种方法之一执行\xe2\x80 \x9cchrome.scripting.registerContentScripts\xe2\x80\x9d 和 \xe2\x80\x9cchrome.scripting.executeScript\xe2\x80\x9d。需要进行测试,否则我会在这里声明。
  • \n
\n

感谢大家。

\n

小智 1

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

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

沙箱代码有一些限制,例如它不能访问 DOM。这取决于您想通过代码字符串执行什么操作。