private void initWebView() { WebSettings settings = wvResumeDetail.getSettings(); //支持JavaScript脚本语言 settings.setJavaScriptEnabled(true); //允许WebView访问文件数据 settings.setAllowFileAccess(true); // 支持内容缩放控制 settings.setBuiltInZoomControls(false); //编码格式 settings.setDefaultTextEncodingName("UTF-8"); //设置自适应屏幕 settings.setUseWideViewPort(true); settings.setLoadWithOverviewMode(true); settings.setCacheMode(WebSettings.LOAD_NO_CACHE); //设置可以使用 settings.setDomStorageEnabled(true); //应用可以有数据库 settings.setDatabaseEnabled(false); //应用可以有缓存 settings.setAppCacheEnabled(false); wvResumeDetail.setOnKeyListener(new View.OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && wvResumeDetail.canGoBack()) { wvResumeDetail.goBack(); return true; } return false; } }); wvResumeDetail.setWebViewClient(new WebViewClient() { @Override public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { } @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); } @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); } @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { if (url.contains("tel:")) { String mobile = url.substring(url.lastIndexOf("/") + 1); CommonUtil.call(context, mobile.substring(4, mobile.length())); //这个超连接,java已经处理了,webview不要处理了 return true; } else if (url.contains("mailto:")) { CallUtil.mail(context, url); } else { view.loadUrl(url); } return true; } }); wvResumeDetail.setWebChromeClient(new WebChromeClient() { @Override public void onReceivedTitle(WebView view, String title) { super.onReceivedTitle(view, title); //有的手机不走此方法,故在onPageFinished中也添加了设置 } /** 加载数据的进度变化 */ @Override public void onProgressChanged(WebView view, int newProgress) { if (pbResumeDetail != null) { if (newProgress != 100) { pbResumeDetail.setVisibility(View.VISIBLE); } pbResumeDetail.setProgress(newProgress); if (pbResumeDetail.getProgress() == 100) { final Timer timer = new Timer(); TimerTask task = new TimerTask() { public void run() { Message message = new Message(); message.what = 1; progressHandler.sendMessage(message); timer.cancel(); } }; timer.schedule(task, 500); } } super.onProgressChanged(view, newProgress); } /** 处理HTML的对话框 */ @Override public boolean onJsConfirm(WebView view, String url, String message, final JsResult result) { showDialog(message, result); return true; } }); //Android与Js的交互,js程序员会通过AndroidWebView标识返回事件 wvResumeDetail.loadUrl(url); wvResumeDetail.addJavascriptInterface(new JavaScriptInterface(this), "AndroidWebView"); } public class JavaScriptInterface { Context mContext; JavaScriptInterface(Context c) { mContext = c; } @JavascriptInterface public void setShareData(String data) { Evaluate evaluate = JsonUtil.fromJson(data, Evaluate.class); if (evaluate != null) { js2evaluate = evaluate; } } } private Handler progressHandler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); int msgId = msg.what; if (msgId == 1) { if (pbResumeDetail != null) { pbResumeDetail.setVisibility(View.GONE); } } } }; private void showDialog(String msg, final JsResult result) { AlertDialog.Builder builder = new AlertDialog.Builder(context); builder.setMessage(msg); builder.setTitle("提示"); builder.setPositiveButton("确认", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); result.confirm(); } }); builder.setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); result.cancel(); } }); builder.create().show(); } public static void startAction(Context context, String id) { Intent intent = new Intent(context, SuccessCaseDetailActivity.class); intent.putExtra("id", id); context.startActivity(intent); } }
Android与js交互,带进度条的加载H5页面
最新推荐文章于 2021-05-29 03:30:23 发布