Gwt Can';t通过JSNI调用注入的google maps v3 api:$wnd.google.maps.LatLng不是构造函数

Gwt Can';t通过JSNI调用注入的google maps v3 api:$wnd.google.maps.LatLng不是构造函数,gwt,google-maps-api-3,jsni,Gwt,Google Maps Api 3,Jsni,我正在尝试使用JSNI提供的google maps,下面的代码片段抛出了一个异常: com.google.gwt.core.client.JavaScriptException:(TypeError):$wnd.google.maps.LatLng不是com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:248)上的构造函数 有人能帮我指出这里出了什么问题吗? @覆盖 公

我正在尝试使用JSNI提供的google maps,下面的代码片段抛出了一个异常:

com.google.gwt.core.client.JavaScriptException:(TypeError):$wnd.google.maps.LatLng不是com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:248)上的构造函数

有人能帮我指出这里出了什么问题吗?
@覆盖
公共无效初始(最终点中心,最终整数zl)
{
脚本注入器
.fromUrl(“http://maps.googleapis.com/maps/api/js?sensor=false&language="
+Cookies.getCookie(LocaleInfo.getLocaleCookieName())
.setWindow(ScriptInjector.TOP_窗口).setCallback(新回调()
{
公共失效失效失效(异常原因)
{
//I18N
警告(“加载谷歌地图api失败,所有地图功能将不工作。”);
}
成功时公开作废(作废结果)
{
map=initMap(getElement(),center.getLatitude(),center.getLongitude(),zoomLevel=zl);
}
}).inject();
}
原生JavaScriptObject initMap(元素画布、双纬度、双经度、int zoomLevel)/*-{
返回新的$wnd.google.maps.Map(画布{
zoom:zoomLevel,
中心:new$wnd.google.maps.LatLng(纬度、经度),
mapTypeId:$wnd.google.maps.mapTypeId.ROADMAP
});
}-*/;

能否尝试为
noWrap
传递第三个可选布尔参数?也许您在DevMode中遇到了一些错误。部署应用程序后是否尝试过运行相同的代码?

在加载第一个JavaScript库后,MAP API正在注入其他JavaScript库

为了在页面加载后加载MapAPI,Google提供了一个额外的参数回调。在加载API后调用回调方法

要让它工作,您必须注册一个可以从外部javascript块调用的GWT方法

   public static native void exportStaticMethod() /*-{
    $wnd.mapInit = $entry(@com.my.test.client.MyProject::init());
   }-*/;
在ModuleLoad上执行此方法,可以从外部java脚本执行,如下所示:

function initialize()
{
        window.mapInit();
}
缺少的是在GWT代码中注入map 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");
}

请参见此处

您为什么不在一个GWT Maps V3包装器上使用?或者较新的一个尝试了您的建议:添加第三个参数:noWrap,在Dev和部署的模型中都存在一些问题。我唯一能建议的是,您的回调(来自自定义脚本注入器)在脚本实际加载之前启动。你能在你的主机页中包含Google Maps api脚本,看看它是否能以这种方式工作吗?在主机页中包含它会起作用,但我想做的是减少初始下载时间,所以动态注入它。@AlexLuya,那么它会让人相信GWT ScriptInjector类不能与Google Maps JS导入一起正常工作。
private static void init()
{
    System.out.println("loaded");
}