我可以找出主机功能是否被覆盖了吗?

时间:2011-12-21 03:53:47

标签: javascript

是否可以检查浏览器提供的功能是否已被用户代码替换?

function alert(str){
    document.write(str);
}

alert('hello world');

2 个答案:

答案 0 :(得分:1)

您可以查看

if (/function alert\(\) \{\s*\[native code\]\s*\}/.test(alert))

正则表达式是必要的,因为Firefox会返回换行符。

请注意,覆盖alert.toStringFunction.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 方法通常是只读的。但是如果你得到默认值,你就不知道它是否被修改过。