接入的第三方网页需要实现下载的功能,前端同事不能直接介入修改,调用原生提供的下载接口。可以通过在网页加载结束,通过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);
网友评论