Quelqu'un a-t-il déjà utilisé la fonction alert()
en JavaScript?
C'est définitivement "supporté". C'est votre page Web, vous faites ce que vous voulez avec.
Je l'ai déjà fait pour suivre les événements d'analyse sans modifier de bibliothèque, mais en se faufilant dans les événements.
Utilisez le modèle de proxy:
(function(proxied) {
window.alert = function() {
// do something here
return proxied.apply(this, arguments);
};
})(window.alert);
Vous pouvez également ignorer l'appel à la fonction d'origine si vous le souhaitez (mandaté)
Plus d'informations ici: Types JQuery #Proxy Pattern
Bien que la plupart des navigateurs acceptent de le remplacer, soyez prudent avec ce que vous faites avec.
Étant donné que la zone d'alerte par défaut bloque le thread d'exécution, certaines bibliothèques qui reposent sur ce comportement risquent de ne plus fonctionner (au mieux).
Vous devez être un bon citoyen et éviter de toucher à l'API native. Si vous le faites, vous pourriez rompre les choses lorsque vous utilisez un code tiers.
Cependant, si vous souhaitez redéfinir le comportement de l'alerte dans un contexte spécifique, vous pouvez l'enfermer avec une fonction anonyme, comme ceci:
/* new funky alert */
function myFunkyAlert(msg) {
/* here goes your funky alert implementation */
alert("Look ma!\n" + msg);
}
(function(alert) { // anonymous function redefining the "alert"
/* sample code */
alert("Hello World!");
})(myFunkyAlert);
Il n'y a pas de danger dans la fonction d'alerte de dérogation. Chaque navigateur le supporte.
par exemple:
// function over riding. Redirecting to Console with Firebug installed.
function alert(message) {
console.info(message);
}
alert('This is an override.');
Je pense que chaque implémentation Javascript supportera cela, et qu’elle ne présente aucun danger. Cela est généralement fait pour remplacer les boîtes d'alerte de style OS simples par quelque chose de plus élégant avec HTML/CSS. Le faire de cette façon signifie que vous n’aurez pas à changer le code existant! Le fait que ce soit possible rend Javascript génial.
Comme indiqué dans de nombreuses autres réponses, vous pouvez simplement remplacer la fonction par
window.alert = null
ou
window.alert = function(){}
cependant, cela ne remplace pas nécessairement la fonction sur le prototype du constructeur Window
(notez le capital W
), de sorte que le pirate peut toujours taper:
Window.prototype.alert.apply(window, ["You were hacked!"]);
par conséquent, vous devez également remplacer cette fonction par:
Window.prototype.alert = null
ou
Window.prototype.alert = function(){}
Ladislav.
Pour IE8, vous pouvez redéfinir alert () comme ceci
/**
* Definition of global attached to window properties <br/>
*/
(function() {
nalert = window.alert;
Type = {
native: 'native',
custom: 'custom'
};
})();
/**
* Factory method for calling alert().
* It will be call a native alert() or a custom redefined alert() by a Type param.
* This defeinition need for IE
*/
(function(proxy) {
proxy.alert = function () {
var message = (!arguments[0]) ? 'null': arguments[0];
var type = (!arguments[1]) ? '': arguments[1];
if(type && type == 'native') {
nalert(message);
}
else {
document.write('<h1>I am redefiend alert()<br/>Alert say: '+message+'</h1>');
}
};
})(this);
et appeler comme
alert('Hello, hacker!');
nalert('I am native alert');
alert('Hello, user!', Type.custom);
Mon expérience avec la fonction alert () est que nous l’avions utilisée une fois pour "pirater" la version d’essai de la bibliothèque JavaScript qui affichait "Veuillez vous inscrire!" écran de nag à travers le temps d'alerte au temps.
Nous venons de définir notre propre fonction alert () et le tour est joué.
C'était à des fins de test seulement, nous avons acheté la version complète plus tard, donc rien d'immoral ne se passe ici ;-)
Toutes les implémentations JavaScript dans les navigateurs modernes prennent en charge le remplacement.
Les dangers sont tout simplement de rendre complètement fous les autres membres de l'équipe en remplaçant des fonctions connues, telles que alert ().
Donc, à moins que vous ne surchargiez les fonctions en tant qu'outil pour peut-être déboguer ou pirater le code existant d'une manière ou d'une autre, je ne vois aucune raison de le faire. Il suffit de créer une nouvelle fonction.
Cela fonctionne bien sur firefox et ie8. Je ne vois pas qu'il y aurait un navigateur dans lequel il ne fonctionnerait pas. C'est assez fondamental au fonctionnement de javascript, même si on ne le voit pas souvent utilisé avec des fonctions natives comme celle-ci =)
Un rapide bidouillage que je fais pour trouver la provenance des alertes consiste à aller à la console puis à entrer ceci
function alert(message) {
console.info(message);
debugger;
}