是否可以检查浏览器提供的功能是否已被用户代码替换?
function alert(str){
document.write(str);
}
alert('hello world');
答案 0 :(得分:1)
您可以查看
if (/function alert\(\) \{\s*\[native code\]\s*\}/.test(alert))
正则表达式是必要的,因为Firefox会返回换行符。
请注意,覆盖alert.toString
或Function.prototype.toString
可以很容易地解决此问题。
答案 1 :(得分:1)
无法知道浏览器方法是否过度覆盖。 e.g。
function foo(){
return 'foo was called';
}
foo.toString = function() {
return 'function alert() {\n [garbage code]\n}';
};
var a = window.alert;
window.alert = foo;
a(window.alert);
document.write(alert);
关于所有你可以说的是,如果你没有得到默认的响应,那么该方法可能已被修改,因为主机方法的 toString 方法通常是只读的。但是如果你得到默认值,你就不知道它是否被修改过。