1. 程式人生 > >webview與js互動在targetsdkversion設定為19的時候出現的問題

webview與js互動在targetsdkversion設定為19的時候出現的問題

轉自:http://blog.csdn.net/kaka123ac/article/details/42871441

1.在WebView中呼叫js,在4.4(target = 19)之前,只有一種方法:

     呼叫js方法 test()
     webView.loadUrl("javascript:test()");      注意,必須在主執行緒中呼叫,如果在非UI執行緒呼叫,可能會出錯。所以,一般這樣呼叫。
  1. handler.post(  
  2.       new Runnable() {  
  3.            webView.loadUrl("javascript:test()");  
  4.       }  
  5.  );  


2.evaluateJavacript()方法呼叫js 在4.4及以後的版本中,採用第一種方法則會出現問題。理論上,loadUrl()方法只支援單行js的執行,但是在target=19及以後,該方法可能會不起作用。所以必須採用如下方法執行js:
  1. webView.evaluateJavascript("test()"new ValueCallback<String>() {                       
  2.       @Override
  3.       publicvoid onReceiveValue(String arg0) {  
  4.      }  
  5. });  

     同樣,evaluateJavascript()方法也必須在UI主執行緒執行。 3.@JavacriptInterface註解 在編寫html5應用時,需要在js程式碼中訪問java中的函式,則會用到WebView的addJavascriptInterface()函式。因為安全問題,在target=17及以上時,只能訪問帶有@JavascriptInterface註解的函式。之前,任何public的函式都可以在js程式碼中訪問,其中的getClass()函式也能被訪問到,然後js可以通過反射來訪問其他一些內容。通過引入該註解,則在js中只能訪問有該註解的函式,這樣可以增強安全性。