JS/ReactJSアプリケーションでbeforeunload
as customaryにイベントリスターを追加しました。この関数は、内部のunSaved
状態に応じて確認ダイアログを追加します。* onbeforeunload *はSafari(macOS)にキャッシュされていますか?
ChromeやFirefox(MacOS /デスクトップ)でも問題なく動作します。しかし、Safariで
、:
- 初めて、後続の試みで、まだイベントハンドラの「私が利用する」(
unSaved==true
ながら、私はページを離れる)aspectedとして、それが正常に動作し、 - ページを
unSaved==true
のままにしておくと、Safariは何も確認を求めません。 - 私は(同じ以前のURLを持つ)新しいタブに移動し、再び第1の時間は動作しますが、その後の回にはありません...
何奇妙です:私は私の追加されたイベント機能があることがわかります毎回実際にテストが行われているので、サファリで毎回呼び出されます。console.log
私の唯一の可能な推測は、Safariがどういうわけかタブの確認応答をキャッシュしているということですか? (?)
これを解決する方法はありますか?
マイスタック:
Safari: Version 10.0.1 (12602.2.14.0.7) macOS: 10.12.1 (16B2657) host: localhost protocols: tested on both, http and https
さらに詳しい情報:
- イベント
pageshow
は常にfalseに設定されpersisted
性質を持っています。したがって、Safariによるページキャッシュ(BFCache)は問題の原因ではないはずです。
悪意のあるサイトでは、タブを閉じる前の「確認」が一般的であるため、おそらくマルウェア対策の保護に惑わされている可能性があります。 – ssube
@ssube Safariは私の繰り返しの確認の試みをマルウェアの動作として解釈するので、自分のロジックを無視するだけです。 - ChromeとFirefoxは、ユーザーが決定するためのチェックボックスを確認ポップアップに追加します。_ "このページが追加のダイアログを作成しないようにする" _、もちろん完全に賢明です。 - Safariはそのようなオプションを提供していないのですか? – juanmirocks
Safariの動作が不明ですが、同様の機能がコードを破損する可能性があるようです。あなたがページを繰り返し開いてダイアログを開いてユーザーが退出するのを見たことがあるならば、ほとんどのブラウザーはそれに対して何らかの防御を持っています。 ChromeとFFでうまくいけば、Safariが不気味なことをするチャンスがあります。 – ssube