Android

Android WebView对a标签的意图拦截并响应下载

2021-11-27  本文已影响0人  漆先生

接入的第三方网页需要实现下载的功能,前端同事不能直接介入修改,调用原生提供的下载接口。可以通过在网页加载结束,通过js代码修改a标签,加上拦截标识,点击相应事件拦截执行。

一、js代码修改a标签

实现WebViewClient的onPageFinished时,加载以下js代码拦截修改a标签

webView.loadUrl("javascript: var allLinks = document.getElementsByTagName('a'); if (allLinks) {var i;for (i=0; i<allLinks.length; i++) {var link = allLinks[i];var target = link.getAttribute('target'); if (target && target == '_blank') {link.href = 'newtab:'+link.href;link.setAttribute('target','_self');}}}");

二、拦截带标识的a标签

实现WebViewClient的shouldOverrideUrlLoading时,拦截带标识的A标签

if (url.startsWith("newtab:")) {
  //执行操作
   return true;
} else {
  //正常加载其它的标签
   return false;
}

三、下载

正在赶项目进度,采用的是直接用系统游览器下载的方案,可以用DownloadManager实现下载,还能用各自项目的网络框架进行下载

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.addCategory(Intent.CATEGORY_BROWSABLE);
intent.setData(Uri.parse(url.replace("newtab:", "")));
startActivity(intent);
上一篇下一篇

猜你喜欢

热点阅读