昨日より発生しており解決できずに困っております。どうかお力を貸していただきたいです。
前提・実現したいこと
問い合わせフォームに離脱防止のためにアラートを出しています。
発生している問題・エラーメッセージ
Chromeでページ内に実装したボタンからTOPに遷移しようとした時だけ、アラートが一瞬表示された後にすぐ消えてしまいます。ブラウザ標準の戻るボタンやMacのトラックパッドによる戻る動作では正常に機能します。またSafari,FireFoxではボタンでも問題なく機能します。
一応、Consoleには以下警告が出ています。
[Deprecation] chrome.loadTimes() is deprecated, instead use standardized API: nextHopProtocol in Navigation Timing 2. [Violation] Added non-passive event listener to a scroll-blocking 'touchstart' event. Consider marking event handler as 'passive' to make the page more responsive. See https://www.chromestatus.com/feature/5745543795965952 [Violation] Added non-passive event listener to a scroll-blocking 'touchmove' event. Consider marking event handler as 'passive' to make the page more responsive. See https://www.chromestatus.com/feature/5745543795965952 [Violation] 'setTimeout' handler took 90ms
該当のソースコード
フォーム1つ目の「Back」ボタン
php
1<div class="button-box"> 2 <a href="sample.jp?type=sell" class="back-top-button" id="q1">Back</a> 3</div>
フォームの最後の「Done」ボタン。ページ離脱時にはここが呼ばれます。
php
1<div class="button-box"> 2 <button class="form-prev-button">Back</button> 3 <!--===== アラート =====--> 4 <script> 5 $(function(){ 6 $(window).on('beforeunload', function() { 7 return 'このページから離れますか?'; 8 }); 9 $("input[type=submit]").click(function() { 10 $(window).off('beforeunload'); 11 }); 12 }); 13 </script> 14 <input class="submit form-next-button" id="submit-button" type="submit" value="Done"> 15 </div>
JavaScript
1/*! jQuery v3.3.1 | (c) JS Foundation and other contributors | jquery.org/license */ 2!function(e, t) { 3 "use strict"; 4 "object" == typeof module && "object" == typeof module.exports ? module.exports = e.document ? t(e, !0) : function(e) { 5 if (!e.document) 6 throw new Error("jQuery requires a window with a document"); 7 return t(e) 8 } 9 : t(e) 10}("undefined" != typeof window ? window : this, function(e, t) { 11 // 省略 12 w.event = { 13 // 省略 14 special: { 15 // 省略 16 beforeunload: { 17 postDispatch: function(e) { 18 void 0 !== e.result && e.originalEvent && (e.originalEvent.returnValue = e.result) 19 } 20 } 21 } 22 } 23}
試したこと
Added non-passive event listener
の警告を消すため、jquery-3.3.1.jsの該当のaddEventListener
の第三引数に{passive:false}
を追記しました。- 上記
<!--===== アラート =====-->
のscriptをコメントアウトするとアラートは出なくなります。 - jQueryでの方法を使っていたので、上記はコメントアウトのまま、
</body>
タグ前に以下コードを記述しましたが結果は同じでした。
<script type="text/javascript"> window.addEventListener('beforeunload', function(e) { e.returnValue = 'ちょっと待ってくださいよ。まだダメですよ。'; }, false); </script>
e.returnValue
の上にe.preventDefault();
を記述してもダメでした。
補足情報(FW/ツールのバージョンなど)
・Amazon EC2
・Ubuntu
・Chrome 75.0.3770.100(Official Build) (64 ビット)
・jQuery 3.1.1 (ただしこのソースと比べて一部書き換えているようです)
回答2件
あなたの回答
tips
プレビュー