如何在Chrome 138/139及更高版本中继续使用manifest v2扩展

最近Chrome 138正式release了,之前写过《如何在Chrome上强制安装世界最强广告屏蔽插件uBlock Origin》,所以又研究了一下让Chrome继续支持manifest v2方法。Chrome 138是最后能够支持manifest v2的版本,从139版本开始默认禁用manifest v2,但是139、140版本还是有办法让chrome继续支持manifest v2。

从Chrome 128每次新版本第一次打开就不会提示“xxx扩不再支持、被停用”。需要在“扩展”里重新启用这个扩展才能使用。如果你不想看到这个提示(manifest v2扩展自动被停用),可以使用Chrome Enterprise policy来禁用Chrome这个动作。

选择以下任意一种方式:

方法一:使用命令行

执行下面命令,然后在 Chrome 中打开 chrome://policy/ ,点击“重新加载政策”按钮。

powershell

reg.exe add "HKLM\SOFTWARE\Policies\Google\Chrome" /v ExtensionManifestV2Availability /t REG_DWORD /d 2 /f
reg.exe query "HKLM\SOFTWARE\Policies\Google\Chrome" /v ExtensionManifestV2Availability

方法二:导入注册表文件

保存下面内容为ExtensionManifestV2Availability.reg,然后双击这个文件导入注册表。然后在 Chrome 中打开 chrome://policy/ ,点击“重新加载政策”按钮。

text

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Chrome]
“ExtensionManifestV2Availability”=dword:00000002

在终端中执行以下命令:

shell

sudo tee /Library/Managed\ Preferences/com.google.Chrome.plist >/dev/null <<EOF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" 
  "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>ExtensionManifestV2Availability</key>
  <integer>2</integer>
</dict>
</plist>
EOF

在文件中/etc/opt/chrome/policies/managed/enable-manifestv2.json,添加下面内容:

json

{
  "ExtensionManifestV2Availability": 2
}
Note

这个方法适用于Chrome 110 到138版本

具体请查看 https://chromeenterprise.google/policies/#ExtensionManifestV2Availability

虽然从139版本开始无法使用ExtensionManifestV2Availability(Chrome Enterprise policy),但是还是有办法继续使用manifest v2扩展。

Chrome提供了相关的flag来控制manifest v2废弃的节奏:

  • extension-manifest-v2-deprecation-disabled
  • extension-manifest-v2-deprecation-unsupported
  • extension-manifest-v2-deprecation-warning
Note

在138、139版本中,extension-manifest-v2-deprecation-unsupported默认为Disabledextension-manifest-v2-deprecation-disabledextension-manifest-v2-deprecation-warning默认为Enabled

这些flag最后可用的版本是137,不过Chrome提供了另外的flag(temporary-unexpire-flags-m{$recent_mstones},这里的recent_mstones是前两个版本的版本号)来启用前两个版本过期的flag。

同时提供flag allow-legacy-mv2-extensions用于开发者能够对manifest v2扩展(未打包的源码)进行维护(迁移、升级等),这个flag默认是Disabled,最后可用版本是139版本。

  1. 打开chrome://flags/#temporary-unexpire-flags-m137,设置为Enabled

  2. 重启chrome,打开并设置这些

    text

    chrome://flags/#extension-manifest-v2-deprecation-warning         [Disabled]
    chrome://flags/#extension-manifest-v2-deprecation-disabled        [Disabled]
    chrome://flags/#extension-manifest-v2-deprecation-unsupported     [Disabled]
    chrome://flags/#allow-legacy-mv2-extensions                       [Enabled]
Note

这个方法适用于Chrome 138、139版本

由于flag列表里 temporary-unexpire-flags-m前缀的flag,只会有两个。即只支持启用前两个版本过期的flag,所以140版本的flag里没有temporary-unexpire-flags-m137,无法配置这些flags(extension-manifest-v2-deprecation-warning、extension-manifest-v2-deprecation-disabled、extension-manifest-v2-deprecation-unsupported)。

但是在140版本代码中还未删除manifest v2相关的代码,还可以通过命令行中的--disable-features来禁用相关feature(ExtensionManifestV2Unsupported、ExtensionManifestV2Disabled),从而启用manifest v2的支持。

text

chrome --disable-features=ExtensionManifestV2Unsupported,ExtensionManifestV2Disabled
Note

这个方法适用于Chrome 131.0.6754.0以上版本,直到chrome完全不支持manifest v2(完全删除manifest v2相关的代码)的前一个版本。

Note

其实在Chrome内部,每个flag对应一个feature,比如flag extension-manifest-v2-deprecation-disabled对应feature里的ExtensionManifestV2Disabled。具体的映射关系,可以查看这个代码

从140.0.1287.0版本开始ExtensionManifestV2Unsupported默认为Enabled相关diff [Extensions MV2] Enable “ExtensionManifestV2Unsupported” by default

预计142版本可能会完全删除manifest v2相关的代码。

about_flags.cc;l=9511-9528

about_flags.cc;l=11662-11667

expired_flags_list.cc;l=435-437

expired_flags_list.cc;l=30

生成的temporary-unexpire-flags-m的flag

自动生成temporary-unexpire-flags-m的flag脚本

extension_features.cc;l=83-107

Chrome main version

flag-metadata.json;l=4749-4761

flag-metadata.json;l=151-155

CalculateCurrentExperimentStage

https://github.com/uBlockOrigin/uBlock-issues/discussions/3690

https://github.com/uBlockOrigin/uBlock-issues/discussions/2977#discussioncomment-13593599

https://www.reddit.com/r/uBlockOrigin/comments/1itw1bz/end_of_support_for_ubo_on_chrome_chromium/

https://www.reddit.com/r/Adblock/comments/1luqxs1/whats_currently_the_best_way_to_force_reenable/

https://www.tjsky.net/tutorial/1009

https://meta.appinn.net/t/topic/73073

https://tg.okhk.net/posts/6182

https://www.v2ex.com/t/1144737

https://www.v2ex.com/t/1144711

https://www.tjsky.net/tutorial/1186

相关内容