如何修改Chromium 63代码禁用默认自定义标签,让链接在浏览器打开
嘿,刚好我对Chromium 63的自定义标签触发逻辑熟得很,给你一步步拆解怎么改代码实现需求:
修改步骤详解
1. 全局禁用自定义标签判断
首先找到chrome/browser/chrome_content_browser_client.cc文件,定位到ShouldUseCustomTabs方法——这个方法就是用来决定是否启用自定义标签的核心判断点。把原有的条件判断直接改成返回false:
bool ChromeContentBrowserClient::ShouldUseCustomTabs( content::BrowserContext* browser_context, const GURL& url, const content::Referrer& referrer, bool has_user_gesture, bool is_renderer_initiated) { // 强制返回false,让所有链接请求都走普通浏览器打开流程 return false; }
这一步相当于给自定义标签功能“拔了总闸”,全局范围内都不会触发自定义标签了。
2. 取消自定义标签请求的识别
如果上面的修改还没完全覆盖所有场景,再找chrome/browser/customtabs/custom_tab_request_handler.cc里的IsCustomTabRequest方法,同样把它改成返回false:
bool CustomTabRequestHandler::IsCustomTabRequest( content::WebContents* web_contents) { // 直接标记所有请求都不是自定义标签请求 return false; }
这一步确保任何带有自定义标签启动参数的请求,也会被当作普通链接处理。
3. 调整Android平台的Intent处理(如果是Android版本)
如果你修改的是Android版Chromium,还需要处理系统Intent的情况。找到chrome/browser/intent_handler.cc中的HandleViewIntent方法,把里面启动自定义标签的逻辑替换成普通浏览器打开逻辑:
void IntentHandler::HandleViewIntent( const content::Intent& intent, content::WebContents* web_contents, content::BrowserContext* browser_context) { // 跳过自定义标签启动逻辑,直接用普通浏览器打开链接 chrome::NavigateParams params(browser_context, intent.url(), ui::PAGE_TRANSITION_LINK); params.referrer = intent.referrer(); params.has_user_gesture = true; chrome::Navigate(¶ms); }
这样所有系统发来的VIEW类型Intent,都会直接打开普通浏览器窗口,而不是自定义标签。
4. 验证修改效果
编译Chromium 63代码后,点击任意链接应该都会直接打开普通的Chromium浏览器窗口。如果还有个别链接走自定义标签,检查下是否还有遗漏的判断点——比如CustomTabsClient类里的相关方法,同样改成返回false即可。
内容的提问来源于stack exchange,提问作者selina liu
相关产品推荐
相关产品推荐

