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来执行此操作。