web-dev-qa-db-ja.com

beforeunload on IE 11-ユーザーにプロンプ​​トを表示しない

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 "";
});
12
freddy mercury

解決策は何も返さないことです(これは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;
});
21
freddy mercury