2011-08-16 23 views
9

Có thể truy cập vào console.log sau khi nó bị ghi đè không?Truy cập window.console sau khi ghi đè

window.console = { log: function (msg) { alert(msg); }, /* etc... */ }; 

Bạn có thể lấy lại chức năng console.log ban đầu không?

+1

Bản gốc là gì? Firebug? –

Trả lời

17

Bạn có thể sao lưu bảng điều khiển trước khi ghi đè lên.

var oldConsole = window.console; 
window.console = { log:function(msg){alert(msg)} //...}; 

Sau đó, bạn có thể sử dụng biến số oldConsole.

oldConsole.log('test'); 

Nếu bạn không thể trở lại nó lên, bạn có thể tạo một iFrame, sau đó ăn cắp giao diện điều khiển từ đó (điều này có thể không làm việc trong tất cả các trình duyệt):

var i = document.createElement('iframe'); 
i.style.display = 'none'; 
document.body.appendChild(i); 
window.console = i.contentWindow.console; 

Demo: http://jsfiddle.net/jcG7E/2

+0

@Downvoter: Tại sao một downvote? –

+1

Câu trả lời dưới đây (xóa window.console) hữu ích hơn. Tôi muốn nói nó phải là câu trả lời được chấp nhận cho câu hỏi này. – noah

+0

@RocketHazmat ý tưởng đánh cắp giao diện điều khiển từ iframe là một hack khá đẹp! –

-1

Không thể thực hiện được. Ngoại trừ nếu bất cứ ai đã ghi đè lên nó đã bao gồm một số mã để hoàn tác nó.

0
var customLog = { 
    oriLog: '', 
    Log: function(){ 
     // create string to display 
     var displaystring = ''; 
     for (var i = 0, len = arguments.length; i < len; i++) { 
      displaystring += arguments[i]; 
      if (i + 1 != len) 
       displaystring += ', '; 
     } 
     alert(displaystring); 
     customLog.oriLog(arguments); 
    } 
} 
window.onload = function(){ 
    if (console != null) { 
     customLog.oriLog = console.log; 
     console.log = customLog.Log; 
    } 

} 
5

Sửa (2017/04/08): tư vấn này đã lỗi thời, trong Firefox 52 và Chrome 57 console không còn được xác định trên nguyên mẫu cửa sổ và xóa nó thực sự sẽ xóa nó.


Ít nhất là với đối tượng console xác định bởi trình duyệt Firefox và Chrome, bạn chỉ có thể xóa các tài sản ghi đè để khôi phục lại bản gốc một:

window.console = {}; 
delete window.console; 
window.console.log("This works!"); 

này hoạt động như nếu tài sản console được xác định trên nguyên mẫu của đối tượng window - ngoại trừ việc nó không phải là, các trình duyệt đang thực hiện một số phép thuật ở đây.

+0

Điều này dường như không hoạt động trong phiên bản Chrome mới nhất. – RelaXNow

+1

@RelaXNow: Thật vậy, tư vấn này đã hết hạn. Tôi đã thêm một ghi chú vào đó. –

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