Как вызвать функцию JSNI из функции Javascript? - PullRequest
5 голосов
/ 14 февраля 2012

Вот примеры кнопок звонящего в html:

<input type='button' value='Call' onclick='Test()'>

А вот некоторые функции, которые я пробовал и которые не работали:

<script type="text/javascript">
    function Test() {
        com.tests.client.Test_GoogleWeb_JSNI::Callee()();
    }
</script>

Но мы не можем вызвать Callee (). Как мы можем этого добиться? Я имею в виду, как мы можем вызывать функцию JSNI из javascript?

Помощь будет оценена.

Ответы [ 3 ]

8 голосов
/ 14 февраля 2012

Это очень просто. Вам нужно «экспортировать» свою функцию, написанную в GWT (или это может быть другая функция JSNI).

Вот соответствующая документация: http://code.google.com/webtoolkit/doc/latest/DevGuideCodingBasicsJSNI.html#calling

Так в вашем случае:

В вашем коде GWT:

public static void Caller() /*-{ 
   ... 
}-*/

public static native void exportStaticMethod() /*-{
   $wnd.Callee =
      $entry(@com.tests.client.Test_GoogleWeb_JSNI::Callee());
}-*/;

Затем вы вызываете exportStaticMethod() где-нибудь, даже в вашем onModuleLoad. << ВЫ ДОЛЖНЫ ДЕЛАТЬ ЭТО </p>

Затем вы можете позвонить Callee() из рукописного кода JavaScript.

Ваш код для кнопки:

<input type='button' value='Call' onclick='$wnd.Callee();'>
1 голос
/ 18 декабря 2014

Для chrome вышеупомянутое решение работает, если я изменю onclick = '$ wnd.Callee () на onclick =' window.Callee (). Консоль браузера Chrome сообщает нам, что $ wnd не определен. $ wnd - это способ доступа к объекту окна браузера в JSNI.

Извините, я не могу просто оставить это как комментарий (недостаточно очков)

0 голосов
/ 14 февраля 2012

См. здесь :

  1. Убедитесь, что Test_GoogleWeb_JSNI.Callee() равно static.
  2. Назначьте функцию Callee () - объекту окна.
...