2009-11-13 11 views
188

¿Alguien tiene alguna experiencia con la anulación de la función alert() en JavaScript?JavaScript: Anulación de alerta()

  • ¿Qué navegadores son compatibles con esto?
  • ¿Qué versiones de navegador son compatibles con esto?
  • ¿Cuáles son los peligros de anular la función?
+10

Si votas por dentro, explica por qué. Puede ser que tenga una razón perfectamente válida para hacer esto. – roosteronacid

+20

No entiendo el voto abajo aquí. –

+0

¿No es eso un ciclo infinito? – Pool

Respuesta

188

Definitivamente es "compatible". Es su página web, usted hace lo que quiera con ella.

Ya hice esto para rastrear eventos analíticos sin modificar una biblioteca, sino infiltrándome en eventos.

utilizar el patrón de proxy:

(function(proxied) { 
    window.alert = function() { 
    // do something here 
    return proxied.apply(this, arguments); 
    }; 
})(window.alert); 

También puede pasar por alto la llamada a la función original si desea (aproximada)

Más información aquí: JQuery Types #Proxy Pattern

+0

¡Excelente respuesta! Me olvidé por completo de ese patrón :) – roosteronacid

+0

¡No hay problema! También comparto la opinión de Josh Stodola sobre esto, gran comentario también. –

+0

Aye. Ya votó su respuesta. El tuyo es más explícito ... Y viene con un ejemplo.Eso es siempre un placer para el público :) – roosteronacid

2

Seguro funciona en firefox y ie8. No veo que haya ningún navegador en el que no funcione. Esto es básicamente fundamental para saber cómo funciona JavaScript, aunque uno no suele verlo con funciones nativas como, por ejemplo,

+1

El navegador para apuntar específicamente sería IE6 otros probablemente estarían de acuerdo con él. – AnthonyWJones

13

Creo que cada implementación de Javascript lo soportará, y no implica ningún peligro. Comúnmente se hace para reemplazar los cuadros de alerta de estilo simple de OS a algo más elegante con HTML/CSS. ¡Hacerlo de esta manera significa que no tienes que cambiar el código existente! El hecho de que sea posible hace que Javascript sea impresionante.

2

Todas las implementaciones de JavaScript en los navegadores modernos admiten anulación.

Los peligros son simplemente que conducirás a otros miembros del equipo a la locura al anular las funciones comúnmente conocidas como alert().

Así que a menos que esté anulando funciones como una herramienta para tal vez depurar o piratear el código existente de alguna manera, no veo ninguna razón para hacerlo. Solo crea una nueva función.

-1

Cuando se trata de las funciones del navegador js window.alert es preeminente y más conocido, las personas que no conocen saben js alert() - puede estar seguro de que es compatible con todos los navegadores en uso hoy en día y el fragmento de código es también. Sin embargo, no anularía (bueno, esto es más como refactorizar en lugar de anular en el sentido OOP) alert() para un caso de uso particular como el suyo porque cuando realmente necesite usar alert() sin plantilla, y probablemente lo haga, entonces ' Necesitaré otra función no alerta para hacerlo.

4

Mi experiencia con alerta de primordial() la función es que una vez lo usamos para "piratear" la versión de prueba de la biblioteca JavaScript que mostraba "¡Por favor, regístrese!" molestar a la pantalla a través de alertas de vez en cuando.

Acabamos de definir nuestra propia función de alerta() y listo.

Era para propósitos de prueba, hemos comprado la versión completa más adelante, así que nada inmoral pasando aquí ;-)

14

No hay peligros en Overring función de alerta. Cada navegador lo provee.

por ejemplo:

// function over riding. Redirecting to Console with Firebug installed. 
function alert(message) { 
    console.info(message); 
} 

alert('This is an override.'); 
+7

No * podría haber un peligro si su reemplazo no es de bloqueo. Por ejemplo, código que llama a 'alert (" Reloading ")' y luego vuelve a cargar la página web. El texto de alerta podría no ser visto por el usuario. – Darien

22

Aunque la mayoría de los navegadores soportan anulando él, tener cuidado con lo que haces con él.

Dado que el cuadro de alerta predeterminado bloquea el hilo de ejecución, es posible que algunas bibliotecas que dependen de este comportamiento ya no funcionen (en el mejor de los casos).

Debe ser un buen ciudadano y evitar tocar la API nativa. Si lo hace, podría romper las cosas, al usar código de terceros.

Sin embargo, si desea volver a definir el comportamiento de alerta en un contexto específico, se puede encerrar con una función anónima, así:

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

Ladislav.
para IE8 puede redefinir alerta() al igual que de esta manera

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

y llame como

alert('Hello, hacker!'); 
nalert('I am native alert'); 
alert('Hello, user!', Type.custom); 
9

Como se ha dicho en muchas de las otras respuestas, que sólo puede anular la función con

window.alert = null 

o

window.alert = function(){} 
Sin embargo

, esto no significa necesariamente anula la función en el prototipo del constructor Window (nótese la capital W), por lo que el hacker todavía puede escribir:

Window.prototype.alert.apply(window, ["You were hacked!"]); 

, por lo tanto, también es necesario para anular esa función con :

Window.prototype.alert = null 

o

Window.prototype.alert = function(){} 
+0

Esto no anula necesariamente la función en otros marcos. ver http://jsfiddle.net/18znqbjd/1/ – Robert

+0

Robert: Sí y por buenas razones. Diferentes marcos son básicamente diferentes documentos HTML, cada uno con su propia "instancia" de Javascript. – Rolf

+0

¿Seguro que Window.prototype.alert sigue siendo una función en 2017? :PAG – iplus26

1

Un truco rápido que hacer para encontrar donde la alerta s vienen de, es ir a la consola y luego ingresar este

function alert(message) { 
    console.info(message); 
    debugger; 
} 
Cuestiones relacionadas