webview
Posted 小#安
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了webview相关的知识,希望对你有一定的参考价值。
url加载方式:webView.loadUrl("http://139.196.35.30:8080/OkHttpTest/apppackage/test.html");
webViewClient:
webViewClient主要帮助webView处理各种通知,请求事件
webViewClient常用方法:
onPageStarted() 页面请求加载
onPageFinished() 页面请求完成
shouldOverriedUrlLoading 拦截url
onReceivedError() 404,访问错误时回调:回调的时候可加载错误页面
webViewChrome:
webViewChrome主要辅助webView处理 javascript 对话框,网站图标,网站title,加载进度等
webViewChrome常用方法:
onJSAlert webView 不支持js的alter弹框,需要自己监听然后通过dialog弹框
onReceivedTitle() 获取网页标题
onReceivedIcon() 获取网页icon
onProgressChanged() 加载进度回调
使用:https://blog.csdn.net/lowprofile_coding/article/details/77928614 onkeydown方法中返回true,防止直接退出webview
<uses-permission android:name="android.permission.INTERNET" />
err_unkonwn_url_scheme: 需要重写shouldoverrideurlloading()
https://blog.csdn.net/CSDN472651883/article/details/78951642
webkit引擎
webkit由4部分组成:WebKit Embedding API,WebCore,JavaScript Core,Platform API(WebKit Ports)
1.WebCore:渲染 负责对html解析,CSS解析,渲染UI,调试信息等部分。
主要从网页的 URL 到构建完 DOM 树,接着 从 DOM 树到构建完 WebKit 的绘图上下文,从绘图上下文到生成最终的UI图像。
2.JavaScriptCore:
操作步骤:
- get一个JSContext
- 处理结束某个JS调起的方法,如log
- 调用JS端执行某个JS方法
- 重定义某个JS端的方法
安卓基础核心类:
JavascriptInterface,javascriptInterface 提供一个JS引擎上的一个接口,和webview一起Android加载H5的重要组成部分
WebView:
Android Browser 用来主要完成webcode的功能
webviewclient:主要辅助webview处理各种响应请求事件
webviewclient.shouldOverrideUrlLoading:拦截所有webview的url跳转,开发者可自定义,其中有两个特别功能供JS交互
- WebChromeClient.onConsoleMessage():在web的JS中调用console.log("XXX")方法,Native中回调WebChromeClient.consoleMessage()方法,可以得到web中打印的console
- WebChromeClient.onJsPrompt():JS中调window.prompt(message,value), WebChromeClient.onJsPrompt()就会收到回调信息 提示信息
- WebChromeClient.onJsAlert():提示警告信息框
- WebChromeClient.onJsConfirm():展示确认信息
JavascriptInterface:由于之前谷歌webview存在漏洞,因此现在需要声明JavascriptInterface,避免黑客
两个接口::::每个webview对象仅绑定到一个实现
addJavascriptInterface(Object obj,String interfaceName)
removeJavascriptInterface(String interfaceName)
流程方法步骤:
- addJavascript时候只有Browser进程才有权限,否则抛异常
- WebViewProvider提供的这两个抽象方法实际上是WebViewFactoryProvider创建出来的具体WebViewChromiumFactoryProvider实现的。
- WebViewChromiumFactoryProvider创建WebViewChromium去实现。
- WebViewChromium 实现用创建AwBrowserProcess的来执行BrowserStartupController的执行Js的函数,这个函数是个JNI方法,
https://blog.csdn.net/sk719887916/article/details/86552854
以上是关于webview的主要内容,如果未能解决你的问题,请参考以下文章