2011-12-23 14 views
8

Nie można zrozumieć z instrukcji: jak właściwie uruchomić funkcję JS z Java?Jak uruchomić funkcję JavaScript z GWT Java z JSNI?

Na przykład, mam funkcję w mojej strony html:

<script type="text/javascript" language="javascript"> 
    function foo() { 
     alert('Foo!'); 
    } 
</script> 

Poniższy moduł zawiera dwa przyciski, jedynie drugi, który działa:

public class Test_GoogleWeb_JSNI_01 implements EntryPoint { 

public void onModuleLoad() { 

    Button fooButton = new Button("Foo!"); 
    fooButton.addClickHandler(new ClickHandler(){ 
     public void onClick(ClickEvent event) { 
      fooRunner(); 
     }; 
    }); 


    HTML fooButtonNative = new HTML(); 
    fooButtonNative.setHTML("<input type='button' value='Foo Native' onclick='foo()'>"); 

    RootPanel rootPanel = RootPanel.get(); 
    rootPanel.add(fooButton); 
    rootPanel.add(fooButtonNative); 

} 

public static native void fooRunner() /*-{ 
    foo(); 
}-*/; 
} 

Mówi się w podręczniku, że natywne funkcje zaimplementowane w ramce zagnieżdżonej, co wyjaśnia sytuację. Ale jak uruchomić funkcje JS?

AKTUALIZACJA 1 Następujące prace.

Java:

public static native void fooRunner() /*-{ 
    $doc.fooRunner(); 
}-*/; 

JS:

<script type="text/javascript" language="javascript"> 
    document.fooRunner = function foo() { 
     alert('Foo!'); 
    } 
</script> 

Czy istnieje lepszy sposób?

Odpowiedz

4

Sam odpowiedziałeś na swoje pytanie. Nie ma lepszego sposobu z bardzo prostego powodu: istnieje wiele sposobów wdrażania aplikacji GWT, a uruchamianie w elemencie iframe jest tylko jedną z opcji. Właśnie dlatego musisz użyć zmiennej $ wnd, aby uzyskać dostęp do zewnętrznej funkcji JS, więc w przypadku przełączenia linkera Twój wciąż działający kod będzie działał poprawnie.

+0

Czy można wywołać metodę javascrypt, która zwraca obiekt? i użyć tego obiektu? –

Powiązane problemy