web-dev-qa-db-fra.com

JavaScript: alerte prioritaire ()

Quelqu'un a-t-il déjà utilisé la fonction alert() en JavaScript?

  • Quels navigateurs supportent cela?
  • Quelles versions de navigateur supportent cela?
  • Quels sont les dangers de surcharger la fonction?
205
cllpse

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

207

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);
23
Pablo Cabrera

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.');
15
user160820

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.

13
Josh Stodola

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(){}
12
Jack

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);
7
Vitaliy R.

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 ;-)

4
Josef Sábl

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.

3
Christopher Tokar

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 =)

2
David Hedlund

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;
} 
1
zainengineer