Android|WebView 禁止长按,限制非白名单域名的跳转层级

💡 原文中文,约1600字,阅读约需4分钟。
📝

内容提要

用户反馈称在隐私协议界面上可以跳转到百度搜索页面,希望所有操作保持在APP内。解决思路是禁用WebView的长按选择文字功能,允许白名单域名页面任意加载,非白名单域名页面通过白名单域名页面跳转,不再响应超链接。经测试达到了想要的效果。

🔎

延伸解读

长按搜索的隐患与禁用

在WebView中,长按选择文字会弹出系统菜单,其中“搜索”选项可能调用外部浏览器打开百度搜索,导致用户离开APP。禁用长按选择功能可消除这一入口,且对隐私协议等页面的正常浏览无影响。这是一种低成本、高收益的防护措施,尤其适用于需要严格限制跳转的场景。

白名单机制与跳转层级控制

通过设置域名白名单,允许白名单内的页面自由跳转,而非白名单页面仅能通过白名单页面跳转进入,且进入后无法再点击内部链接。这既满足了隐私协议中第三方链接的查看需求,又防止了用户通过多次跳转到达任意网站,实现了跳转层级的有效控制。

实现细节与兼容性考量

代码中通过setOnLongClickListener屏蔽长按菜单,并在shouldOverrideUrlLoading中判断请求域名是否在白名单内。对于非白名单域名,若WebView可回退且系统版本为LOLLIPOP及以上,则拦截跳转。这种实现兼顾了旧版本兼容性,但需注意白名单匹配逻辑应严谨,避免误放行。

❓

Q&A

如何解决WebView中长按选择文字的问题?

通过禁用WebView的长按选择文字功能,避免用户跳转到外部网站。

为什么要限制非白名单域名的跳转?

为了确保所有操作保持在APP内,避免用户通过隐私协议跳转到外部网站。

白名单域名的作用是什么?

白名单域名允许页面任意加载,确保用户在APP内的操作不被外部链接干扰。

如何实现对非白名单域名的限制?

通过代码设置白名单,并在WebViewClient中拦截非白名单域名的链接请求。

用户对隐私协议界面的反馈是什么?

用户希望所有操作保持在APP内,避免跳转到百度搜索等外部网站。

测试结果如何?

经过测试,禁用长按选择文字功能和限制跳转的方案达到了预期效果。

🏷️

标签

➡️

继续阅读