2011-08-10 37 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()(); 
    }); 
    }-*/; 
} 

第二個是常規的動態web項目與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應用程序的彈出窗口。打開彈出式直接onload而不是onModuleLoad有什麼好處?

+0

它只是爲了測試,我會打電話給RPC服務的JSP頁面加載後。 – YNChumak

0

@eskimoblood可能是正確的 - initPage01()在腳本完全加載之前調用。嘗試使用scheduleDeferred() - 把這個在您的onModuleLoad()

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