1. 问题现象与背景分析
最近在开发Web调用本地应用的场景时,遇到了一个奇怪的问题:使用360极速浏览器(版本12.0.1212.0)的极速模式启动外部应用时,如果勾选了"记住我对所有此类链接的选择",后续点击链接反而无法启动应用。这个问题让我折腾了好几天,后来发现是浏览器的一个特殊机制导致的。
具体现象是这样的:
- 不勾选"记住选择"时,每次点击链接都会弹出提示框,但点击"启动应用"按钮能正常启动程序
- 勾选"记住选择"后,第一次点击能启动,但后续点击同一个协议的链接时,浏览器会静默拦截,不再弹出提示框也不启动应用
2. 问题原理深入解析
经过分析,这个问题与360极速浏览器的协议处理机制有关。当网页通过类似testpagecall://这样的自定义协议调用本地应用时:
- 浏览器会检查是否已对该协议做过处理选择
- 如果用户勾选了"记住选择",浏览器会将这个协议加入排除列表
- 这个排除信息会被保存在
User Data/Default/Preferences配置文件中 - 下次再遇到相同协议时,浏览器会直接拦截而不再询问
这个机制本意是好的 - 避免重复询问用户。但实际使用中发现,勾选"记住"后反而阻止了应用启动,这显然是个反直觉的设计缺陷。
3. 解决方案一:删除Preferences文件
第一种解决方法比较彻底,直接删除浏览器的配置文件:
- 关闭所有360极速浏览器窗口
- 右键浏览器图标 → "打开文件所在位置"
- 默认会打开类似
C:\Users\[用户名]\AppData\Local\360se6\Application的目录 - 返回上一级的
360se6文件夹 - 找到
User Data\Default\Preferences文件(可能是隐藏文件) - 删除这个文件
- 重新打开浏览器
注意:删除Preferences文件会重置所有浏览器设置,包括主页、收藏栏等个性化配置。建议先备份该文件。
这个方法的优点是简单直接,缺点是会丢失所有浏览器设置。适合不常自定义浏览器设置的用户。
4. 解决方案二:手动编辑Preferences文件
第二种方法更精准,只修改相关配置:
- 同上找到Preferences文件
- 用文本编辑器(如记事本)打开
- 搜索
excluded_schemes字段 - 找到类似这样的配置块:
"protocol_handler": { "excluded_schemes": { "testpagecall": true } }- 有两种修改方式:
- 直接删除
testpagecall这一行 - 将值从
true改为false
- 直接删除
- 保存文件
- 重新打开浏览器
这个方法的好处是只修改协议处理相关配置,不影响其他设置。但需要一定的JSON文件编辑经验。
5. 操作注意事项
无论采用哪种方案,都需要注意:
- 操作前确保关闭所有浏览器进程
- 检查任务管理器,确保没有
360se.exe等残留进程
- 检查任务管理器,确保没有
- 如果找不到User Data文件夹
- 可能是隐藏了,需要在文件夹选项中开启"显示隐藏的文件、文件夹和驱动器"
- 编辑JSON文件时
- 注意保持JSON格式正确
- 建议使用专业的文本编辑器如VS Code
- 修改前备份原文件
- 修改后测试时
- 首次调用可能仍会弹出提示框
- 再次勾选"记住选择"观察是否正常
6. 问题根源与预防措施
这个问题的根本原因是360极速浏览器将"记住选择"的实现逻辑设计为"排除该协议",而不是"允许该协议"。要避免类似问题:
- 开发角度:
- 测试时注意勾选/不勾选"记住选择"的两种情况
- 考虑在网页中添加协议调用失败的检测和提示
- 用户角度:
- 遇到类似问题时先尝试不勾选"记住选择"
- 定期备份浏览器配置
- 考虑使用更标准的协议处理方式
7. 其他浏览器对比
作为对比,测试了其他主流浏览器的表现:
- Chrome:
- 有类似的"记住选择"选项
- 但勾选后仍会正常调用应用
- Firefox:
- 会询问是否允许网站打开应用
- 允许设置永久选择
- 选择后行为符合预期
- Edge:
- 行为与Chrome基本一致
- 没有出现360的这种异常情况
这个对比说明360极速浏览器的实现确实存在特殊之处,开发者在做Web-to-Desktop集成时需要特别注意。