2016-05-18 66 views
2

這是我的HTML頁面代碼:如何在webView,Android中使用@JavascriptInterface方法調用Javascript?

<script> 
    function native_callback() { 
     alert("Test") 
    } 
</script> 
<button onclick='native.appVersion()'>appVersion</button> 

正如你所看到的,只有一個按鈕,當我按一下按鈕,它會調用@JavascriptInterface方法appVersion()。我想要做的是在appVersion()方法中調用javascript函數native_callback()。不幸的是,我會捕獲一個java異常。

這裏是的WebView類的我的Java源代碼的一部分:

... // some other codes that not related 

getSettings().setJavaScriptEnabled(true); 
addJavascriptInterface(new InJavaScriptLocalObj(), "native"); 

... // some other codes that not related 

final class InJavaScriptLocalObj { 
@JavascriptInterface 
    public void appVersion() { 
     Log.i("JsInterface","Called!") 
     loadUrl("javascript:native_callback()"); 
    } 
} 

而且,我可以從網頁上捕捉到了異常:

Uncaught Error: Java exception was raised during method invocation -- From line 6 of http://my web page url

6號線是<button onclick='native.appVersion()'>appVersion</button>

順便說一句,鱈魚Log.i("JsInterface","Called!")已被調用,我可以看到日誌。

我該怎麼辦?

解決方案 實際上,它必須在另一個線程中調用,但與您的WebView對象相同。 這是我的代碼:

web_view.post(new Runnable() { 
     @Override 
     public void run() { 
      web_view.loadUrl("javascript:native_callback()"); 
     } 
    }); 

回答

3

如何使用處理程序? 我檢查了它在我的項目中效果很好。

Handler handler = new Handler(); 
handler.postDelayed(new Runnable() { 
    @Override 
    public void run() { 
     loadUrl("javascript:native_callback()"); 
    } 
}, 0); 
+0

是的,你是對的。它必須是另一個線程,但與webView相同的線程。而我使用這些:'web_view.post(新的Runnable(){@Override 公共 無效的run(){ web_view.loadUrl( 「JavaScript的:native_callback()」);} });' – KaKa

相關問題