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