我正在做一个项目,并注意到其中一位核心开发人员覆盖alert()
了他的 JS 中的方法。
是否可以在不询问/更改他的代码的情况下恢复它?
他做了类似..
function alert() {
// his code
}
我正在做一个项目,并注意到其中一位核心开发人员覆盖alert()
了他的 JS 中的方法。
是否可以在不询问/更改他的代码的情况下恢复它?
他做了类似..
function alert() {
// his code
}
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>
。
如果您可以在导致此问题的代码之前注入代码,则可以“修复”它:
例如
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");