Wie zu verwenden WebView.addJavascriptInterface zu binden java-Klasse mit der javascript-Funktion " format "A. B. func()"
Möchte ich unterstützen, sich selbst zu definieren, JavaScript-Schnittstelle im format "A. B. func()" auf meine app-WebView-Aktivität.
Hier ist ein Beispiel
Die web-Seite der html&js-code ist wie:
<html>
<body>
<script type="text/javascript">
document.write("B.func1() return " + A.B.func());
</script>
</body>
</html>
Und mein java-code wird wie:
public class MyDemo extends Activity {
private WebView mWebView;
public void onCreate(Bundle savedInstanceState) {
...
mWebView = (WebView)findViewById(R.id.webView1);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.addJavascriptInterface(new AClass(), "A");
mWebView.loadUrl("file:///android_asset/mydemo.html");
}
final class AClass {
final class BClass {
BClass() {}
int func() { return 1; }
}
public BClass B = new BClass();
AClass() {}
}
}
Aber wenn ich meine app auf dem simulator kann nicht ausgeführt werden auf die richtige Art und Weise. Und die LogCat Ausgabe der Warnung zu mir, wie:
TypeError : Result of expression 'A.B' [undefined] is not an object. at file:///android_asset/mydemo.html
Also meine Frage ist:
1. wenn ich will, zu binden javascript-interface-format "A. B. func()" zu meiner java-Klasse, wie kann ich es tun?
2. wenn ich will, um javascript-Klasse, die die Eigenschaft direkt, nicht durch die Funktion aufrufen, wie kann ich es tun?
ein javascript-Beispiel, um zu zeigen, Q2
verwenden Sie "var prop = A. Eigentum"
kein "var prop = A. getProperty()"
Erwarten Ihre Hilfe! Danke!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube nicht, dass Sie können. Man könnte nur hinzufügen, dass Methoden in Einer, wie b_doSomething(){B. doSomething()} um den "vorwärts" Ihre Anrufe, und nennen diejenigen, die von javascript.
Als für den Zugriff auf Eigenschaften, ich bin nicht sicher, es ist möglich, das Javascript-Interface für den Aufruf von Methoden (ziemlich viel wie eine normale Java-Schnittstelle, die ich denke).
Eclispe Meldung im LogCat "Uncaught TypeError: Object [object object] has no method 'toast'". Aber im Handy ist es erfolgreich funktioniert...