webview的創(chuàng)建
為了防止webview內(nèi)存泄漏,目前對webview內(nèi)存的管理有兩種模式
webview單獨運行在一個進(jìn)程中漏隐,在關(guān)閉的時候磅摹,直接殺掉整個進(jìn)程即可
但是秧骑,中間涉及到進(jìn)程間的通訊。使用代碼new webview(Application),將新建webview放入容器中蠕蚜,在銷毀的時候尚洽,將容器remove掉webview
android 與js通信
android 與js通信主要有一下幾種方式
- JavascriptInterface()
這是android 提供的與js通信的官方api
webView.addJavascriptInterface(new JavascriptInterface(), “javascriptInterface”);
android 為js提供一個javaScriptInterface,里面預(yù)先寫好給js調(diào)用的方法,但是在android 4.2一下靶累,存在嚴(yán)重的安全漏洞腺毫,需要加上@JavascriptInterface
安全漏洞:主要是因為系統(tǒng)沒有對注冊java類方法的調(diào)用,使得攻擊者可以通過反射機制挣柬,調(diào)用其他任何為注冊的java類潮酒。
- 通過WebViewClient.shouldOverrideUrlLoading()
這個方法是攔截所有webview的url的跳轉(zhuǎn),頁面可以構(gòu)造特殊的url,shouldOverrideUrlLoading()攔截格式,進(jìn)行相應(yīng)的操作
3.通過WebChromeClient.onConsoleMessage()
js代碼中調(diào)用console(xxx),android會在onConcoleMessage()中收到打印的消息邪蛔,判斷信息的格式急黎,進(jìn)行處理
4.WebChromeClient.onJsPrompt()
其實除了WebChromeClient.onJsPrompt(),還有WebChromeClient.onJsAlert()和WebChromeClient.onJsConfirm()侧到。顧名思義勃教,這三個Js給Native代碼的回調(diào)接口的作用分別是展示提示信息,展示警告信息和展示確認(rèn)信息床牧。鑒于荣回,alert和confirm在Js的使用率很高,所以JSBridge的解決方案中都傾向于選用onJsPrompt()戈咳。
java調(diào)用js
- webview.loadUrl("javascript: ")
2.webView.evaluateJavascript(javascript, valueCallback);
第一個方法是同步的心软,不建議使用,第二個方法只有在android 4.4之上使用著蛙,對于低版本需要兼容處理