3

GWT アプリケーションで (Google ビジュアライゼーションを使用するために) Google の JavaScript API を使用しようとしていますが、JSNI で Google オブジェクトを参照するのに問題があります。「Google が定義されていません」という JavaScript エラーが発生します。

このための GWT ラッパー API があることは承知していますが、必要な機能がありません。ここのすべての提案に従いました: GWT で Google の視覚化 API を使用しますが、まだこのエラーが発生します。

次の行を gwt.xml ファイルに追加しました。

<script src="https://www.google.com/jsapi"></script>

どこに付ければいいのかわからないので、メインタグの下に追加しました。他のスタックの質問は、それを追加してHTMLに追加するように言ったので、これが彼らの意図したものだと思います。

これは、「google is not defined」エラーを生成している、私が呼び出している簡素化されたネイティブ メソッドです。

public static native void nativeJavaScriptFunction() /*-{
    google.load('visualization', '1.0', {
        'packages' : [ 'corechart' ]
    });
}-*/;

また、Google を「$wnd.google」および「$doc.google」として参照してみました。GWT 2.5.1 の最新バージョンを使用しています。他の誰かが、JSNI メソッドで動作し、参照されている JavaScript API を持っていますか?

4

2 に答える 2

2

ホスト ページにスクリプト タグを追加する代わりに、次のように ScriptInjector を使用できます。

ScriptInjector
    .fromUrl("http://api.elsevier.com/javascript/scopussearch.jsp")
    .setCallback(new Callback<Void, Exception> () {
        @Override
        public void onFailure(Exception reason) {
            throw new UnsupportedOperationException("FAILURE to inject Scopus API !!!");
        }

        @Override
        public void onSuccess(Void result) {
            System.out.println("Elsevier scopus search API successfully injected...");
        }
    }).setWindow(ScriptInjector.TOP_WINDOW).inject();

その後、挿入された API を JSNI 経由で正常に使用できるようになります。

于 2013-09-04T16:08:52.363 に答える
0

私は解決策を考え出しました。まず第一に、そのスクリプト タグを gwt.xml ファイルに追加したくありませんでした。アプリにメインの HTML ファイルがあることに気づきませんでした。これを head タグに追加しました。

<script type="text/javascript" src="https://www.google.com/jsapi" ></script>

これで、$wnd.google を介して JNSI の google オブジェクトを参照できました。ただし、実際のロードコールにはまだ問題がありました。ページがクリアされ、ハングするだけでした。GWT ラッパー API の VisualationUtils から取得したこのコードを API にロードしてみることにしました。

AjaxLoaderOptions options = AjaxLoaderOptions.newInstance();
options.setPackages("corechart");
AjaxLoader.loadApi("visualization", "1", new Runnable() {
    @Override
    public void run() {
        jsniCall();
}

これでうまくいきました。JSNI メソッドで API を読み込めない理由を知りたいのですが、これでうまくいきます。

于 2013-09-03T18:42:49.183 に答える