2015-12-22 19 views
7

Sitemde angularjs SPA var. Kullanıcı yenile düğmesini tıkladığında veya F5/Ctrl + F5 tuşlarına basarak sayfayı önlemek veya sayfayı yeniden yüklemek istiyorum. Ne yazık ki, onbeforeunload ve onunload olayları ile çözüm çalışmıyor. Aslında, aradılar, event.preventDefault() satırına ulaşıldı, konsolda herhangi bir ileti var, ancak tarayıcı sayfayı yüklemeye devam ediyor.Tarayıcı sayfasının açılmasını/açılmasını engelleyemez Açısal uygulama

Bulunduğum modül .run() kodu:

let window = angular.element($window); 
window.on("beforeunload", (event) => { 
    event.preventDefault(); 
}).on("unload", (event) => { 
    event.preventDefault(); 
}); 

// This is just for sure that I have my handlers registered 
$window.onbeforeunload = (event) => { 
    event.preventDefault(); 
} 

$window.onunload = (event) => { 
    event.preventDefault(); 
} 

nasıl gerçekten açısal bu işleyebilir?

GÜNCELLEME

Ben sayfası yerine gerçek durumunu yeniden için ihtiyacım var. Kullanıcı yenilendiğinde, mevcut durumu $stateProvider ile yeniden yüklemek ve sayfanın tamamını yeniden yüklememek istiyorum.

+0

Neden bunu istiyorsun? Bu –

+0

yapmak için iyi bir neden düşünemiyorum lütfen benim güncelleme – Andrew

+1

görüyorum Ben mümkün olduğunu düşünmüyorum ve olması gerektiğini düşünmüyorum. Tarayıcı perspektifinden, yenileme düğmesi belgenin kapsamı dışında olmalıdır. – lex82

cevap

10

Mozilla has to say about unload events. İstediğiniz gibi bir yenilemeyi önlemek mümkün değil gibi görünüyor. Yapabileceğin tek şey, kullanıcıya gerçekten sayfayı terketmek isteyip istemediğini sormak.

Kullanıcının mevcut sayfayı bırakmak istemediğini yanıtlaması durumunda mevcut durumu yeniden yükleyebileceğinizi tahmin ediyorum.

window.onbeforeunload = function(event) { 
    // do some stuff here, like reloading your current state 
    //this would work only if the user chooses not to leave the page 
    return 'why would you do that???'; 
} 

fiddle for you'u oluşturdum.

+0

Ve kullanıcının söylediklerini nasıl ele alabilirim? Demek istediğim, nasıl anlayabilirim "Evet" veya "Hayır" cevabı? – Andrew

+1

Eh, yorumlarda yazmış gibi. Kullanıcı sayfanızdan ayrılmayı seçerse javascript kapsamında her şey kaybolur, kullanıcı ayrılmamaya karar verirse, her şey daha önce olduğu gibi olacaktır. Böylece, dönüş ifadesinden önce size mantık yazabilirsiniz. Bunun gibi, eğer kalmayı seçerse, mantığınız devam edecektir. –

+0

Çalışır, teşekkürler. Ancak tek bir sorun 'Yeniden Yükle'yi seçtiğimde mantığım da çalışır, ancak tarayıcı sayfayı yeniden yüklemeye çalışır. Bunu atlamak mümkün mü? – Andrew

İlgili konular