我只是很想知道 在任何浏览器中是否有任何方法可以找出我从哪里获得警报?
我在Chrome中尝试了它,但是在警报显示时没有可用的调用堆栈。
有什么想法吗?
答案 0 :(得分:96)
您可以覆盖alert
,并为堆栈跟踪创建Error
:
var old = alert;
alert = function() {
console.log(new Error().stack);
old.apply(window, arguments);
};
答案 1 :(得分:4)
您可以通过monkeypatch警报执行此操作:
//put this at the very top of your page:
window.alert = function() { throw("alert called") }
答案 2 :(得分:4)
如何包装alert
?
window.original_alert = alert;
alert = function (text) {
// check the stack trace here
do_some_debugging_or_whatever();
// call the original function
original_alert(text);
}
这应该是跨浏览器。
答案 3 :(得分:1)
所有主要的浏览器都提供了控制台的跟踪功能。 console.trace();
使用代理方法(如先前答案中所述)和console.trace(),我们可以在控制台本身中打印带有行号的整个堆栈。
(function(proxied) {
window.alert = function() {
console.trace();
return proxied.apply(this, arguments);
};
})(window.alert);
这是IIFE。每个警报呼叫将在控制台中打印其踪迹。