这个事情需要谁去做
先看文末再考虑这个方案合适不合适你
理论让来说应该是 web前端来做 是由生产方来处理的(这个H5页面是谁写的谁来做)不要说 android能处理这个问题 为什么你ios不能处理 或者 ios能处理 为什么你android 不能处理。
web前端(生产方)如何处理
通过请求的userAgent 就可以判断请求方的 类型 因为 android 的 webView ios的webView 类似组件 肯定是有一个区分的
Android端如何处理
参考博客:https://blog.csdn.net/qq_32452623/article/details/52214460
下面的图也是借用上面博客里面的
我们通过 右键查看网页源码 就可以看到上面的类似的图的 所以说 html 的上下文 document 我这是这样认为了 就像android中的context一样
document.getElementsByTagName("") 这个可以拿标签
document.getElementsByClassName("") 可以拿标签上的class 属性
所以通过上面的 document的解释 我们是可以获取一个链接里面的指定标签的
Android webView的处理
WebView webView = (WebView) findViewById(R.id.webview);
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setUseWideViewPort(true);
webSettings.setLoadWithOverviewMode(true);
webView.loadUrl("http://www.lymidas.com/Home/DataCenter?currentId=1");
webView.setWebViewClient(new WebViewClient(){
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
//编写 javaScript方法
String javascript = "javascript:function hideOther() {" +
"document.getElementsByTagName('body')[0].innerHTML;" +
"document.getElementsByTagName('div')[0].style.display='none';" +
"document.getElementsByTagName('div')[3].style.display='none';" +
"document.getElementsByClassName('dropdown')[0].style.display='none';" +
"document.getElementsByClassName('min')[0].remove();" +
"var divs = document.getElementsByTagName('div');" +
"var lastDiv = divs[divs.length-1];" +
"lastDiv.remove();" +
"document.getElementsByClassName('showme')[0].remove();" +
"document.getElementsByClassName('nei-t3')[1].remove();}";
//创建方法
view.loadUrl(javascript);
//加载方法
view.loadUrl("javascript:hideOther();");
}
});
一个好用的三方库 ByWebView的处理也是一样的
https://github.com/youlookwhat/ByWebView
byWebView = ByWebView
.with(this)
.setOnByWebClientCallback(object : OnByWebClientCallback() {
override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) {
super.onPageStarted(view, url, favicon)
}
override fun onPageFinished(view: WebView?, url: String?) {
super.onPageFinished(view, url)
// https://blog.csdn.net/qq_32452623/article/details/52214460 //处理办法
//编写 javaScript方法
// val javascript = "javascript:function hideOther() {" +
// "var headers = document.getElementsByTagName('head');" +
// "var lastHeader = headers[headers.length-1];" +
// "lastHeader.remove();" +
// "var divs = document.getElementsByTagName('nav');" +
// "var lastDiv = divs[divs.length-1];" +
// "lastDiv.remove();" +
// "}"
// //创建方法
// view!!.loadUrl(javascript)
// //加载方法
// view!!.loadUrl("javascript:hideOther();")
}
override fun isOpenThirdApp(url: String?): Boolean {
return super.isOpenThirdApp(url)
}
override fun onReceivedSslError(
view: WebView?,
handler: SslErrorHandler?,
error: SslError?
): Boolean {
return super.onReceivedSslError(view, handler, error)
}
})
.setWebParent(web_view_container_common, LinearLayoutCompat.LayoutParams(-1, -1))
.useWebProgress("#ffb6cf", "#ff0000", 2) // 进度条渐变色(开始颜色,结束颜色,高度)
.loadUrl(urlStr)
在 onPageFinished里面操作就ok了
image.png
image.png image.png
网友评论