0

我正在做一个项目,并注意到其中一位核心开发人员覆盖alert()了他的 JS 中的方法。

是否可以在不询问/更改他的代码的情况下恢复它?

他做了类似..

function alert() {
   // his code
}
4

2 回答 2

5

你可以做一个中间件<iframe>

var f = document.createElement("iframe");
f.width = 0;
f.height = 0;
f.src = "about:blank";
f.onload = function() {
    f.contentWindow.alert("Hi!");
    document.body.removeChild(f);
};
document.body.appendChild(f);

不要做中间件<iframe>

于 2013-09-26T00:36:43.703 回答
2

如果您可以在导致此问题的代码之前注入代码,则可以“修复”它:

例如

window._alert = window.alert;
// bad code ..
window.alert = function() {};
// restore correct function
window.alert = window._alert;

当然,这意味着其他代码现在可能无法正常运行或导致不需要的警报框。

它还取决于其他代码覆盖的准确程度alert。如果只是草率的代码,其中调用的函数被alert错误地提升到全局范围,您可能会通过将整个代码块包装在匿名函数中来修复它:

(function() {
    // scope to this block
    var alert;

    // bad code here
    alert = function() {};
})();
// alert doesn't pollute global scope:
alert("HI");
于 2013-09-26T00:31:27.893 回答