Firefox MV3 #1330
Replies: 7 comments 19 replies
This comment has been hidden.
This comment has been hidden.
-
|
@CodFrm https://bugzilla.mozilla.org/show_bug.cgi?id=1685123 原因是,Firefox团队最初让 eval 在MV3完全禁止让扩充变得安全的想法,被 executeScript 这个API打破了缺口,因此Firefox整个团队的想法是舍弃 executeScript, 而倒过来为了扩充能使用 自定义代码, 会重新在MV3实现 sandbox 现在最新版是 151.0a1 (2026-04-06) 应该今年内就会补回 sandbox, 然后 Firefox那边也可以踏入 MV3 时代了 |
Beta Was this translation helpful? Give feedback.
-
|
https://blog.mozilla.org/addons/2026/04/23/webextensions-api-changes-firefox-149-152/ 未提及 Firefox MV3 sandbox 支持的时间表 |
Beta Was this translation helpful? Give feedback.
This comment has been hidden.
This comment has been hidden.
-
Issue - No sandbox support -> Cannot do background scripthttps://bugzilla.mozilla.org/show_bug.cgi?id=1685123 https://bugzilla.mozilla.org/show_bug.cgi?id=1896824#c4 https://bugzilla.mozilla.org/showdependencygraph.cgi?id=1685123 https://bugzilla.mozilla.org/show_bug.cgi?id=1443253 Sandbox issue (might also need #1347 )
|
Beta Was this translation helpful? Give feedback.
-
|
我觉得 Firefox MV2 很可能又要被下架了 我发现可以直接 Tag 大佬 Rob Wu |
Beta Was this translation helpful? Give feedback.
-
DNR modifyHeaders 与
|
| 浏览器 | 行为 |
|---|---|
| Firefox | 先套用 DNR header 修改,再触发 onBeforeSendHeaders |
| Safari | 先套用 DNR header 修改,再触发 onBeforeSendHeaders |
| Chrome | 先触发 onBeforeSendHeaders,之后才套用 DNR header 修改 |
换句话说,在 Firefox / Safari 中,webRequest.onBeforeSendHeaders 看到的是 已经被 DNR 修改过的 headers;但在 Chrome 中,webRequest.onBeforeSendHeaders 看到的是 DNR 修改前的 headers。
Carlos 的观点
Carlos 补充说,这个问题不只出现在 request headers,也和 response headers 有关。
他提到 Rob 曾在 Firefox 的 issue tracker 中指出:如果 DNR 先修改 header,extension 就可以在 runtime 阶段再看到或处理已被 DNR 改过的 header。
Carlos 认为,从设计上看,宣告式的修改应该先发生,非宣告式的修改或事件处理应该后发生。也就是:
- 先套用 DNR 规则,因为 DNR 是 declarative / 宣告式的。
- 再让 extension 透过
webRequest事件观察或进一步处理。
不过 Carlos 也提出一个问题:除了知道目前浏览器行为不一致之外,是否真的有具体使用场景需要改变现有顺序。
Rob 的观点
Rob 说,Firefox 采用「先套用 DNR 规则」是有意为之,不是偶然行为。
他也指出,这与浏览器其他 header 处理逻辑一致。例如某些 header 会在 extension 看到之前,就已经由浏览器或相关机制加入或处理,例如 cookies。
Rob 的意思是:extension 在 webRequest 事件里看到的 header,本来就不一定是最原始、完全未处理的 header;所以让 DNR 先修改 header,再让 webRequest 看到结果,是合理的模型。
Kiara 的回应
Kiara 表示同意:让 DNR 修改先发生是合理的。
她接著询问开发者意见,也就是想知道 extension 开发者是否有不同需求,或是否有现实案例需要维持 Chrome 目前的顺序。
Carlos 的后续建议
Carlos 建议,可以在 issue 中询问是否有人有实际 use case,说明为什么需要改变或保留某个特定顺序。
也就是说,下一步不只是抽象讨论「哪个顺序比较合理」,而是要确认:
- 是否有 extension 依赖 Chrome 目前的行为。
- 是否有 extension 需要 Firefox / Safari 的行为。
- 如果标准化某一种顺序,会不会破坏现有 extension。
Rob 对 Firefox 的立场
Rob 表示,他看不出 Firefox 有理由改变目前行为。
也就是 Firefox 目前仍倾向维持:
DNR modifyHeaders 先执行 → 再触发 webRequest.onBeforeSendHeaders。
Tim / Chrome 的回应
Tim 表示,他会把这个问题带回去问 Chrome 内部负责 DNR 的人,取得他们的看法。
这代表 Chrome 尚未在会议上承诺改变行为,但愿意进一步确认。
Rob 对 Chrome 行为可能理由的分析
Rob 提出一个可能支持 Chrome 目前行为的论点:
如果没有 blocking webRequest,那么 onBeforeSendHeaders 和 onSendHeaders 可能会看到相同的 header 资讯。
也就是说,在 Chrome 的模型中,如果 DNR 是在 onBeforeSendHeaders 之后才改 header,那么 onBeforeSendHeaders 可能更像是「送出前、但 DNR 还没动手前」的观察点。
但 Rob 也指出,企业版 extension 仍然可以使用 blocking webRequest。因此这个问题仍然复杂,因为 blocking webRequest 可能会真的修改 request,而不只是观察。
会议结论
Kiara 表示会:
- 对 Chrome 追加 follow-up。
- 把这个 issue 加到下一次会议议程中继续讨论。
所以 Issue 1004 在这次会议中 没有最终结论。目前较明显的共识是:Firefox / Safari 的「DNR 先、webRequest 后」模型在概念上比较合理;但 Chrome 需要内部确认,也需要调查是否有 extension 依赖 Chrome 目前的顺序。([GitHub][1])
简短结论
这个 issue 的核心是:
DNR header 修改应该在 webRequest.onBeforeSendHeaders 之前还是之后发生?
目前 Firefox 和 Safari 是:
DNR modifyHeaders → webRequest.onBeforeSendHeaders
Chrome 是:
webRequest.onBeforeSendHeaders → DNR modifyHeaders
会议中的倾向是认为第一种较合理,因为 DNR 是 declarative,应该先套用,再让 runtime / imperative 的 webRequest 观察或处理。但 Chrome 仍需确认是否能改,以及是否有相容性风险。
基本上 Firefox 那边的次序是不会改的
只是他们要确认一下 Chrome 这样设计的意图为何
不过目前SC已经有把新方法加进去,影响不大
Beta Was this translation helpful? Give feedback.


Uh oh!
There was an error while loading. Please reload this page.
-
Firefox MV3 不支持在 扩充页面进行
eval/new Function查过很多资料和方法。没有任何可行的做法
除非打开一个网络的沙盒页
当作一般页面的脚本注入,在里面跑代码
Beta Was this translation helpful? Give feedback.
All reactions