webview與js互動在targetsdkversion設定為19的時候出現的問題
阿新 • • 發佈:2019-01-02
轉自:http://blog.csdn.net/kaka123ac/article/details/42871441
1.在WebView中呼叫js,在4.4(target = 19)之前,只有一種方法:
呼叫js方法 test()webView.loadUrl("javascript:test()"); 注意,必須在主執行緒中呼叫,如果在非UI執行緒呼叫,可能會出錯。所以,一般這樣呼叫。
- handler.post(
- new Runnable() {
-
webView.loadUrl("javascript:test()");
- }
- );
2.evaluateJavacript()方法呼叫js 在4.4及以後的版本中,採用第一種方法則會出現問題。理論上,loadUrl()方法只支援單行js的執行,但是在target=19及以後,該方法可能會不起作用。所以必須採用如下方法執行js:
- webView.evaluateJavascript("test()", new ValueCallback<String>() {
- @Override
-
publicvoid onReceiveValue(String arg0) {
- }
- });
同樣,evaluateJavascript()方法也必須在UI主執行緒執行。 3.@JavacriptInterface註解 在編寫html5應用時,需要在js程式碼中訪問java中的函式,則會用到WebView的addJavascriptInterface()函式。因為安全問題,在target=17及以上時,只能訪問帶有@JavascriptInterface註解的函式。之前,任何public的函式都可以在js程式碼中訪問,其中的getClass()函式也能被訪問到,然後js可以通過反射來訪問其他一些內容。通過引入該註解,則在js中只能訪問有該註解的函式,這樣可以增強安全性。