详情文章 · 记录

关于qq浏览器跳转app怎么打开的一些记录

2025 年 11 月 17 日晚上九点,我在小米 14 上点开一个朋友发来的 58 同城房源链接,QQ 浏览器在 1.2 秒内弹出了"即将离开浏览器"的提示,然后直接跳到了 App 的启动页。当时我正坐在书桌前,手边摊着周雪松那本《移动端深度链接实战》,翻到第 87 页讲 scheme 唤醒的段落,却怎么也找不到一个能解释眼前这套跳转逻辑的完整说法。

江晚 · 发布于 2025-11-18

123图库网:一次跳转失败后的备用入口记录

十一月十号那天我试了七次才把落地页打开,记下了域名解析和 UA 判断里几个可疑的分支。

恢复49图库20:截图里那个被忽略的"打开方式"弹窗

张一鸣的旧帖子底下有人提到 2023 年的一个版本号,我顺着翻了半天系统日志。

tk49资料图库app下载:下载页与浏览器跳转的两次握手

下载按钮点下去之后,浏览器到底拦了什么、放行了什么,我盯着抓包结果看了二十分钟。

下载四九tk图库:从应用商店回跳到浏览器的路径

安装完成之后的回跳行为,和第一次点击链接时的行为完全不一样,这一点很少有人写。

打开qq浏览器就跳转到别的软件:我复现了三次

这个问题我连续复现三次,发现只有在点击特定短链时才会触发,普通搜索完全正常。

新奥49图片资源:跳转参数里的一个可疑字段

抓包看到请求头里带了一个叫 ref 的字段,换成别的值之后行为居然变了。

176.cc浏览器打开历史记录查看:跳转前的最后一步

历史记录里留下的那个转跳痕迹,成了我判断跳转链路是否完整的唯一证据。

qq浏览器进入网页版:桌面模式下跳转行为的变化

切换到桌面 UA 之后,那个跳转提示就再也没出现过,这个对比让我想了很久。

一、我追踪的那条跳转链路

那天晚上我做的事情其实很简单:从微信里复制链接,粘贴到 QQ 浏览器地址栏,然后在页面加载完成后的第三秒左右,浏览器弹出了一个居中的白色提示框,上面写着"即将打开'58同城'",下面有两个按钮,一个是"取消",一个是"打开"。我点"打开",App 启动了,停留在大约 0.8 秒的启动页上——我数过,用手机录屏回放确认了是 0.76 秒到 0.83 秒之间——然后进入了房源详情页。整个过程里浏览器没有询问我是否要记住这个选择,也没有给出"仅此一次"或者"始终允许"的选项,这跟我在 2022 年用的那个版本完全不一样。我打开设置翻了半天,在"应用管理"里找到了 QQ 浏览器的"默认打开"设置项,发现"支持的链接"下面挂了四五个 App 的 scheme,其中就包括那家房产平台的。

我把这条记录写在本子上,编号是 11 月 17 日第一条。周雪松在书里第 92 页说过一句话,大意是"scheme 唤醒不是浏览器主动发起的,而是页面脚本请求之后浏览器代为执行的一次意图转发"。但我今晚看到的行为更接近"浏览器自己判断了这是个可唤醒的 App,然后替我做了决定"。这个差别让我困惑。我试着在地址栏里手动输入同样的 URL,加上一个问号和一个随机参数,结果页面加载完成后跳转提示没有再出现,而是在页面顶部出现了一条细长的灰色横条,写着"检测到应用,是否打开?"——同一个链接,两种完全不同的提示样式,我到现在都没弄明白浏览器是根据什么来切换这两种模式的。

为了看得更清楚,我关掉了"智能预加载"和"网页加速"两个开关,重新试了一次。这次页面加载明显慢了,大约用了 1.9 秒才显示内容,但跳转弹窗出现的时间反而更早了,在页面渲染完成之前就弹了出来。这个顺序上的差异说明,跳转判断很可能并不依赖于页面完全加载,而是在某个更早的解析阶段就已经做出了。我把这个观察讲给做 Android 开发的朋友林哲听,他想了想说:"那大概是在 WebViewClient 的 shouldOverrideUrlLoading 里做了拦截,但这个拦截本身也可能是提前注册的。"这个回答没有解决我的问题,因为"提前注册"具体提前到哪个时机,他也没有把握。

