Chrome 93及以上版本忽略SQLite触发器 无法阻止历史记录保存怎么办
失效原因
Chromium v93版本对历史记录数据库的逻辑做了两处关键调整,导致原有触发器失效:
- 启动时会自动校验
History数据库的表结构、触发器是否为默认配置,一旦检测到自定义修改,会直接重建数据库覆盖你的触发器 - 优化后的历史记录批量写入逻辑绕过了单条INSERT触发器的触发时机,就算触发器没被删除也不会生效
可行解决方案
方案1:修改触发器+锁定数据库(兼容原有实现思路)
操作步骤:
- 完全关闭所有Chromium/Chrome进程,包括后台驻留的进程,避免数据库被占用
- 打开用户配置目录下的
History数据库所在路径,删除同目录下的History-journal、History-wal临时文件 - 用sqlite3打开
History文件,执行以下语句,给所有和历史记录相关的表都添加拦截触发器:
CREATE TRIGGER IF NOT EXISTS no_urls BEFORE INSERT ON urls FOR EACH ROW BEGIN SELECT RAISE(ABORT, ''); END; CREATE TRIGGER IF NOT EXISTS no_visits BEFORE INSERT ON visits FOR EACH ROW BEGIN SELECT RAISE(ABORT, ''); END; CREATE TRIGGER IF NOT EXISTS no_segment_usage BEFORE INSERT ON segment_usage FOR EACH ROW BEGIN SELECT RAISE(ABORT, ''); END;
- 修改
History文件的权限为只读,阻止Chromium启动时修改数据库结构删除触发器:- Linux/macOS:终端执行
chmod 444 History - Windows:右键点击
History文件,勾选「只读」属性后保存
- Linux/macOS:终端执行
- 重启Chromium即可生效,若出现启动提示历史记录损坏的情况,建议更换为方案2
方案2:配置浏览器内置策略(版本兼容性最好,不会随升级失效)
直接通过Chromium官方支持的管理策略禁用历史记录保存功能,比修改数据库更稳定:
- 根据你的操作系统创建对应策略配置文件:
- Linux:在
/etc/opt/chromium/policies/managed/目录下新建disable_history.json文件 - macOS:在
/Library/Application Support/Google/Chrome/policies/managed/目录下新建对应配置文件 - Windows:打开注册表编辑器,定位到
HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Chrome,新建DWORD值HistoryEnabled,赋值为0
- Linux:在
- 非Windows系统的配置文件内容为:
{ "HistoryEnabled": false }
- 重启浏览器后,历史记录功能会被全局禁用,不会产生任何保存行为
方案3:启用自动清除历史记录设置(无需修改系统配置)
如果你不想修改数据库或者系统策略,可以直接用浏览器自带的自动清除功能:
打开Chromium设置 -> 隐私和安全 -> 清除浏览数据 -> 切换到「高级」标签,勾选「浏览历史记录」,再进入「退出浏览器时自动清除数据」页面,打开对应开关即可,每次关闭浏览器时所有历史记录都会被自动清除。
内容的提问来源于stack exchange,提问作者Azevedo
相关产品推荐
相关产品推荐

