ブラウザプラグインをコーディングしました。'mycustomevent'のようなカスタムイベントを発生させます。これらのカスタムイベントをGWTに組み込む(つまり、リスナーを割り当てる)必要があります。これがGWTのプラグインクラスです。
class PluginObject extends Composite implements HasMyCustomEventHandler{
private Element plugin;
private HTML html;
private HandlerManager handlerManager;
public PluginObject(){
handlerManager = new HandlerManager(this);
html = new HTML("<object id='plugin0' type='application/x-ourplugin' width='300' height='300'>"
+"<param name='onload' value='pluginLoaded' />"
+"</object>");
initWidget(html);
plugin = html.getElement().getFirstChildElement();
}
}
これが私のビューに追加する方法です(私はgwtpを使用しています)。これは追加されており、ページで正しく機能しています。JSNIを使用してgwtからjs関数を呼び出すことができます。
@Inject
public MyPageView(){
...
plugin = new PluginObject();
panel.add(plugin);
}
プラグインから発生したイベントにハンドラーを割り当てることができる必要があります。プレゼンターで次のことができるようにしたいと思いますが、これまでのところ、接続することができませんでした。
@Override
protected void onBind(){
super.onBind();
registerHandler(getView().getPluginObject().addMyCustomEventHandler(
new MyCustomEventHandler() {
@Override
public void onMyCustomEvent(MyCustomEvent event) {
// call some other presenter stuff here...
}
}));
}
上記はいくつかの追加のクラスに言及しています。MyCustomEventクラスを定義し、EventHandlerを拡張するMyCustomEventHandlerインターフェイスを定義し、HasHandlersを拡張するHasMyCustomEventHandlerインターフェイスを定義しましたが、それらをすべて接続しても何も得られません。簡潔にするためにそれらを省略しました。役立つ可能性のあるものを追加していただければ幸いです。
ベアJavaScriptでイベントリスナーを追加できます。
obj.addEventListener("mycustomevent", function(){ foo(); }, false);
毎回イベントをキャッチし(foo()が呼び出されます)、イベントが発生していると確信しています。
PluginObjectクラスに以下を追加しようとしましたが、これは検索で見つけたものから推測したものです。動作していません。
public HandlerRegistration addMyCustomEventHandler(MyCustomEventhandler handler){
return handlerManager.addHandler(MyCustomEvent.TYPE, handler);
}
ここでの適切なアプローチは何ですか?