2016-05-18 21 views
2

Hier ist meine HTML-Seite Codes:So rufen Sie Javascript von @JavascriptInterface-Methode in WebView, Android?

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

Wie Sie sehen können, gibt es nur eine Taste, und wenn ich auf die Schaltfläche klicken, wird es die @JavascriptInterface Methode appVersion() nennen. Was ich tun möchte, ist die JavaScript-Funktion native_callback() in der appVersion() Methode aufrufen. Leider werde ich eine Java-Ausnahme abfangen.

Und hier ist ein Teil meines Java-Quellcodes von WebView Klasse:

... // 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()"); 
    } 
} 

Und ich die Ausnahme von Web-Seite fangen:

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

Line 6 ist <button onclick='native.appVersion()'>appVersion</button>.

BTW, die cods Log.i("JsInterface","Called!") wurde aufgerufen, ich kann das Protokoll sehen.

Was soll ich tun?

Lösung Eigentlich muss es in einem anderen Thread aber dasselbe wie Ihr WebView-Objekt aufgerufen werden. Hier sind meine Codes:

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

Antwort

3

Wie wäre es mit Handler? Ich habe überprüft, es funktioniert gut in meinem Projekt.

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

Ja, Sie haben Recht. Es muss ein anderer Thread sein, aber der gleiche Thread mit webView. Und ich bin mit diesen: 'web_view.post (new Runnable() { @Override public void run() { web_view.loadUrl ("javascript: native_callback()");} });' – KaKa

Verwandte Themen