2011-06-23 42 views
5

Tôi muốn đặt người nghe cho console.log() và làm điều gì đó với tin nhắn mà không ngăn chặn hành vi mặc định. Vì vậy, giao diện điều khiển của các công cụ dev cũng sẽ nhận được thông báo. Bất kỳ ý tưởng?Nghe console.log

Trả lời

8

Không bao giờ thử điều này trong một trang web, nhưng nó hoạt động trong một plugin trình duyệt (nơi quyền javascripts là không giống nhau vì lý do bảo mật).

Bạn dứt khoát có thể đi cho một cái gì đó như thế này:

(function(){ 

    var originallog = console.log; 

    console.log = function(txt) { 
     // Do really interesting stuff 
     alert("I'm doing interesting stuff here !"); 

     originallog.apply(console, arguments); 
    } 

})(); 

Điều buồn cười trong javascript là chức năng đó là những đối tượng quá: D

+0

Có vẻ như 'console.log' không thể hoạt động bên ngoài đối tượng' console' - có lẽ nó dựa vào biến 'this'. Ngoài ra, tôi không xem xét có chức năng như các đối tượng vui nhộn: đó là điều làm cho ngôn ngữ này trở nên tuyệt vời. –

+0

Bạn đã đúng! Tôi đã chỉnh sửa câu trả lời của mình. Chúng tôi sẽ đến một câu trả lời tuyệt vời cho cả hai chúng tôi;) – deadalnix

+0

Điều này thật tuyệt. +1 –

2

Đây là một hack nhỏ, nhưng tôi không chắc chắn có là một giải pháp tốt hơn:

console._log_old = console.log 
console.log = function(msg) { 
    alert(msg); 
    console._log_old(msg); 
} 
+0

Vấn đề với giải pháp đó là nó có tác dụng phụ trên phạm vi toàn cầu. Một giải pháp tốt hơn là lưu trữ console._log_old trong một biến cục bộ trong một kết nối thay vì trong phạm vi toàn cục. – deadalnix

+0

@deadalnix không hoạt động, hãy xem nhận xét của tôi về bài đăng của bạn –

+0

Có, bằng cách áp dụng;) Xem câu trả lời đã chỉnh sửa của tôi. Cảm ơn vì đã làm điều này dù sao đi nữa, điều đó đúng trong phiên bản trước và tôi đã không nhận ra điều đó ngay từ đầu. – deadalnix

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