Android开发填坑之Bilibili视频页(移动版)的scheme跳转支持

本文介绍了解决Bilibili视频播放页加载后出现白屏的问题,详细分析了问题的根本原因在于B站视频页面的JS脚本尝试跳转到一个特定的bilibili APP scheme地址,最终给出了在WebView中正确处理此类链接的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题现象

打开Bilibili视频播放页,如https://m.bilibili.com/video/av23921215.html,正常打开该页面,但过一二秒后页面白屏。

根本原因

Bilibili视频放页的JS脚本会尝试跳转到一个地址,关键代码如下
这里写图片描述
该href的一个实例如下:

bilibili://video/23921215?h5awaken=cHZpZD0zOTY3NzhCMC03QjI4LTRDRjctOEQyNC1BNThBMDgwQ0Y1QUQxMDE1NzNpbmZvY18yMzkyMTIxNV8xNTI4ODU5NDE2NTAwJnVhPU1vemlsbGElMkY1LjAlMjAoTGludXglM0IlMjBVJTNCJTIwQW5kcm9pZCUyMDYuMC4xJTNCJTIwemhfQ04lM0IlMjBOZXh1cyUyMDUlM0IlMjBCdWlsZCUyRk00QjMwWiklMjBjbi5uaW5lZ2FtZS5nYW1lbWFuYWdlciUyRjExNDAlM0IlMjBOaW5lR2FtZUNsaWVudCUyRmFuZHJvaWQlMjB2ZSUyRjUuMS4yLjI1MSUyMHNpJTJGMWIxYmE3YzUtM2EwOS00MzdhLTllOWUtNmJjYmUzOGYxM2YzJTIwY2glMkZLRF8xJTIwc3MlMkYxMDgweDE3NzYlMjBuZyUyRmViNmU0NWE4YTY2N2E0MTczY2RiZjhlZGVhZDBlNjhmZGYlMjB1dCUyRldjaHBiS2JrbkZrREFLWlBLNGJwbVpTOCUyMG50JTJGd2lmaSUyMFVDQnJvd3NlciUyMFVDQlMlMkYyLjEzLjEuMTUmaXNBdXRvT3Blbj10cnVlJmJzb3VyY2U9dWNfYnJvd3Nlcl9hcHA%3D

其实该uri是bilibili APP的所支持的scheme之一,通过反编译其apk后,查看其AndroidManifest.xml,可以找到对应的Intent-filter定义,如下所示
这里写图片描述
如果没有对该uri作任何的拦截处理,WebView会默认加载该链接,出现找不到页面(白屏)。

解决方案

在WebViewClient的实现的shouldOverrideUrlLoading中支持bilibili://video/ uri的拦截,发起相应的intent,拉起Bilibili APP

TIPS分享

  • 查找这类问题可以直接用Chrome的Web Inspector功能,另外借助能更改UA的插件。更改UA的插件能更正实的模拟自己的WebView组件,尽可能的在Chrome上重现问题。 我目前使用的是 User-Agent Switcher for Chrome
  • Chrome的Web Inspector的网页(网站)代码的全局搜索功能是 (mac上是cmd + alt + F),方便搜索与定位“问题”代码
  • 排查Android WebView相关的排版问题,善用WebViewClient的shouldOverrideUrlLoading的回调(shouldOverrideUrlLoading在网页加载任何子页面,页面跳转都会回调),同时对页面的加载逻辑做拦截也是它的实现中。
    这里写图片描述
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值