0

com.smartgwt.client.VersionSmartGWT を使用していますが、JavaScriptからアクセスしたいと考えています。Firefox の Web コンソールで、次のことを試しました。

frames[0].$entry(Lcom_smartgwt_client_Version::getVersion()));

frames[0].$entry(@com.smartgwt.client.Version.getVersion());

frames[0].$entry(@com.smartgwt.client.Version::getVersion());

frames[0].$entry(@com.smartgwt.client.Version::getVersion()());

しかし、それらはすべて構文エラーを返します。

SmartGWT は私の WAR と共にデプロイされており、単にframes[0].

この静的 Java メソッドを呼び出す正しい構文は何ですか?

4

1 に答える 1

6

これらの JSNI 参照は、Java ファイル内の JSNI コード以外では機能しません。JSNI の Java メソッドおよびフィールドへの参照は、実際には有効な JavaScript ではありませんが、これらのネイティブ メソッドが Java と JavaScript の両方を使用できるようにするための JSNI 言語の一部です。JSNI 文字列@com.smartgwt.client.Version::getVersion()()は、PRETTY のよう$getVersion1()に書き換えられるか、OBF モードでは 1 文字か 2 文字の長さに書き換えられるため、そのメソッド名が同じであることに依存することはできません。

代わりに、この外部 JavaScript が呼び出せるように、アプリケーション内から JavaScript 関数をエクスポートする必要があります。これに関する具体的な詳細については、https://developers.google.com/web-toolkit/doc/latest/DevGuideCodingBasicsJSNI#callingをご覧ください。

アプリケーションでこれがどのように見えるかの例を次に示します。

public native void exportGetVersion() /*-{
  $wnd.getSmartGwtVersion = $entry(function() {
    return @com.smartgwt.client.Version::getVersion()();
  });
}-*/;

アプリのどこかでこの関数を呼び出して、関数をエクスポートしてください。それが呼び出された後はいつでもgetSmartGwtVersion()、通常の JavaScript から呼び出すことができます。framesまたはを使用する必要はありません$entry

于 2013-04-03T19:19:38.210 に答える