写点什么

Android 开发:通过 webview 将网页打包成安卓应用,kotlin 编程实践 pdf

用户头像
Android架构
关注
发布于: 刚刚

try {


if (Build.VERSION.SDK_INT >= 16) {


Class<?> clazz = webView.getSettings().getClass();


Method method = clazz.getMethod("setAllowUniversalAccessFromFileURLs", boolean.class);


if (method != null) {


method.invoke(webView.getSettings(), true);


}


}


} catch (IllegalArgumentException e) {


e.printStackTrace();


} catch (NoSuchMethodException e) {


e.printStackTrace();


} catch (IllegalAccessException e) {


e.printStackTrace();


} catch (InvocationTargetException e) {


e.printStackTrace();


}


//webView.loadUrl("http://172.17.1.176:8082/");//加载 url


webView.loadUrl(API);


//使用 webview 显示 html 代码


// webView.loadDataWithBaseURL(null,"<html><head><title> 欢迎您 </title></head>" +


// "<body><h2>使用 webview 显示 html 代码</h2></body></html>", "text/html" , "utf-8", null);


webView.addJavascriptInterface(this, "android");//添加 js 监听 这样 html 就能调用客户端


webView.setWebChromeClient(webChromeClient);


webView.setWebViewClient(webViewClient);


WebSettings webSettings = webView.getSettings();


/**


  • LOAD_CACHE_ONLY: 不使用网络,只读取本地缓存数据

  • LOAD_DEFAULT: (默认)根据 cache-control 决定是否从网络上取数据。


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


  • LOAD_NO_CACHE: 不使用缓存,只从网络获取数据.

  • LOAD_CACHE_ELSE_NETWORK,只要本地有,无论是否过期,或者 no-cache,都使用缓存中的数据。


*/


webSettings.setCacheMode(WebSettings.LOAD_DEFAULT);//不使用缓存,只从网络获取数据.


webView.getSettings().setTextZoom(100);


webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);//设置 js 可以直接打开窗口,如 window.open(),默认为 false


webView.getSettings().setJavaScriptEnabled(true);//是否允许执行 js,默认为 false。设置 true 时,会提醒可能造成 XSS 漏洞


webView.getSettings().setSupportZoom(true);//是否可以缩放,默认


webView.getSettings().setBuiltInZoomControls(true);//是否显示缩放按钮,默认 false


webView.getSettings().setUseWideViewPort(true);//设置此属性,可任意比例缩放。大视图模式


webView.getSettings().setLoadWithOverviewMode(true);//和 setUseWideViewPort(true)一起解决网页自适应问题


webView.getSettings().setAppCacheEnabled(true);//是否使用缓存


webView.getSettings().setDomStorageEnabled(true);//DOM Storage


}


配置 WebviewClient


//WebViewClient 主要帮助 WebView 处理各种通知、请求事件


private WebViewClient webViewClient = new WebViewClient() {


@Override


public void onPageFinished(WebView view, String url) {//页面加载完成


//progressBar.setVisibility(View.GONE);


}


public void onPageStarted(WebView view, String url, Bitmap favicon) {//页面开始加载


//progressBar.setVisibility(View.VISIBLE);


}


@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)


@Override


public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {


Log.i("ansen", "拦截 url:" + request.getUrl());


return super.shouldOverrideUrlLoading(view, request);


}


};


//WebChromeClient 主要辅助 WebView 处理 Javascript 的对话框、网站图标、网站 title、加载进度等


private WebChromeClient webChromeClient = new WebChromeClient() {


//不支持 js 的 alert 弹窗,需要自己监听然后通过 dialog 弹窗


public boolean onJsAlert(WebView webView, String url, String message, JsResult result) {


AlertDialog.Builder localBuilder = new AlertDialog.Builder(webView.getContext());


localBuilder.setMessage(message).setPositiveButton("确定", null);


localBuilder.setCancelable(false);


localBuilder.create().show();


//注意:


//必须要这一句代码:result.confirm()表示:


//处理结果为确定状态同时唤醒 WebCore 线程


//否则不能继续点击按钮


result.confirm();


return true;


}


//获取网页标题


@Override


public void onReceivedTitle(WebView view, String title) {


super.onReceivedTitle(view, title);


Log.i("ansen", "网页标题:" + title);


}


//加载进度回调


@Override


public void onProgressChanged(WebView view, int newProgress) {


// progressBar.setProgress(newProgress);


}


};


@Override


public boolean onKeyDown(int keyCode, KeyEvent event) {


Log.i("ansen", "是否有上一个页面:" + webView.canGoBack());


if (webView.canGoBack() && keyCode == KeyEvent.KEYCODE_BACK) {//点击返回按钮的时候判断有没有上一页


webView.goBack(); // goBack()表示返回 webView 的上一页面


return true;


}


return super.onKeyDown(keyCode, event);


}


/**


  • JS 调用 android 的方法

用户头像

Android架构

关注

还未添加个人签名 2021.10.31 加入

还未添加个人简介

评论

发布
暂无评论
Android开发:通过 webview 将网页打包成安卓应用,kotlin编程实践pdf