Javascript 如何找出警报从何处发出?

Javascript 如何找出警报从何处发出?,javascript,html,firefox,google-chrome,browser,Javascript,Html,Firefox,Google Chrome,Browser,我只是想知道 在任何浏览器中是否有任何方法可以找出我收到的警报是从何处发出的 我在chrome上试过,但当警报显示时,没有可用的调用堆栈 有什么想法吗?您可以通过monkeypatch警告: //put this at the very top of your page: window.alert = function() { throw("alert called") } 您可以覆盖警报,并为堆栈跟踪创建错误: var old = alert; alert = function() {

我只是想知道
在任何浏览器中是否有任何方法可以找出我收到的警报是从何处发出的

我在chrome上试过,但当警报显示时,没有可用的调用堆栈


有什么想法吗?

您可以通过monkeypatch警告:

//put this at the very top of your page:
window.alert = function() { throw("alert called") }

您可以覆盖
警报
,并为堆栈跟踪创建
错误

var old = alert;

alert = function() {
  console.log(new Error().stack);
  old.apply(window, arguments);
};

如何包装
警报

window.original_alert = alert;
alert = function (text) {
    // check the stack trace here
    do_some_debugging_or_whatever();

    // call the original function
    original_alert(text);
}

这应该是跨浏览器的。

所有主要浏览器都提供了跟踪功能。 console.trace()

使用代理方法(如前面的回答中所述)和console.trace(),我们可以在console本身中打印带有行号的整个堆栈

(功能(代理){
window.alert=函数(){
console.trace();
返回proxied.apply(这个,参数);
};

})(窗口警报)可能相关:谢谢!!我从没想过alert是window的一员!用调试器语句替换console.log语句也很方便,这样您就可以在调用alert时被放入调试器中。对此我感激不尽。我有一个有很多问题的旧网站。其中一个到处都是XSS。因此,我将一个值设置为
alert('XSS!')然后是一场噩梦,找到所有评估字符串的位置,警报弹出。你的回答非常有用。现在让我屏住呼吸,回到那个污水池。谢谢,这个答案非常有助于诊断这个非常关键的问题。这是我见过的最整洁的技巧之一。如果可以,我会给这个“StackOverflow gold”(就像reddit gold一样)。非常感谢。