2

ウィンドウを閉じるハンドラーが 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;
}

この問題は私を夢中にさせています。アイデアはありますか?

ありがとう!

4

2 に答える 2