Boa tarde.
Estou desenvolvendo uma funcionalidade e preciso quando o usuário fechar a aba ou o navegador o sistema realize uma chamada para uma determinada funcionalidade, utilizei para testes as seguintes funcionalidades:
- onbeforeunload;
- onunload.
Porém em ambos quando eu navegado pelo site ele chama a funcionalidade, ao invés de chamar somente quando o navegador ou a aba é fechada.
Existe alguma forma de fazer para quando estiver navegando não chamar a funcionalidade ?
Como vc está usando esse evento? Pela documentação, é recomendado usar dessa forma o unload
:
window.addEventListener('unload', function(evt) {
window.open("https://www.google.com.br");
});
Boa tarde.
Testei das seguintes formas:
$(window).unload(function() {
//Executar função
});
$(window).on("beforeunload", function() {
//Executar função
});
$(window).on("unload", function(e) {
//Executar função
});
Realizei um teste da forma que você me enviou e ao navegar para outra página do site, a função foi executada.
Então significa que funcionou! Bom d+. Atendeu sua necessidade?
Não
Eu preciso somente quando o a aba do site é fechada ou quando o navegador é fechado, quando eu estiver navegando pelo site não pode executar.
Por exemplo, estou na index e vou para o contato ele executa a função, porém eu preciso que seja somente executada quando a aba ou o navegador é fechado.
Até onde sei, a única forma (standard) que conheço é unload que detecta esse tipo de coisa. Que tipo de ação vc precisa executar nessa situação?
O cliente vai inserir itens no carrinho de compras, caso ele não finalize a compra e saia da página o sistema enviará uma notificação para a administração do e-commerce informando sobre o abandono.
Os dados do carrinho fica armazenado na sessão do usuário? Se sim, talvez vc consiga fazer essa notificação quando a sessão do usuário expirar (geralmente a sessão possui um timeout padrão e ao ser invalidada, os dados da sessão são perdidos).
O carrinho fica no localstorage.
Saudações Leandro! Ao chamar a função, utilize um e.preventDefault(); para desativar o evento padrão e assim você realiza o evento desejado.
Boa tarde wallacecampanha.
Seguem os dados:
Footer
$(window).on("unload", function(e) {
e.preventDefault();
$.ajax({
url: '/gerar-arquivo.php',
async: false
});
});
Código do arquivo chamado no Ajax:
file_put_contents('teste.txt', 'funcionou');
Sempre que eu atualizo a página ou navego entre as páginas o arquivo é gerado. Teria alguma forma de executar somente quando a página é fechada ?