前言:
学习rn已经有大半年了,目前的项目是采用rn的,在项目中曾遇到webview中调用postMessage,然后在浏览器和真机中查看,发现在浏览器中会报错,后者不会报错,然后觉得很奇怪,因此就去粗略的研究了一下rn中webview的实现。由于webview涉及很多东西,所以这一篇写介绍一下安卓的webview,下篇再继续介绍ios的webview。
介绍:
webview主要是用来进行页面请求,页面加载,页面渲染,页面交互等处理,而安卓对于webview是没有区分UIWebview和WKWebview,而是直接采用webkit内核的wkwebview。
webview的工具类:
websetting:
作用:主要使用来设置和管理webview;
获取WebSettings实例:
// 添加访问网络权限(AndroidManifest.xml)
// 创建webview实例
Webview webview = new WebView(this);
// 创建webSettings实例
WebSettings websettings = webview.getSettings();
WebSettings常用方法:
webviewclient:
作用:处理各种通知 & 请求事件;
shouldOverrideUrlLoading:该方法主要是在请求url的时候触发该事件,该事件会根据返回值来决定是否拦截url请求;如果返回true则会不让webview处理该url,而是交给系统来自行处理该url的请求,如果返回的是false,则会不做拦截,直接由webview来处理加载url。
onPageStarted:页面资源开始加载,此时可以做一个loading操作。
onPageFinished:页面资源加载结束时触发,此时可以关闭loading操作。
onLoadResource:页面请求或者加载资源时出错会触发。
webChromeClient:
作用:辅助 WebView 处理 Javascript 的对话框,网站图标,网站标题等等。
onProgressChanged(WebView view, int newProgress):获取网页的加载进度并且展示出来。
onReceivedTitle(WebView view, String title):获取网页的title。
onJsAlert,onJsConfirm,onJsPrompt:支持js的警告窗,确认窗和输入窗。