2016-09-28 56 views
0

私は、Web訪問者が自分のサイトを離れるときにトリガされるポップアップ(ブートストラップモーダルスタイル)を実装しようとしています。しかし、それはFFの中では動作しませんでしたbeforeunloadのイベントリスナーを削除する

$(window).bind('beforeunload', function(){ 
$("#sModal").modal('show'); 
return 'Take our survey before you leave.'; 
}); 

IEで正常に働いていた:

は、私は別の選択肢を試してみました。私はまた、ページ全体が読み込まれているので、 "あなたは退出したいか滞在していますか"という警告が、自分のウェブサイト自体をクリックすると、すべてのブラウザタイプでクリックされて表示されていたという別の問題もありました。

私が使用してbeforeunloadリスナーを削除するためにすべての私のアンカータグをループしてクリックリスナーを追加することによってこの問題を回避ました:

window.onload = function() { 
    var allLinks = document.getElementsByTagName('a'); 
    for (var i = 0; i < allLinks.length; i++) { 
     allLinks[i].addEventListener("click", removeBeforeUnload, false); 
    } 
}; 

removeBeforeUnload機能が戻ったばかりに取得

$(window).unbind('beforeunload'); 

を使用実際にpopoup/modalがすべてのブラウザに表示されるようにするには、文書のロードが完了した後、このstackoverflowの答えのコードを使用してください:

window.onbeforeunload and window.onunload is not working in Firefox , Safari , Opera?

このソリューションはすべてのブラウザで機能しますが、ローカルのクリックしたリンクでこのイベントをアンバインドすることはできません。私はstackoverflowのanswer.Thanksから使用することを、あなたは正しい方向に私を指すと私は、このイベントのバインドを解除することができない理由を説明することができることを望むすべてのもの

window.removeEventlistener('beforeunload',null,false); 
window.removeEventlistener('onbeforeunload',null,false); 
window.removeBeforeUnload(); 
window.onbeforeunload = null; 

を試してみました!

+0

にリスナーを削除する必要はありません、これは良い質問です

にリンクのクリックハンドラにnullにこのフラグを設定するか、偽私はリフレッシュ、バックなどをキャプチャせずにブラウザでクローズイベントをキャプチャしようとして同じ問題が発生したので –

+0

@スターリングアーチャーありがとう!私はこれを解決することができます、私は机の舞台に立ち向かうためです!私はイベントリスナーが登録抹消されていない理由を知らない! – mmokh

+0

jQueryスタイルの 'bind/unbind'(もっと最近のバージョンのjQueryでは' on/off')、あるいはDOMスタイルの 'addEventListener/removeEventListener'セマンティクスを使うことをお勧めします。 2つを組み合わせると狂気につながります:)。 –

答えて

0

考えられるのは、グローバル変数フラグを使用し、フラグが真実でないときにアンロードイベントハンドラで何もしないことです。そして、あなたが本当に同じくらい、私はunloadイベントモーダルを使用するためにあなたを憎むよう

var doUnload = true; 

$('a').click(function(){ 
    doUnload = false; 
}); 

function unloadhandler(){ 
    if(doUnload){ 
     // show modal , return message etc 
    }else{ 
     // do nothing , don't return anything 
    }  
} 
+0

このソリューションは、IEでは内部Webサイトのリンクが消毒され、ポップアップが終了/終了時にのみ表示されますが、内部リンクは消されますが、終了時には「このサイトを終了しますか?すべて一緒に...リダイレクトまたは閉じる前にポップアップがミリ秒表示されます... – mmokh

+0

内部リンクは何を意味していますか? – charlietfl

+0

これは、内部Webサイトのリンクをクリックしたときにポップアップが表示されないことを意味します。 – mmokh

関連する問題