1

JSNI で Google マップを使用しようとしていますが、次のコード スニペットで例外がスローされます。

com.google.gwt.core.client.JavaScriptException: (TypeError): $wnd.google.maps.LatLng は com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:248) のコンストラクタではありません。 ....

ここで何が問題なのかを指摘するのを手伝ってくれる人はいますか?

@Override
public void init(final Point center, final int zl)
{
    ScriptInjector
            .fromUrl(   "http://maps.googleapis.com/maps/api/js?sensor=false&language="
                                + Cookies.getCookie(LocaleInfo.getLocaleCookieName()))
            .setWindow(ScriptInjector.TOP_WINDOW).setCallback(new Callback<Void, Exception>()
            {
                public void onFailure(Exception reason)
                {
                    // I18N
                    Window.alert("load google maps api failed,all map function will not work.");
                }

                public void onSuccess(Void result)
                {
                    map = initMap(getElement(), center.getLatitude(), center.getLongitude(), zoomLevel = zl);
                }
            }).inject();
}

native JavaScriptObject initMap(Element canvas, double latitude, double longitude, int zoomLevel) /*-{
    return new $wnd.google.maps.Map(canvas, {
        zoom : zoomLevel,
        center : new $wnd.google.maps.LatLng(latitude, longitude),
        mapTypeId : $wnd.google.maps.MapTypeId.ROADMAP
    });
}-*/;
4

2 に答える 2

0

の 3 番目のオプションのブール値パラメーターを渡してみてくださいnoWrap。おそらく、DevMode でバグが発生している可能性があります。アプリがデプロイされたら、同じコードを実行してみましたか?

于 2012-02-08T10:30:33.393 に答える
0

MAP API は、最初の JavaScript ライブラリが読み込まれた後に、他の JavaScript ライブラリを挿入しています。

ページの読み込み後に Map API を読み込むために、Google は追加のパラメーター コールバックを提供しています。コールバック メソッドは、API がロードされた後に呼び出されます。

それを機能させるには、外部の JavaScript ブロックから呼び出すことができる GWT メソッドを登録する必要があります。

   public static native void exportStaticMethod() /*-{
    $wnd.mapInit = $entry(@com.my.test.client.MyProject::init());
   }-*/;

onModuleLoad でこのメソッドを実行すると、次のように外部の Java スクリプトから実行できます。

function initialize()
{
        window.mapInit();
}

欠けているのは、GWT コードにマップ API を挿入することです。

ScriptElement element = Document.get().createScriptElement();
    element.setLang("javascript");
    element.setType("text/javascript");
    element.setSrc("https://maps.googleapis.com/maps/api/js?callback=initialize&sensor=false");
    Document.get().getElementsByTagName("head").getItem(0).appendChild(element);

スクリプトがロードされた後、init メソッドが実行されます。

private static void init()
{
    System.out.println("loaded");
}

ここを参照してくださいクライアント側 API のロード

于 2015-07-31T08:58:40.073 に答える