ウィンドウを閉じるハンドラーが Chrome の下のコードで機能しません (私は最新バージョンの 26 を使用しています)
をリッスンするクラスがありWindow.ClosingEvent
ます。ユーザーがファイルをアップロードしているときにウィンドウが閉じられている場合 (ウィンドウを閉じて、ユーザーが別の URL を入力する...)、アプリケーションはユーザーに「よろしいですか?」とプロンプトを出します。
GWT 2.5.0 および 2.5.1 IExplorer 10 OK Firefox 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);
...
}
}
上記のコードは準拠しており、Explorer、Firefox で正常に動作するので、コードは問題ないと思います。
面白いことに、JavaScript で分離テストを実装すると、Explorer、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 が機能するため、ネイティブな方法で実装することも試みました。同じ問題。IExplorer、FireFox では動作しますが、Chrome では動作しません。
var handler = function (e) {
var showMessage = that.@com.skydox.client.home.ActiveUploadTransitionController::showMessage()();
if(showMessage){
var confirmationMessage = that.@com.skydox.client.home.ActiveUploadTransitionController::getUploadActiveLeavingMessage()();
(e || window.event).returnValue = confirmationMessage;
return confirmationMessage;
}
tmpBeforeUnload(e);
return;
}
if($wnd.addEventListener){
$wnd.onbeforeunload = handler;
}
この問題は私を夢中にさせています。アイデアはありますか?
ありがとう!