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!

InformationsquelleAutor marco li | 2011-06-30
Schreibe einen Kommentar