2011-12-23 7 views
8

マニュアルから実際にJavaからJS関数を実行する方法を理解できませんか?JSNIでGWT JavaからJavaScript関数を実行するにはどうすればいいですか?

例えば、私は私のhtmlページに機能を持っている:

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

次のモジュールが動作するだけで二そのうち2つのボタンを示していますことを、それはマニュアルに言われ

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(); 
}-*/; 
} 

をネストされたフレーム内で実装されたネイティブ関数。状況を説明します。しかし、JS関数を実行する方法は?

更新1 次のような作業です。

のJava:

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

JS:

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

は、より良い方法はありますか?

答えて

4

ご自身でご質問にお答えしました。非常に簡単な理由から、GWTアプリを導入する方法は複数ありますが、iframeで実行するのはその1つのみです。そのため、外部のJS関数にアクセスするために$ wnd変数を使用する必要があります。リンカを切り替えると、スチルコードはうまく動作します。

+0

オブジェクトを返すjavascryptメソッドを呼び出すことはできますか?そのオブジェクトを使用しますか? –

関連する問題