Como evitar alertas JavaScript que são acionados ao sair de uma página?

11

Muitas páginas têm alertas quando você as deixa: se você fechar as guias, sair sem salvar, etc., há vários motivos pelos quais um site o alertaria / impediria a sua saída até você confirmar um alerta, por exemplo, "Você tem certeza que quer sair desta página?"

Isso geralmente é feito com os manipuladores onbeforeunload e / ou onunload .

Aqui é um exemplo.

Existe alguma maneira de evitar eventos de alertas / bloqueio de usuário gerados por esses manipuladores? Basicamente, gostaria de deixar o JS ativado e especificamente proibir coisas que me impediriam de sair de uma página sem que um clique extra acontecesse.

Os manipuladores

onbeforeunload e onunload ainda devem disparar; eles simplesmente não deveriam poder fazer coisas que bloqueiam o usuário. Isso significa que não há alertas nem operações que demorem mais do que alguns segundos.

Eu encontrei alguns plugins que editam / greasemonkey remendam o javascript para páginas específicas, e brincam com o código deles para tentar torná-los mais universalmente aplicáveis. No entanto, espero encontrar uma solução que funcione na página any que tente bloquear a saída do usuário.

    
por Zac B 08.05.2013 / 17:11

3 respostas

4

Bem, o mais simples é simplesmente substituir o script de páginas diretamente e reatribuir o evento a null .

window.onbeforeunload = null;

Isso deve funcionar em qualquer lugar, a menos que eles sejam realmente mal-intencionados e continuem reatribuindo-os por conta própria. Nesse caso, um loop para manter a configuração null provavelmente funcionará.

while(true) {
    if (window.onbeforeunload != null) {
        window.onbeforeunload = null;
    }
}

Agora, esteja avisado, algumas páginas usam isso para sempre. Pegue a página de upload do YouTube: se você for embora durante um upload, talvez tenha perdido horas de progresso! Ou talvez um formulário da web que você está preenchendo, que você pode não querer preencher novamente, ou uma mensagem (fórum / e-mail) que você pode não querer redigitar. Com esse recurso, você está protegido.

Outro problema é qualquer página que use isso para algum propósito secundário, como salvar dados por AJAX. Eles podem usar esse evento para acionar a ação de salvamento e esperar que o usuário demore o bastante para clicar no botão para a solicitação passar. Novamente, isso geralmente é feito para salvá-lo de você mesmo.

Mas, obviamente, todos nós sabemos que muitas páginas usam isso para o mal. Portanto, se você souber de alguma página em que deseja trabalhar, poderá sempre ter um sistema de lista branca. Realmente não há uma maneira de bloquear essa ação, sem bloquear totalmente window.onbeforeunload e quaisquer ações (possivelmente boas) que sejam necessárias.

Não há como (sem o conhecimento prévio de um determinado código de páginas) manter as boas ações ao interromper a caixa pop-up. Esta caixa não é uma alert() . A caixa é gerada pelo navegador, conforme o comportamento pretendido de onbeforeunload . Um cria isso fazendo qualquer função que eles atribuam a window.onbeforeunload return uma string. Essa string será impressa no pop-up.

window.onbeforeunload = function() {
    //Whatever
    return "WARNING! You have unsaved changes that may be lost!";
}

Assim, você não conseguiria bloquear o pop-up sem apagar a função.

Além disso, se você encontrar uma maneira, qualquer AJAX falhará. O pop-up dá tempo para que as solicitações sejam concluídas, sem isso, os dados podem ser perdidos.

Quanto a onunload , não deve ser possível bloquear você com isso. Uma vez que é disparado após a página é descarregada. Mas para estar seguro, você sempre pode fazer um window.onunload = null; e ele deve ser cuidado.

    
por 08.05.2013 / 20:12
0
    // ==/UserScript==

var th = document.getElementsByTagName('body')[0];
var s = document.createElement('script');
s.setAttribute('type','text/javascript');
s.innerHTML = "window.onbeforeunload = function() {}";
th.appendChild(s);
    
por 16.01.2014 / 04:37
0

Existe uma boa ferramenta que pode lidar com qualquer popup irritante em um sistema Windows - ClickOff . Você pode fazer o download em aqui . Eu verifiquei e funciona com o alerta "Alterações feitas por você não podem ser salvas" para o site do SharePoint.

    
por 22.12.2016 / 18:00