beforeunload
イベントのグローバルウィンドウオブジェクトにリスナーを追加する場合、IE 11(および10)はChromeおよびFirefoxとして動作しません。
通常、ブラウザネイティブダイアログプロンプトに入力するために使用される文字列を返します。ダイアログでユーザーにプロンプトを表示したくない場合は、空の文字列を返します。
ただし、IE 11では、空の文字列を返すか、evt.returnValue
を空の文字列に設定すると、ブラウザネイティブの[ナビゲート]ダイアログが開き、ユーザーは、保存されていない変更を失う可能性があることを認めます。
ダイアログをIE 11)に表示しないようにする方法はありますか(イベントリスナーを削除する必要はありません)。
私の JSFiddle (in IE-これはChrome、Firefox、Safariで正しく動作するはずです)を参照してください。
フィドルのソースは次のとおりです。
var isDirty = false;
var message = '** You have unsaved changes. **'
window.addEventListener('beforeunload', function(evt){
if(isDirty) {
evt.returnValue = message;
return message;
}
delete evt.returnValue;
return "";
});
解決策は何も返さないことです(これはreturn;
またはreturn undefined;
と同じです)。
var isDirty = false;
var message = '** You have unsaved changes. **'
window.addEventListener('beforeunload', function(evt){
if(isDirty) {
evt.returnValue = message;
return message;
}
delete evt.returnValue;
});