JavaScript 覆写原生方法 overwrite native method

摘要:JavaScript 覆写原生方法 overwrite native method


如果你认为 eval is evil,可以透过覆写 eval禁止使用…

当然,在正式环境这样用一定会出事,没有人用 eval就算了,真有人用,让别人的程序坏掉还不被打吗XD

程序要告知使用者执行结果,或其他消息,可能会使用 alert,如果觉得 alert很丑、很碍事、很不友善,也可以覆写 alert

但是 alert有些特性无法模拟,像是暂停 script执行,或是让 alert依序一个一个执行在实践上也有点麻烦,还有阻挡鼠标继续点击页面之类的…所以这个想法只做完覆写就不玩了XD;剩下可以胜出原有 API的部分我只想到 UI调整,让每个浏览器 alert的界面相同…但这部分要胜过 jQuery UI要做的事更多…不如直接拿 jQuery UI来用XD

然后是本文的起源了…(是的,前面都是引申XD),刚刚想覆写 document.write,记录每次 write的内容,所以我写了这个

但是这中间我遇到一个无法了解的错误

(function(doc) {
    doc.write(123);
    var _write = doc.write;
    _write.apply(doc, [123]);
    //_write(123); //CHROME: Illegal invocation,为什么?如果是安全性考量,为什么透过 apply又可以执行?
})(document);

附注:覆写原生方法最初是在网络攻击的文章里面看到的,script file注入其他网站之后可以透过这样的方式发动攻击…一个防守的方法是透过建立 iframe产生干净、安全的环境,再用这里面的原生方法,绕很大一圈,而且防守重点应该放在避免被注入啊~!

原文:大专栏  JavaScript 覆写原生方法 overwrite native method


猜你喜欢

转载自www.cnblogs.com/chinatrump/p/11491079.html