Alguém tem alguma experiência com a substituição da alert()
função em JavaScript?
- Quais navegadores suportam isso?
- Quais versões do navegador suportam isso?
- Quais são os perigos em substituir a função?
javascript
overriding
cllpse
fonte
fonte
_alert
como uma espécie de expando temp em primeira instância.Respostas:
Definitivamente, é "suportado". É a sua página da web, você faz o que quiser com ela.
Eu já fiz isso para rastrear eventos de análise sem modificar uma biblioteca, mas entrando nos eventos.
Use o padrão de proxy:
Você também pode ignorar a chamada para a função original, se desejar (em proxy)
Mais informações aqui: Tipos de JQuery #Proxy Pattern
fonte
apply()
não está disponível emwindow.alert
no Internet Explorer 8.apply
é um método doFunction
objeto. Portanto, eles devem explicitamente restringi-lo paraalert
?!Embora a maioria dos navegadores suporte a substituição, tenha cuidado com o que você está fazendo com ele.
Como a caixa de alerta padrão bloqueia o encadeamento de execução, algumas bibliotecas que dependem desse comportamento podem não funcionar mais (na melhor das hipóteses).
Você deve ser um bom cidadão e evitar tocar na API nativa. Se o fizer, você pode dividir as coisas ao usar código de terceiros.
No entanto, se você deseja redefinir o comportamento do alerta em um contexto específico, você pode anexá-lo a uma função anônima, como esta:
fonte
Não há perigos na função de alerta Overring. Todo navegador suporta isso.
por exemplo:
fonte
alert("Reloading")
e recarrega a página da web. O texto do alerta pode nunca ser visto pelo usuário.Penso que todas as implementações de Javascript suportam isso, e não há perigo envolvido. Geralmente é feito para substituir as caixas de alerta simples no estilo do sistema operacional por algo mais elegante com HTML / CSS. Fazer dessa maneira significa que você não precisa alterar o código existente! O fato de ser possível torna o Javascript incrível.
fonte
Como dito em muitas das outras respostas, você pode simplesmente substituir a função por
ou
no entanto, isso não necessariamente substitui a função no protótipo do
Window
construtor (observe a capitalW
), portanto o hacker ainda pode digitar:portanto, você também precisa substituir essa função por:
ou
fonte
Ladislav.
Para o IE8, você pode redefinir alert () dessa maneira
e chame como
fonte
Minha experiência com a substituição da função alert () é que uma vez a usamos para "hackear" a versão de avaliação da biblioteca JavaScript que exibia "Please register!" Nag tela através do alerta de vez em quando.
Acabamos de definir nossa própria função alert () e pronto.
Foi apenas para fins de teste, compramos a versão completa mais tarde, então nada de imoral está acontecendo aqui ;-)
fonte
Todas as implementações de JavaScript nos navegadores modernos oferecem suporte à substituição.
Os perigos são muito simples: você deixaria outros membros da equipe absolutamente loucos, substituindo funções conhecidas como alert ().
Portanto, a menos que você esteja substituindo funções como uma ferramenta para depurar ou hackear o código existente de alguma forma, não vejo motivo para fazê-lo. Basta criar uma nova função.
fonte
Com certeza funciona no Firefox e ie8. Não vejo que haja um navegador no qual ele não funcione. Isso é fundamental para o funcionamento do javascript, mesmo que nem sempre o veja usado com funções nativas como essa =)
fonte
Um truque rápido que eu faço para descobrir de onde os alertas vêm, é acessar o console e inserir
fonte
Quando se trata de funções do navegador js,
window.alert
é preeminente e mais conhecido, pessoas que não sabem o que é jsalert()
- tenha certeza de que ele é suportado em todos os navegadores em uso hoje e seu snippet de código também. No entanto, eu não substituiria (bem, isso é mais como refatoração em vez de substituir no sentido de OOP)alert()
para um caso de uso específico como o seu, porque quando você realmente precisa usaralert()
sem modelo e provavelmente o fará, precisará outra função não alerta para fazer isso.fonte
Eu enfrentei um requisito para mostrar uma mensagem padrão junto com as mensagens de alerta reais. Foi assim que consegui fazer isso.
Eu testei no chrome. Não tenho certeza se é uma boa prática, mas serve ao propósito.
fonte