GWT を使用して Web アプリケーションを構築しています。GWT で記述されたアプリ コアとやり取りする Javascript API を使用して、ユーザーがその機能を拡張できるようにしたいと考えています。基本的に、この JS API は、実際の仕事を行ういくつかの GWT 内部メソッドにマップされます。
したがって、これを達成するために、GWT JSNI の公式ドキュメントで、GWT からグローバル JS 変数を作成し、実際の GWT メソッドへの呼び出しを割り当てるトリックを読みました。次に、この変数を介して手書きの JS コードで呼び出しを行います。
残念ながら、私はそれを機能させることができませんでした(例には構文エラーが含まれていたので、テストさえされているかどうかわかりません)。さらに調査を行ったところ、このサイトで、呼び出しを行う匿名関数に JS var を割り当てる同様のソリューションが見つかりました。次のようになります。
/*GWT code that assigns the anonymous function*/
private static native void loadWrapper() /*-{
$wnd.showMessage =
$entry(@com.Glob3Mobile.client.TestApi::msgBox());
}-*/;
public static void msgBox() {
Window.alert("hello");
}
このソリューションは有望に見えますが、機能させることができませんでした。「window.showMessage();」を実行すると 私の手書きの JS コードでは動作しません。私はこれらの問題を発見しました:
- window.showMessage が作成されたようですが、DOM ツリーを調べて、変数に関数が含まれていることを確認したにもかかわらず、JS コンソールには関数ではないと表示されます。
- 「ウィンドウ」を常に追加する必要があるようです。var は window オブジェクト内で作成されているためです。これは非常に懸念される問題です。ユーザーが関数を呼び出すたびにこのように書くことを強制するのは本当に面倒です。
これらの問題の解決策 (または、私がやろうとしていることを達成するための別のアプローチ) を知っている人がいれば、聞いてとても感謝しています。前もって感謝します。