2013-05-17 63 views
1

窗正在關閉處理不妥善處理不工作在我的Chrome下的代碼(我在它的最後一個版本,26)GWT:的windowClosing處理鉻

我有一個監聽Window.ClosingEvent類。如果在用戶上傳文件時關閉窗口(關閉窗口,用戶鍵入另一個url ...),應用程序會提示用戶「您確定嗎?」。

GWT 2.5.0和2.5.1 IEXPLORER 10 OK 火狐21 OK Opera不支持的事件還。 Chrome 26無法正常工作。

這裏的GWT代碼:

public abstract class ActiveUploadTransitionController extends TransitionController implements ClosingHandler { 

... 

@Override 
    public void onWindowClosing(Window.ClosingEvent event){ 
     if(showMessage()){ 
      if(folder != null && folder.hasActiveFileUploads()){ 
       event.setMessage(getUploadActiveLeavingMessage()); 
      } 
     } 
    } 

... 
protected ActiveUploadTransitionController() 
    { 
... 
Window.addWindowClosingHandler(this); 
... 
} 
} 

上面的代碼要求,並且在資源管理器中正常工作,火狐所以我覺得代碼就可以了。

有趣的是,如果我在JavaScript中實現一個獨立的測試,它在瀏覽器,Firefox和Chrome瀏覽器中工作正常。

//JavaScript

var handler = function(e){ 
     var show = true; 
     if(show){ 
      var msg = "messageTest"; 
      (e || window.event).returnValue = msg; 
      return msg; 
     } 
     return; 
    } 

    if(window.addEventListener){ 
     window.addEventListener("beforeunload", handler); 
    } 

因爲孤立的JavaScript的工作我也tryed來實現它本機的方式。一樣的問題。適用於IExplorer,FireFox,但不適用於Chrome。

var handler = function (e) { 
    var showMessage = [email protected]::showMessage()(); 
    if(showMessage){ 
     var confirmationMessage = [email protected]::getUploadActiveLeavingMessage()(); 
     (e || window.event).returnValue = confirmationMessage; 
     return confirmationMessage; 
    } 
    tmpBeforeUnload(e); 
    return; 
} 
if($wnd.addEventListener){ 
    $wnd.onbeforeunload = handler; 
} 

這個問題讓我發瘋。任何想法的傢伙?

謝謝大家!

回答

0

我發現了同樣的問題。非常令人沮喪。

本網站爲大多數瀏覽器提供了很好的workarounds

爲Chrome提供的方法拋出了「你確定嗎?」關閉窗口的用戶的對話框。它需要這樣做才能可靠地獲取onClose事件。任何關閉處理都需要在此之前完成,所以如果用戶點擊「否」,頁面/應用仍然需要操作。

0

我懷疑問題是與其他邏輯,而不是瀏覽器的onbeforeunload行爲。爲了驗證這一點,硬編碼的onbeforeunload處理函數返回一個字符串:

$wnd.onbeforeunload = function() { return "Are you sure?" }; 

,並確保您JSNI方法實際上是被稱爲(檢查window.onbeforeunload在瀏覽器控制檯來驗證實際上是添加了處理程序) 。