私は現在 GWT プロジェクトに取り組んでおり、外部 JavaScript ファイルで使用する必要があります。現在、両方が正常に動作することを確認するためのテスト プロトタイプを作成しています。
実行してコンパイルすると、呼び出されたイベントからブラウザにコンソール ログが表示されます。ただし、GWT Java メソッドは呼び出されていません。
$entry
多くのシナリオを試した後、からラッパーを削除するexportStaticMethods()
と、逆のことが起こることにも気付きました。System.out
Java コードで s が呼び出されているのがわかりますが、ブラウザの JavaScript からのコンソール ログは呼び出されていません。
動作の原因を突き止めようとしていますが、見落とした小さな欠けている部分がある場合は.
js から Java メソッドを呼び出すための GWT JSNI ドキュメントを既に確認し、StackOverflow に関する他の関連する質問から解決策を見つけようとしました。
GWT と Java 側
onModuleLoad()
クラスのメソッドに入り、EntryPoint
という静的メソッドを追加しましたexportStaticMethods()
。PokePingClass.java
以下のファイルも作成しました。
EntryPointClass.java
public class EntryPointClass implements EntryPoint {
@Override public void onModuleLoad() {
exportStaticMethods();
// load application here.
}
public static native void exportStaticMethods() /*-{
$wnd.pingApp = $entry((function) {
@com.application.PokePingClass::pingApp()();
});
$wnd.pokeApp = $entry((function) {
@com.application.PokePingClass::pokeApp()();
});
}-*/
}
PokePingClass.java
public class PokePingClass {
public static void pokeApp() {
System.out.println("pokeApp() called");
}
public static void pingApp() {
System.out.println("pingApp() called");
}
}
HTMLとjs
.html
プロジェクトのファイルに、ファイルdiv
と同様にid「pokePing」の隠し要素を追加しましたpokeping.js
。
<html>
<head>
.
. <!-- other stuff -->
.
<script type='text/javascript' src='pokeping.js</script>
</head>
<body>
.
. <!-- other stuff -->
.
<div id="pokePing" style="visibility: hidden;"></div>
</body>
</html>
pokeping.js
$(document).ready(function) {
var $pp = $('#pokePing');
var pokeApp = function() {
console.log("app handling poke event");
window.parent.pokeApp();
}
var pingApp = function() {
console.log("app handling ping event");
window.parent.pingApp();
}
$pp.trigger('pokeApp');
$pp.trigger('pingApp');
}