Как использовать WebView.addJavascriptInterface для связывания Java-класса с форматом функции javascript как «ABfunc ()» - PullRequest
1 голос
/ 30 июня 2011

Я хочу поддержать некоторый самоопределяемый интерфейс JavaScript с форматом "ABfunc ()" в активности моего приложения WebView.

Вот пример

HTML-код js веб-страницы такой:

<html>
    <body>
        <script type="text/javascript">
            document.write("B.func1() return " + A.B.func());
        </script>
    </body>
</html>

И мой код Java такой:

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() {}
    }
}

Но когда я запускаю свое приложение на симуляторе, оно не может работать в правильном направлении.И LogCat отправляет мне предупреждение, такое как: TypeError : Result of expression 'A.B' [undefined] is not an object. at file:///android_asset/mydemo.html

Так что мой вопрос:
1. Если я хочу привязать формат интерфейса JavaScript как «ABfunc ()» к моему классу Java, какЯ делаю это?
2. Если я хочу получить свойство класса javascript напрямую, а не путем вызова функции, как я могу это сделать?образец javascript для демонстрации Q2 используйте "var prop = A.property" not use "var prop = A.getProperty ()"

Ожидайте вашей помощи!Спасибо!

Ответы [ 2 ]

3 голосов
/ 16 августа 2013

Eclispe показать сообщение в LogCat «Uncaught TypeError: Object [object Object] не имеет метода« toast »». Но в телефоне все работает успешно ...

<script>
    function doHemant() {
       jse.doThis();
    }
</script>

<input type="button" value="Toast" onClick="doHemant();" /> <br />

wv.addJavascriptInterface(new JavaScriptExtensions(), "jse");

class JavaScriptExtensions 
{ 
    public void doThis() 
    {
       Toast.makeText(MainActivity.this, "Wata Toast...", TOAST_LONG).show();
    }
}
3 голосов
/ 07 июля 2011

Не думаю, что ты можешь.Вы можете просто добавить методы в A, такие как b_doSomething () {B.doSomething ()}, чтобы «переадресовывать» ваши вызовы и вызывать их из javascript.

Что касается доступа к свойствам, я не уверен, что это возможно, интерфейс Javascript создан для вызова методов (я думаю, во многом как обычный интерфейс Java).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...