Capturar evento ao fechar navegador ou aba

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 :frowning:

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 ?