46

Apple が iOS デバイス (iPhone、iPad、iPod Touch) の window.onbeforeunload イベントを無効にしているようです。残念ながら、このイベントが Mobile Safari で機能しない理由に関するドキュメントは見つかりません。

この機能に代わる信頼できる方法があるかどうかは誰にもわかりませんか? Android のブラウザは問題なくサポートしているようで、Safari デスクトップ アプリケーションも問題なく onbeforeunload イベントをサポートしています。

4

4 に答える 4

19

古い質問だと思いますが、最近この問題に直面しました。

私が使用window.unloadしていて、ios ブラウザーで正常に動作します (ただし、Apple のドキュメントを見ると、廃止されているようで、使用することをお勧めしますdocument.pagehide)

于 2014-10-04T13:53:25.580 に答える
2

本当に必要な場合は、URL を変更するハンドラーを持つすべてのリンク、フォーム、および DOM オブジェクトを取得し、必要な操作が完了するまで待機させることはできません。リンクについては、getElementsByTagName で取得し、href が # 以外で始まるかどうかを確認し、onbeforeunload 関数 add onclick を追加するだけです (href が参照される前に呼び出されます)。フォームも同じですが、onsubmit があります。最後に、JavaScript で href を変更する要素については、onbeforeunlaod 関数を呼び出す lsitener を追加するときに確認する必要があります (または、DOM0 または DOM1 リスナーを使用する場合は、いくつかのクラスを追加してからグローバル スクリプトを使用できます)。クラスですべての要素をチェックし、クロージャーでイベントリスナーに追加します。

ただし、通常はこのイベントの使用を避けることができるはずです (おそらく、Cookie を使用して x 秒ごとに送信したいものを保存し、最悪の場合、ユーザーが次にページを読み込んでそれを確認できるようにします)。 、最良の場合、onbeforeunload または onunload で Ajax リクエストを送信できます。これにより、http ヘッダーのみを送信した場合でも、必要なものを取得できます)。

于 2011-04-23T22:24:25.233 に答える
0

私は同じ問題を抱えていました。iphone のサファリ ブラウザはフォーカス イベントとブラー イベントのみをトリガーするようで、他のほとんどすべてのイベントはトリガーされません (pagehide、pageshow、可視性の変更など)。同じように。

    window.addEventListener('focus', function(){
       // do stuff
     });

   window.addEventListener('blur', function(){
       // do stuff
     });

これが誰かに役立つことを願っています。

于 2020-06-25T07:06:34.020 に答える