2011-10-25 31 views
12

Tôi đang cố gắng sử dụng console.log để đặt một số đăng nhập vào bên javascript của chương trình của tôi. Mặc dù vậy, tôi nhận thấy rằng trừ khi bàn điều khiển dev mở trong IE, JS cơ bản ngừng hoạt động khi nó chạm console.log. Đây là một nỗi đau ... nó có nghĩa là tôi phải loại bỏ tất cả các đăng nhập bất cứ khi nào tôi muốn làm một xây dựng sản xuất.Có cách nào để đăng nhập vào bàn điều khiển mà không cần mã đột nhập dưới IE không?

Bên cạnh những rõ ràng:

function DoSafeConsoleLog(parameters) 
{ 
    if (!$.browser.msie) 
    { 
     console.log(parameters); 
    } 
} 

là có một cách tốt để đăng nhập javascript đó là thân thiện với tất cả các trình duyệt chính?

EDIT:

Vâng, sau khi xem xét các bài trùng lặp (oops) cũng như xem xét các câu trả lời ở đây, tôi đã bên gotta với chỉ kiểm tra cho sự tồn tại của giao diện điều khiển trước khi gọi. Mặc dù tôi không muốn có thêm đánh dấu, tôi không muốn bước chân vào các lập trình viên tương lai, những người có thể muốn sử dụng Firebug Lite để gỡ lỗi mã của tôi.

+0

thể trùng lặp của [Kiểm tra cho báo cáo console.log trong IE] (http://stackoverflow.com/questions/7585351/test-for-console-log-statements-in-ie) – zzzzBov

+0

bản sao có thể có của ['console' là lỗi không xác định đối với trình khám phá internet] (http://stackoverflow.com/questions/3326650/console-is-undefined-error -for-internet-explorer) – skolima

Trả lời

9

IE có giao diện điều khiển của riêng mình, và bạn sẽ không muốn ghi đè lên giao diện điều khiển nếu bạn đang sử dụng firebug lite. Chỉ cần chắc chắn rằng console tồn tại khi đăng nhập được gọi:

if (window.console) console.log('foo bar baz', fizz, buzz); 

Hơn thế nữa, sử dụng && để tắt:

window.console && console.log('foo bar baz', fizz, buzz); 
+1

Ý của bạn là "IE có giao diện điều khiển riêng?" Giao diện điều khiển nó cung cấp các công trình vui vẻ với console.log NẾU bàn điều khiển dành cho nhà phát triển đang mở. Các trình duyệt khác có thể đăng nhập vào bảng điều khiển của họ ngay cả khi nó không được mở một cách rõ ràng. Chỉ cần tò mò, không nói câu trả lời của bạn là không chính xác cả. Bạn chắc chắn có điểm hợp lệ tôi đang xem xét. :) –

+0

Tôi đã chuyển sang 'window.console && console.log() 'và bây giờ mọi thứ hoạt động trong IE! – Avishai

+0

Chỉ cần một người đứng đầu, nó là chủ yếu là một ý tưởng tồi để cho 'console.log' seep vào mã sản xuất của bạn. –

15

Bạn có thể tạo ra một giả console:

if (typeof console === "undefined") 
    console = { log: function() { } }; 
+0

Tôi không đặc biệt thích ý tưởng này vì nó sẽ ghi đè lên bàn giao tiếp được thêm sau khi tải trang như [Firebug lite] (http://getfirebug.com/firebuglite). – zzzzBov

+0

Thành thật mà nói tôi đã chiến đấu với firebug lite rất nhiều và kết thúc loại bỏ nó. Tôi thấy rằng bảng điều khiển dành cho nhà phát triển của Chrome đủ để tôi tìm hiểu mọi thứ - và Firebug lite sẽ bị trục xuất có thể một lần một ngày và phải đóng cửa. Chỉ là kinh nghiệm của tôi. –

+1

@Sean Anderson, ' 'sẽ chỉ thêm nó cho IE. – zzzzBov

0
function log(log){ 
    try{ 
    console.log(log); 
    }catch(err){} 
} 
0

Tôi đang sử dụng fauxconsole; Tôi sửa đổi css một chút để nó trông đẹp hơn nhưng hoạt động rất tốt.

1

tôi sử dụng này đoạn mã bản thân mình

if (! ('console' in window)) { 
var names = ['log', 'debug', 'info', 'warn', 'error', 'assert', 'dir', 'dirxml', 'group', 'groupEnd', 'time', 'timeEnd', 'count', 'trace', 'profile', 'profileEnd']; 
window.console = {}; 
for (var i = 0; i < names.length; ++i) window.console[names[i]] = function() {}; 
}else { 
/*if it exists but doesn't contain all the same methods....silly ie*/ 
var names = ['log', 'debug', 'info', 'warn', 'error', 'assert', 'dir', 'dirxml', 'group', 'groupEnd', 'time', 'timeEnd', 'count', 'trace', 'profile', 'profileEnd']; 
for (var i = 0; i < names.length; ++i) if(!window.console[names[i]])window.console[names[i]] = function() {}; 
}; 
0

tôi giải quyết nó bằng cách sử dụng "console giả" được mô tả ở trên, để ngăn chặn sự phá vỡ kịch bản thực hiện. Nó được bao gồm chỉ cho InternetExplorer tôi bao gồm này trong đầu html của tôi:

<!--[if lte IE 10]> 
    <script> if (typeof console === "undefined") console = { log: function() { } }; </script> 
<![endif]--> 
Các vấn đề liên quan