学习内容如下
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>
好好学习天天向上。