JavaScript:重写alert()

有没有人有重写JavaScript中的alert()函数的经验?

  • 哪些浏览器支持这个?
  • 哪个浏览器版本支持这个?
  • 重写函数有什么危险?

这绝对是“支持”。 这是你的网页,你做任何你想要的东西。

我已经做了这个跟踪分析事件,而不是修改一个图书馆,但通过潜入事件。

使用代理模式:

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

如果你想(代理)你也可以绕过原来的函数调用

更多的信息在这里: JQuerytypes#Proxy模式

虽然大多数浏览器支持覆盖它,但要小心你正在做的事情。

由于默认警告框会阻止执行线程,因此依赖此行为的某些库可能无法工作(最好)。

你应该是一个好公民,并避免接触本地API。 如果你这样做,当使用第三方代码时,你可能会分手。

但是,如果要在特定的上下文中重新定义警报行为,则可以使用匿名函数将其括起来,如下所示:

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

Overring警报function没有任何危险。 每个浏览器都支持它。

例如:

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

我认为每个Javascript实现都会支持这个,而且没有任何危险。 通常用HTML / CSS代替简单的操作系统风格的警报框更优雅。 这样做意味着你不必改变现有的代码! 这是可能的事实使得Javascript真棒。

正如在其他许多答案中所说的,你可以用这个覆盖函数

 window.alert = null 

要么

 window.alert = function(){} 

然而,这并不一定会覆盖Window构造函数原型上的函数(注意大写W ),所以黑客仍然可以键入:

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

因此,您还需要使用以下function覆盖该function:

 Window.prototype.alert = null 

要么

 Window.prototype.alert = function(){} 

拉吉斯拉夫。
对于IE8,你可以像这样重新定义alert()

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

并称之为

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

我的重写alert()函数的经验是我们曾经用它来“试用”显示“请注册!”的JavaScript库的试用版。 通过警报时间的唠叨屏幕。

我们只是定义了我们自己的alert()函数,瞧。

这只是为了testing的目的,我们以后买了完整版本,所以没有不道德的事情在这里;-)

它确实在Firefox和ie8中工作。 我看不出有什么浏览器不起作用。这是javascript的基本工作原理,尽pipe人们不经常看到它与本地函数一样使用=)

现代浏览器中的所有JavaScript实现都支持覆盖。

危险很简单,你可以通过重写alert()等常用函数来让其他团队成员疯狂。

所以除非你将函数作为一个工具来重写,或许以某种方式debugging或破解现有代码,否则我没有看到任何理由去做。 只需创build一个新的function。

我做了一个快速的黑客来find警报来自哪里,是去控制台,然后input这个

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

当涉及到js浏览器的functionwindow.alert是卓越和最知名的,不知道js的人知道alert() – 放心,它支持在今天使用的所有浏览器和您的代码片段。 然而,我不会覆盖(这更像是重构,而不是重写在OOP意义上) alert()作为你的特定用例,因为当你实际上需要使用alert()而没有模板时,你可能会,那么您将需要另一个非警报function来执行此操作。