Chrome自定义标签禁用Cookie、清缓存及Chromium65无痕链接代码修改问题
嘿,针对你在Chromium 65上遇到的这两个Chrome Custom Tabs问题,我来给你梳理下具体的解决方法:
1. 禁用Cookie并清除缓存
Chrome Custom Tabs默认是共享浏览器主Profile的Cookie和缓存的,要实现禁用和清除,得从Chromium源码层面修改:
- 禁用Cookie:找到
CustomTabsServiceImpl中创建WebContents的逻辑,在初始化WebPreferences的时候,添加block_all_cookies = true的配置。这样就能让这个Custom Tab完全禁止Cookie的存储和读取。 - 清除缓存:
- 如果只想清除目标站点的缓存,可以在启动Custom Tab前,调用
ChromeBrowserProcess::GetInstance()->GetHttpCache()->DeleteEntriesForOrigin(GURL(你的目标URL)),删除对应域名的缓存条目; - 如果要彻底禁用缓存,同样在
WebPreferences里设置enable_cache = false,这样Custom Tab就不会加载任何缓存内容。
- 如果只想清除目标站点的缓存,可以在启动Custom Tab前,调用
App端通过Intent传参的方式在Chromium 65里支持得不好,直接改CustomTabs相关服务的代码是最可靠的方案。
2. 修复无痕Tab不生效的问题
你用的EXTRA_OPEN_NEW_INCOGNITO_TAB在Chromium 65的Custom Tabs流程里默认是不被处理的——这个参数原本是给Chrome普通页面Intent用的,Custom Tabs有自己独立的启动逻辑。你需要修改CustomTabsServiceImpl的代码来支持这个参数:
读取无痕标志:在
LaunchUrl方法里,先从Intent中获取这个extra的值:bool use_incognito = intent.HasExtra("android.intent.extra.OPEN_NEW_INCOGNITO_TAB") && intent.GetBooleanExtra("android.intent.extra.OPEN_NEW_INCOGNITO_TAB", false);切换到无痕Profile:创建Custom Tab的时候,根据上面的标志选择对应的Profile。原来的代码大概率是用主Profile(
GetOriginalProfile()),现在改成:Profile* target_profile = use_incognito ? profile_->GetOffTheRecordProfile() : profile_->GetOriginalProfile();然后用这个
target_profile来创建WebContents和Tab。适配无痕UI(可选):如果需要让Custom Tab的UI体现无痕模式(比如顶部栏用深色),可以在
CustomTabToolbarView之类的UI类里,判断当前Profile是否为无痕,然后调整样式。
举个简化的代码修改片段:
void CustomTabsServiceImpl::LaunchUrl(const Intent& intent, const GURL& url, const SessionID& session_id) { // ... 保留原有逻辑 ... // 读取无痕参数 bool use_incognito = intent.HasExtra("android.intent.extra.OPEN_NEW_INCOGNITO_TAB") && intent.GetBooleanExtra("android.intent.extra.OPEN_NEW_INCOGNITO_TAB", false); // 选择对应的Profile Profile* target_profile = use_incognito ? profile_->GetOffTheRecordProfile() : profile_->GetOriginalProfile(); // 创建并添加WebContents到Tab栏 WebContents* web_contents = CreateWebContents(target_profile, ...); browser_->tab_strip_model()->AddWebContents(web_contents, ...); // ... 其余代码 ... }
修改后,你的App端传的EXTRA_OPEN_NEW_INCOGNITO_TAB参数就能生效,打开的Custom Tab会使用无痕Profile,不会把浏览记录写到主Profile的历史里。
内容的提问来源于stack exchange,提问作者selina liu

