从JavaScript调用GWT函数(IE中的问题)

时间:2011-08-10 03:51:38

标签: javascript gwt

我有2个项目。第一个是GWT项目

public class Ecoverage implements EntryPoint {
  public void onModuleLoad() {
    Ecoverage.publish();
  }
  public static void getPayloadPage01() {
    Window.alert("alert from GWT module");
  }
  public static native void publish() /*-{
    $wnd.initPage01 = $entry(function () {
      @com.apps.client.Ecoverage::getPayloadPage01()();
    });
  }-*/;
}

第二个是使用jsp的常规动态Web项目。

的Page1.jsp

<head>
<script language="javascript">
window.onload = function() {
    window.initPage01();
};
</script>
<script type="text/javascript" language="javascript" src="../Ecoverage/ecoverage/ecoverage.nocache.js"></script>
</head>

弹出窗口在FF和Chrome中正常工作,但在IE中却没有。 IE说

Message: Object doesn't support this property or method
Line: 18
Char: 3
Code: 0
URI: http://10.0.2.2:8080/ecoverage-light/page1.jsp

第18行是:window.initPage01();

让我知道IE是否有任何解决方法。

2 个答案:

答案 0 :(得分:0)

可能是时间问题吗?似乎在IE中,initPage01函数不存在于页面加载中。不确定GWT如何加载脚本,但我记得它在iframe的脚本中加载。所以IE中的onload会更早启动,因为它不会检查是否加载了iframe。

毕竟为什么不从你的GWT应用程序打开弹出窗口。打开popup direct onload而不是onModuleLoad有什么好处?

答案 1 :(得分:0)

@eskimoblood可能是正确的 - 在脚本完全加载之前调用initPage01()。尝试使用scheduleDeferred() - 将其放入onModuleLoad()

Scheduler.get().scheduleDeferred(new Scheduler.ScheduledCommand() {
    @Override
    public void execute() {
        // your commands here
            Ecoverage.publish();
    }
});