5

Kullanıcıları, metin kutularında bir şey girmişlerse tarayıcının yenileme veya geri düğmesine bastığında uyarmak istiyorum. Bu yüzden bunu yapmak için window.onbeforeunload işlevini kullandım. Bu javascript kodu, Firefox ve chrome'da sorunsuz çalışır. Ancak IE'de bu işlev kısmi arkaya sahip düğmeler için patlar. IE'de bu sorunun üstesinden gelmek için herhangi bir çözüm var mı? Teşekkür :)window.onSonraki kısmi geribesleme olayları için IE'deki yangınları azaltma

  • O

cevap

5

window.onbeforeunload işlevi doğru IE yürütmek değil IE çünkü Bug olacakları. Bazı kısmi geri göndermeler de "Sayfayı terk etmeye çalışmak" olarak kabul edilir. Sayfadaki bir bağlantı href = "javascript: ...." (ASP.Net LinkButton bu şekilde işlenir) içeriyorsa, IE bağlantıyı tıklatıldığında pencere boşaltma olayını yanlış şekilde tetikler. bu yüzden, ben bir dirtyflag değişken tuttu ve bağlantılar href^= ile başlayan sayfa, yüklendiğinde şimdi

var __ignoreDirtyFlag = false; 

$(document).ready(function() { 
    if ($.browser.msie) { 
     $('[href^="javascript:"]').bind('click.ignoreDirtyFlag', function() { 
      __ignoreDirtyFlag = true; 
     }); 
    } 
}); 

ekledi "javascript:" bu işlevi tahsis edecektir. bağlantı tıklandığında, __ingoreDirtyFlag değişkenini true yapar; kaldırılacak linke bağlanarak fonksiyonu yukarıda sayfanızda kullanılan herhangi asp güncelleme paneller varsa sonra

window.onbeforeunload = function globalWindowUnload() { 
    if (!__ignoreDirtyFlag && isDataFilled == true) { 
     return "You have unsaved changes on this page. If you leave this page, those changes will be lost."; 
    } 
    __ignoreDirtyFlag = false; 
    return; 
}; 

eklendi. , böylece güncelleme paneli yenilendiğinde işlevi tekrar bağlantılara bağlamalıyız.

nedenle,

function foo() { 
    Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endRequestHandler); 
} 

function endRequestHandler(sender, args) { 
    // Do your stuff 
    if ($.browser.msie) { 
     $('[href^="javascript:"]').bind('click.ignoreDirtyFlag', function() { 
      __ignoreDirtyFlag = true; 
     }); 
    } 
} 

ve vücut etiketi Onload yöntemi için

, I fan() metodu assinged. Bu hack IE ile iyi çalışıyor ve <body onload="foo()">

tüm tarayıcılar :) sayesinde

+0

o tarayıcısını kapattığında zaman kullanıcıyı çıkış veya el değiştirmektir. Çok kötü, okumak çok zor. –

+1

* jquery * etiketini görmedim –

+0

Hey, bu cevabın neredeyse 3 yaşında olduğunu biliyorum, ama soru jquery olarak etiketlenmediğinden cevabınızın jQuery olmayan bir sürümünü ekleyebileceğinizi düşünüyor musunuz? –

0

`var inFormOrLink = false; var url_auth = ''; var __ignoreDirtyFlag = false;

document).ready(function() { 

if ($.browser.msie) { 
    $('').bind('click.ignoreDirtyFlag', function() { __ignoreDirtyFlag = true; alert("teste luiz") }); 

    window.onbeforeunload = function() { 
     if (!__ignoreDirtyFlag) { 
      return "Tem certeza que deseja encerrar a sessão TESTE LUIZ?"; 
     } 
     __ignoreDirtyFlag = false; 
     return; 
    }; 
} 
else { 
    $('*').live('click', function() { inFormOrLink = true; alert("Passou aqui 1 LUIZ"); }); 
    $('*').bind('submit', function() { inFormOrLink = true; alert("Passou aqui 2"); }); 
    window.onbeforeunload = function() { 
     if (!inFormOrLink) { 

      if (window.location.href.indexOf("DEV2") != -1) { 
       $.post("/DEV2/SSQ/AUTH/LOGOUT", null); 
       return 'Tem certeza que deseja encerrar a sessão TESTE DEV2?'; 
      }` 
+1

Çoğu cevapta, kodun nasıl çalıştığını göstermek için bir açıklama eklemek iyi bir fikirdir; bu, daha az programlama deneyimine sahip diğer kişilerin kodun ne yaptığını anlamalarına yardımcı olur. –

+0

Amaç, tarayıcıyı kapattığı veya hedef URL'yi manuel olarak değiştirdiği zaman kullanıcıyı kapatır. –

0

Amaç hedef url Bu cevap teknik olarak ilginç

var url_auth = '';var __ignoreDirtyFlag = false;$(document).ready(function() {if ($.browser.msie) {$('a').live('click', function() { __ignoreDirtyFlag = true;}); $('*').bind('submit', function() { __ignoreDirtyFlag = true; });window.onbeforeunload = function() {if (!__ignoreDirtyFlag) {if (window.location.href.indexOf("DEV2") != -1) {$.post("/DEV2/SSQ/AUTH/LOGOUT", null);return 'Tem certeza que deseja encerrar a sessão ?';}}};