现在全局搜索需要加入这个功能,然而返回的地址却是带有头部百度和搜索框的,这些本来是可以通过tradeid进行客制化去掉,但是百度没抽出人来做,所以需要自己处理。
如果我们在webview中的WebViewClient里的OnPageFinished方法中做的话会出现闪屏,而且调用时机也可能会延迟,造成打开页面后隔了几秒才隐藏网页头部,显然不是我们要的效果,而OnPageStarted方法调用隐藏也没用。后面找到WebChromeClient的onProgressChanged进行处理
setWebChromeClient(new WebChromeClient() {
@Override
public void onReceivedTitle(WebView view, String title) {
super.onReceivedTitle(view, title);
}
@Override
public void onProgressChanged(WebView view, int newProgress) {
super.onProgressChanged(view, newProgress);
hideHeader(view, "");
}
})
比如在Agentweb中:
AgentWeb.with(this).setAgentWebParent(mLL, new LinearLayout.LayoutParams(-1, -1))
.useDefaultIndicator().setWebViewClient(new WebViewClient() {
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
}
}).setWebChromeClient(new WebChromeClient() {
@Override
public void onReceivedTitle(WebView view, String title) {
super.onReceivedTitle(view, title);
}
@Override
public void onProgressChanged(WebView view, int newProgress) {
super.onProgressChanged(view, newProgress);
hideHeader(view, "");
}
}).createAgentWeb().ready().go(videoUrl + getKeyword());
附上我这的js隐藏头部的代码:
private void hideHeader(WebView view, String url) {
String javascript = "javascript:function hideHeader() { "
+ "console.log('head.........................:', document.head);\n" +
"var new_element = document.createElement(\"style\");\n" +
"new_element.innerHTML =(`.se-page-hd-content { display: none!important; }`);\n" +
"document.head.appendChild(new_element);"
+ "}";
view.loadUrl(javascript);
view.loadUrl("javascript:hideHeader();");
}
即可在不闪屏刷新webview的情况下去掉头部,原生webview也一样。