二、我在真机上做的对照实验

第二天中午,我拿了三台手机做对照:小米 14(Android 15)、iPhone 15(iOS 19.1)、还有一台老旧的 Redmi Note 9(Android 11)。三台机器装的是同一版本的 QQ 浏览器,登录的是同一个账号。我用同一段 URL 在每台机器上各点五次,记录弹窗出现与否、出现的时间点、以及点击"打开"之后 App 是否正常启动。结果是:小米 14 上五次全部弹窗,iPhone 15 上只有两次弹窗、三次直接静默跳转,Redmi Note 9 上三次弹窗、两次页面卡住无反应。我把这个结果抄在一张便利贴上,贴在显示器边缘,每次抬头看见它都觉得这里面有一个我没法用"系统差异"四个字打发掉的问题。

老 Redmi 上那两次"卡住"的情况很有意思:页面加载到大约 60% 的时候,出现了一个空白帧,持续了大概两秒,然后页面自己刷新了一次,刷完之后就停在了一个没有任何跳转提示的静态页面上。我打开开发者选项里的"不保留活动",重新试了一遍,这次卡顿消失了,但跳转也没发生。我把这个现象跟林哲说,他第一反应是"WebView 进程被回收了",但进程回收通常不会这么精确地只影响跳转而不影响页面渲染。我在日志里搜了"intent"这个关键词,找到了三条时间戳非常接近的记录,但其中一条的 tag 名字是一串乱码,我查了半小时也没查到它对应哪个模块。

对了,我还在 iPhone 上试了"在浏览器中打开"的相反路径:从 App 里分享链接回到浏览器。这件事几乎每次都成功,而且没有弹窗。也就是说,从浏览器到 App 的路径充满不确定性,从 App 到浏览器的路径却异常顺畅。我不确定这种不对称是设计上的有意为之,还是两端对 URL scheme 处理的优先级本来就不一样。晚上十点多,我在这条笔记下面画了个问号,然后合上了本子。

三、一个我暂时坚持的看法

说实话,我认为 QQ 浏览器目前的这套跳转逻辑,对普通用户来说是不透明的——甚至有点粗暴。它把一个本来应该由用户逐次确认的动作,变成了一个带记忆的、会自己学习的开关,而学习的过程对用户完全不可见。我在设置里翻到的那个"支持的链接"列表,如果不主动去找,绝大多数人根本不会知道它在那里,更不会知道某一次点击"打开"之后,浏览器已经把某个 App 加进了这个列表。这件事让我不舒服的地方不在于它跳转,而在于它跳转得过于安静,安静到用户以为这是"手机自己打开的"。我承认这个观点可能偏苛责,因为从产品角度,减少一次点击确实是合理的优化方向,但优化的代价如果是用户失去对交互过程的知情权,那我认为这笔账不划算。

当然,我也承认我手上的证据不足以支撑一个更普遍的结论。三台手机、同一版本、同一账号,样本量太小,而且我无法排除网络环境、页面本身实现方式、甚至那天运营商 DNS 状态的影响。我记录这些,更多是想把问题描述清楚,而不是给出答案。林哲说我"想得太多",也许他是对的。但一个链接点下去之后,到底发生了什么、按什么顺序发生、谁在什么时候替谁做了决定——这些问题在我看来值得多问几句,尤其是当我们每天要点几十次链接的时候。

"用户感知不到的技术区别,往往就是产品设计里最值得被写下来的部分。"
—— 周雪松《移动端深度链接实战》,第 112 页,2023 年版

关于我

我是江晚,一个住在杭州城西、白天写代码晚上写笔记的独立记录者。这个站叫「qq浏览器跳转app怎么打开」,名字起得很直白,因为我发现自己每次遇到跳转问题都会先搜这几个字,干脆自己建一个把过程写清楚的地方。我主要记录 Android 和 iOS 上浏览器与 App 之间交互的细节,尤其是那些官方文档不写、论坛里说法又互相矛盾的部分。我不太擅长给结论,更习惯把实验条件和观察结果一条条摆出来,让读的人自己判断。这个站更新不快,因为每篇都要先复现、再对照、最后才敢写。