webview的创建
为了防止webview内存泄漏,目前对webview内存的管理有两种模式
webview单独运行在一个进程中,在关闭的时候,直接杀掉整个进程即可
但是,中间涉及到进程间的通讯。使用代码new webview(Application),将新建webview放入容器中,在销毁的时候,将容器remove掉webview
android 与js通信
android 与js通信主要有一下几种方式
- JavascriptInterface()
这是android 提供的与js通信的官方api
webView.addJavascriptInterface(new JavascriptInterface(), “javascriptInterface”);
android 为js提供一个javaScriptInterface,里面预先写好给js调用的方法,但是在android 4.2一下,存在严重的安全漏洞,需要加上@JavascriptInterface
安全漏洞:主要是因为系统没有对注册java类方法的调用,使得攻击者可以通过反射机制,调用其他任何为注册的java类。
- 通过WebViewClient.shouldOverrideUrlLoading()
这个方法是拦截所有webview的url的跳转,页面可以构造特殊的url,shouldOverrideUrlLoading()拦截格式,进行相应的操作
3.通过WebChromeClient.onConsoleMessage()
js代码中调用console(xxx),android会在onConcoleMessage()中收到打印的消息,判断信息的格式,进行处理
4.WebChromeClient.onJsPrompt()
其实除了WebChromeClient.onJsPrompt(),还有WebChromeClient.onJsAlert()和WebChromeClient.onJsConfirm()。顾名思义,这三个Js给Native代码的回调接口的作用分别是展示提示信息,展示警告信息和展示确认信息。鉴于,alert和confirm在Js的使用率很高,所以JSBridge的解决方案中都倾向于选用onJsPrompt()。
java调用js
- webview.loadUrl("javascript: ")
2.webView.evaluateJavascript(javascript, valueCallback);
第一个方法是同步的,不建议使用,第二个方法只有在android 4.4之上使用,对于低版本需要兼容处理