Quelqu'un a-t-il une expérience de la substitution de la alert()
fonction en JavaScript?
- Quels navigateurs prennent en charge cela?
- Quelles versions de navigateur prennent en charge cela?
- Quels sont les dangers à contourner la fonction?
javascript
overriding
cllpse
la source
la source
_alert
comme une sorte de tempo expando dans un premier temps.Réponses:
C'est définitivement "supporté". C'est votre page Web, vous faites ce que vous voulez avec.
J'ai déjà fait cela pour suivre les événements analytiques sans modifier une bibliothèque, mais en me faufilant dans les événements.
Utilisez le modèle de proxy:
Vous pouvez également contourner l'appel à la fonction d'origine si vous le souhaitez (par procuration)
Plus d'informations ici: JQuery Types #Proxy Pattern
la source
apply()
n'est pas disponiblewindow.alert
dans Internet Explorer 8.apply
est une méthode de l'Function
objet. Ils doivent donc explicitement le restreindre pouralert
?!Bien que la plupart des navigateurs prennent en charge le remplacement, faites attention à ce que vous en faites.
Étant donné que la boîte d'alerte par défaut bloque le thread d'exécution, certaines bibliothèques qui s'appuient sur ce comportement peuvent ne plus fonctionner (au mieux).
Vous devez être un bon citoyen et éviter de toucher à l'API native. Si vous le faites, vous pourriez casser les choses lorsque vous utilisez du code tiers.
Pourtant, si vous souhaitez redéfinir le comportement d'alerte dans un contexte spécifique, vous pouvez le joindre à une fonction anonyme, comme ceci:
la source
Il n'y a aucun danger dans la fonction d'alerte Overring. Chaque navigateur le supprime.
par exemple:
la source
alert("Reloading")
puis recharge la page Web. Le texte d'alerte pourrait ne jamais être vu par l'utilisateur.Je pense que chaque implémentation Javascript supportera cela, et il n'y a aucun danger. Il est généralement fait pour remplacer les simples boîtes d'alerte de style OS par quelque chose de plus élégant avec HTML / CSS. Faire de cette façon signifie que vous n'avez pas à modifier le code existant! Le fait qu'il soit possible rend Javascript génial.
la source
Comme indiqué dans de nombreuses autres réponses, vous pouvez simplement remplacer la fonction par
ou
cependant, cela ne remplace pas nécessairement la fonction sur le prototype du
Window
constructeur (notez le capitalW
), donc le pirate peut toujours taper:par conséquent, vous devez également remplacer cette fonction par:
ou
la source
Ladislav.
Pour IE8, vous pouvez redéfinir alert () comme ceci
et appeler comme
la source
D'après mon expérience avec la fonction d'alerte prioritaire (), nous l'avons utilisé pour "pirater" la version d'essai de la bibliothèque JavaScript qui affiche "Veuillez vous inscrire!" harceler l'écran à travers l'alerte de temps en temps.
Nous venons de définir notre propre fonction alert () et le tour est joué.
C'était à des fins de test uniquement, nous avons acheté la version complète plus tard, donc rien d'immoral ne se passe ici ;-)
la source
Toutes les implémentations JavaScript dans les navigateurs modernes prennent en charge la substitution.
Les dangers sont tout simplement que vous rendriez les autres membres de l'équipe complètement fous en remplaçant les fonctions connues telles que alert ().
Donc, à moins que vous ne remplaciez des fonctions comme un outil pour déboguer ou pirater le code existant d'une manière ou d'une autre, je ne vois aucune raison de le faire. Créez simplement une nouvelle fonction.
la source
Cela fonctionne bien sur Firefox et IE8. Je ne peux pas voir qu'il y aurait un navigateur dans lequel il ne fonctionnerait pas. Ceci est à peu près fondamental du fonctionnement de javascript, même si on ne le voit pas souvent utilisé avec des fonctions natives comme ça =)
la source
Un hack rapide que je fais pour trouver d'où viennent les alertes, c'est d'aller sur la console puis d'entrer
la source
En ce qui concerne les fonctions du navigateur js
window.alert
est prééminent et le plus connu, les gens qui ne connaissent pas js saventalert()
- soyez assuré qu'il est pris en charge dans tous les navigateurs utilisés aujourd'hui et que votre extrait de code l'est également. Cependant, je ne remplacerais pas (enfin cela ressemble plus à une refactorisation plutôt qu'à une substitution au sens de la POO)alert()
pour un cas d'utilisation particulier comme le vôtre parce que lorsque vous devez réellement utiliseralert()
sans modèle, et vous le ferez probablement, alors vous aurez besoin une autre fonction non alerte pour le faire.la source
J'ai été confronté à l'obligation d'afficher un message par défaut avec les messages d'alerte réels. C'est ainsi que j'ai réussi à le faire.
Je l'ai testé sur chrome. Je ne sais pas si c'est une bonne pratique, mais cela sert le but.
la source