学习内容如下
1.向网页加载完毕以后注入js
2.利用js调用java的方法
3.也可以利用java调用js的方法
h5和app的交互越来越多。项目遇到到一个webview加载网页加载不全不知道怎么解决,一同事最后解决,点赞。
思路 1.我要知道网页的高度,动态设置webview的高度
2.怎么知道加载完以后网页的高度呢
3.需要js告诉app网页的高度即js调用app中的方法
private void initWebbiew() {
WebSettings webSettings = webview_aboutus.getSettings();
//设置WebView属性,能够执行Javascript脚本
webSettings.setJavaScriptEnabled(true);
//设置可以访问文件
webSettings.setAllowFileAccess(true);
//设置支持缩放
webSettings.setBuiltInZoomControls(true);
//用来处理一些html的页面内容
webview_aboutus.setWebViewClient(new webViewClient());
//丰富的处理效果,比如JS、进度条等
webview_aboutus.setWebChromeClient(new WebChromeClient());
// webview_aboutus.getSettings().setDefaultTextEncodingName("UTF -8");
}
/**
* 使用与API17以上
*
* @param context
*/
@SuppressLint("JavascriptInterface")
public void setDoWhatListener(Context context) {
// 添加js交互接口类,并起别名 appdowhat
JavascriptInterface javascriptInterface = new JavascriptInterface(context);
webview_aboutus.addJavascriptInterface(javascriptInterface, javascriptInterface.toString());
}
// 注入js函数监听
private void infoHtmoJS() {
// 这段js函数的功能就是,获取控件高度并传入值
//scrollContent 换成div
/**
* <div class="m-detail-dynamic">
* <section class="dynamic-content">
* <div id="content">
*/
webview_aboutus.loadUrl("javascript:(function(){" +
"var _height = document.body.offsetHeight;"
+ "window.appdowhat.appDoWhat(_height);"
+ "})()");
}
// js通信接口
public class JavascriptInterface {
private Context context;
public JavascriptInterface(Context context) {
this.context = context;
}
@android.webkit.JavascriptInterface
public void appDoWhat(int height) {
webview_aboutus.setLayoutParams(new LinearLayout.LayoutParams(DisplayUtil.getDensityWdith(context), (int) (height * DisplayUtil.getDensity(context))));
}
@android.webkit.JavascriptInterface
public String toString() {
return "appdowhat";
}
}
public class WebChromeClient extends android.webkit.WebChromeClient {
@Override
public void onProgressChanged(WebView view, int newProgress) {
if (newProgress == 100) {
// dismissDialog();
} else {
// showWaitDialog();
}
super.onProgressChanged(view, newProgress);
}
}
//Web视图
private class webViewClient extends WebViewClient {
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest st) {
view.loadUrl(st.getUrl().toString());
return true;
}
@Override
public void onPageFinished(WebView view, String url) {
view.getSettings().setJavaScriptEnabled(true);
super.onPageFinished(view, url);
// html加载完成之后,添加js函数
infoHtmoJS();
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
view.getSettings().setJavaScriptEnabled(true);
super.onPageStarted(view, url, favicon);
}
}
js调用app中的方法,但是不知道java调用js中的方法,怎么搞 搜索了下
public void javaCallJsNoParams(View view){
//直接加载(javascript:javaCallJsNoParamsMethod())
//javascript:方法名()
webView.loadUrl(javascript:javaCallJsNoParamsMethod());
}
public void javaCallJsHasParams(View view){
webView.loadUrl(javascript:javaCallJsHasParamsMethod(' + 123 + '));
}
<script>
function javaCallJsNoParamsMethod(){
alert("hello world!");
}
function javaCallJsHasParamsMethod(a){
alert('hello in android!');
}
</script>
好好学习天天向上。