ウィンドウを閉じるハンドラーが 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;
}
この問題は私を夢中にさせています。アイデアはありますか?
ありがとう!