2011-10-18 25 views
38

Tôi chỉ tò mò muốn biết
Có BẤT K ways cách nào trong BẤT KY trình duyệt nào để tìm ra nơi tôi nhận được cảnh báo từ đâu không?Làm thế nào để biết được cảnh báo được nâng lên từ đâu?

Tôi đã thử bằng chrome nhưng không có ngăn xếp cuộc gọi khả dụng khi cảnh báo hiển thị.

Bất kỳ ý tưởng nào?

+3

Có thể liên quan: http://stackoverflow.com/questions/3638249/debug-js-code-which-triggers-an-alert –

Trả lời

79

Bạn có thể ghi đè lên alert, và tạo ra một Error cho stack trace:

var old = alert; 

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

Cảm ơn !! Tôi không bao giờ nghĩ rằng cảnh báo là một thành viên của cửa sổ! –

+0

Cũng có thể tiện dụng để thay thế câu lệnh console.log bằng câu lệnh trình gỡ rối để bạn bị rơi vào trình gỡ lỗi tại thời điểm cảnh báo được gọi. –

+0

tôi không thể cảm ơn đủ về điều này. tôi có một trang web cũ với rất nhiều vấn đề. Một trong số đó là XSS khắp nơi. vì vậy tôi đặt một giá trị thành cảnh báo ' 'sau đó có cơn ác mộng để xác định vị trí tất cả các nơi mà chuỗi đã được đánh giá, và cảnh báo đã bật lên. Câu trả lời của bạn cực kỳ hữu ích. Bây giờ hãy để tôi nín thở và quay trở lại cái bồn nước đó. – Sharky

4

Bạn có thể monkeypatch cảnh báo để làm như vậy:

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

Làm thế nào về gói các 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); 
} 

Đây phải là trình duyệt chéo.

Các vấn đề liên quan