有人有在JavaScript中重写alert()函数的经验吗?
哪些浏览器支持这个功能? 哪些浏览器版本支持此功能? 重写函数的危险是什么?
有人有在JavaScript中重写alert()函数的经验吗?
哪些浏览器支持这个功能? 哪些浏览器版本支持此功能? 重写函数的危险是什么?
当前回答
正如在许多其他答案中所述,您可以使用
window.alert = null
or
window.alert = function(){}
然而,这并不一定会覆盖Window构造函数原型上的函数(注意大写的W),所以黑客仍然可以输入:
Window.prototype.alert.apply(window, ["You were hacked!"]);
因此,你还需要重写该函数:
Window.prototype.alert = null
or
Window.prototype.alert = function(){}
其他回答
我认为每个Javascript实现都将支持这一点,并且这样做不会有任何危险。通常用HTML/CSS代替简单的os风格的警告框。这样做意味着您不必更改现有的代码!这一事实使得Javascript非常棒。
我做的一个快速破解来找到警报来自哪里,是去控制台,然后输入这个
function alert(message) {
console.info(message);
debugger;
}
When it comes to js browser functions window.alert is pre-eminent and most well known, people who don't know js know alert() -- rest assured it is supported in all browsers in use today and your code snippet is as well. However, I wouldn't override (well this is more like refactoring rather than override in the OOP sense) alert() for a particular use case as yours because when you actually need to use alert() with no template, and you probably will, then you'll need another non-alert function to do so.
我重写alert()函数的经验是,我们曾经使用它来“破解”JavaScript库的试用版,该库在每次提醒时都显示“请注册!”的提示屏幕。
我们刚刚定义了自己的alert()函数,瞧。
这只是为了测试,我们后来买了完整版,所以这里没有什么不道德的事情;-)
Ladislav。 对于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);
并调用as
alert('Hello, hacker!');
nalert('I am native alert');
alert('Hello, user!', Type.custom);