2011-08-10 5 views
0

2 개의 프로젝트가 있습니다. 첫 번째 프로젝트는 GWT 프로젝트입니다.JavaScript에서 GWT 함수 호출 (IE의 문제)

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를 사용하는 일반 동적 웹 프로젝트입니다.

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와 크롬에서 잘하지만 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에 대한 해결 방법이 있습니까?

답변

0

타이밍 문제 일 수 있습니까? IE에서 initPage01 함수가 페이지로드에 존재하지 않는 것 같습니다. GWT가 스크립트를로드하는 방법을 모르지만 iframe의 스크립트에로드되는 것을 기억합니다. IE의 onload는 iframe이로드되었는지 확인하지 않기 때문에 일찍 발생합니다.

결국 GWT 앱에서 팝업을 열지 않습니다. onModuleLoad 대신 popup 직접 onload를 여는 것은 어떤 이점이 있습니까?

+0

그냥 테스트, 난이 JSP 페이지가로드 된 후 RPC 서비스를 호출하기 위하여려고하고있다. – YNChumak

0

@eskimoblood가 맞을 수도 있습니다 - initPage01() 스크립트가 완전히로드되기 전에 호출됩니다. scheduleDeferred()를 사용해보십시오 - 당신의 onModuleLoad()에 넣고 :

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