JavaScript:重写提醒()
这绝对是“支持”。这是你的网页,你可以随心所欲地做任何事情。
我已经做到了这一点,不用修改库而是通过潜入事件来跟踪分析事件。
使用代理模式:
(function(proxied) {
window.alert = function() {
// do something here
return proxied.apply(this, arguments);
};
})(window.alert);
您还可以绕过原来的函数调用,如果你想要的(代理)
此处了解详情:JQuery Types #Proxy Pattern
绝妙的回答!我完全忘记了那个模式:) – roosteronacid 2009-11-13 15:00:28
没问题!我也对此分享乔什斯托多拉的观点,太棒了。 – 2009-11-13 15:03:01
是的。已经提出了他的答案。你的情况更加明确。它带有一个例子。这总是一个人群,pleaser :) – roosteronacid 2009-11-13 15:06:08
它确实在firefox和ie8中有效。我看不到有什么浏览器不能工作。这对于javascript的工作原理来说非常重要,即使人们不经常看到它与本机功能一起使用=)
专门针对IE浏览器将是IE6的其他人可能会好起来。 – AnthonyWJones 2009-11-13 14:29:40
我认为每个Javascript实现都会支持这一点,并且不存在任何危险。通常使用HTML/CSS来替换普通的OS风格的警报框更优雅。这样做意味着您不必更改现有代码!这是可能的事实使JavaScript真棒。
现代浏览器中的所有JavaScript实现都支持覆盖。
危险很简单,你可以通过重写alert()等常用函数来让其他团队成员完全疯狂。
因此,除非您将函数重写为可能以某种方式调试或破解现有代码的工具,否则我认为没有理由这样做。只需创建一个新功能。
当谈到js的浏览器功能window.alert
是杰出和最知名的,人们不知道谁JS知道alert()
- 放心它在所有的浏览器目前使用支持,您的代码段是以及。然而,我不会覆盖(这更像是重构而不是覆盖在OOP意义上)alert()
作为你的特定用例,因为当你实际上需要使用alert()
而没有模板,并且你可能会,我需要另一个非警报功能来做到这一点。
我与压倒一切的警报经验()函数是我们曾经用它来“黑客”试用版的JavaScript库,显示“请注册!”通过警报时间的唠叨屏幕。
我们刚刚定义了我们自己的alert()函数和voila。
这是仅用于测试目的,我们后来又买了完整版,所以没有什么不道德的事情在这里;-)
有在Overring报警功能没有危险。每个浏览器都会支持它。
例如:
// function over riding. Redirecting to Console with Firebug installed.
function alert(message) {
console.info(message);
}
alert('This is an override.');
上抛出异常,如果您的替换是非阻塞的,则可能会有危险。例如,调用alert(“重新加载”)并重新加载网页的代码。警报文本可能永远不会被用户看到。 – Darien 2014-01-22 23:26:25
虽然大多数浏览器都支持覆盖它,小心你用它做什么。
由于默认警告框会阻止执行线程,因此一些依赖此行为的库可能无法工作(最好)。
你应该是一个好公民,并避免触及本地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);
拉吉斯拉夫。
对于IE8可以像这样重新定义警报()
/**
* 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);
正如在许多其他的答案说,你可以只覆盖函数
window.alert = null
或
window.alert = function(){}
然而,这并不必然覆盖在Window
构造函数的原型功能(注意是大写W
),所以黑客仍然可以键入:
Window.prototype.alert.apply(window, ["You were hacked!"]);
因此,您还需要重写函数:
Window.prototype.alert = null
或
Window.prototype.alert = function(){}
快速黑客,我做寻找到警报s来自,是去控制台,然后输入这个
function alert(message) {
console.info(message);
debugger;
}
如果你倒票,解释原因。这可能只是因为我有一个完全合理的理由来做这件事。 – roosteronacid 2009-11-13 14:31:52
我不明白这里的倒票。 – 2009-11-13 14:32:43
这不是一个无限循环吗? – Pool 2009-11-13 14:39:40