2011-02-09 27 views
41

Tôi đã tự hỏi, làm thế nào tôi có thể tìm ra với javascript nếu đối tượng điều khiển có sẵn?tìm hiểu xem bàn điều khiển có sẵn

tôi có vấn đề nếu tôi quên xóa kết xuất gỡ lỗi như console.log('sthg') tôi gặp lỗi trong một số trình duyệt, nếu không có firebug hoặc tương tự, đang hoạt động.

nhờ sự giúp đỡ

bên cạnh vấn đề mà tôi quan tâm đến tất cả các thông tin về các đối tượng giao diện điều khiển. có ai đó liên kết tài liệu nào đó không? nó là một tiêu chuẩn? và vân vân ...

Trả lời

60

Kiểm tra tài sản tồn tại như một thành viên của window:

if (window.console) { 
} 

bên cạnh vấn đề mà tôi quan tâm đến tất cả các thông tin về các đối tượng giao diện điều khiển. có ai đó liên kết tài liệu nào đó không? nó là một tiêu chuẩn? và cứ thế ...

Kiểm tra Firebug documentation for the Console API; Chrome và Safari thực hiện hầu hết, nhưng không phải tất cả, trong số các phương pháp được liệt kê ở đó. Không có tiêu chuẩn xác định những gì nên có trong giao diện điều khiển, vì vậy bạn sẽ cần phải kiểm tra từng trình duyệt để xem nó có hỗ trợ tính năng này hay không.

+0

điều gì về chromes và giao diện điều khiển IE? :-) – helle

+0

@helle: Như tôi đã nói, Chrome triển khai hầu hết các phương pháp API của Firebug Console. IE thực hiện một số lệnh cơ bản, như 'warn',' error', 'info', v.v. nhưng nó không thực hiện tất cả chúng và dường như không có danh sách tài liệu, do đó bạn sẽ phải thử chúng bản thân bạn. –

+0

@AndyE bạn có thể giải thích lý do tại sao kiểm tra xem tài sản tồn tại trong cửa sổ không mạnh bằng cách sử dụng typeof không? Tại sao chúng ta không nên kiểm tra trực tiếp biến windows.console hoặc thậm chí chỉ cần điều khiển toàn cầu như trong các câu trả lời khác? – matpop

-4

lẽ ...

if (console) { 
    // do stuff 
} 
+6

Điều này sẽ ném một lỗi trong các trình duyệt nơi 'giao diện điều khiển' không được xác định. –

+0

yep ... đã thử điều này :-) – helle

5

Defined bởi firebug, IE8 (cần phải mở các công cụ nhà phát triển với F12), Chrome, vv nhưng không có đặc tả định nghĩa cho nó. Có một console.log wrapper mà làm cho nó rất dễ sử dụng, giải pháp ghi nhật ký trình duyệt chéo vì vậy nếu bàn điều khiển không tồn tại mã của bạn không phát nổ.

+0

Đó là những gì tôi đang tìm kiếm để đề xuất nhưng không thể nghĩ ra tên! Tốt để biết một số người khác tìm thấy nó. –

+0

Điều gì về chromes và giao diện điều khiển IE? :-) – helle

+0

@helle Vâng, tôi đoán IE8 đã thêm một giao diện điều khiển ngay bây giờ và không nghĩ đến Chrome. Cảm ơn. –

30

Một cách tốt đẹp đơn giản và ngắn xuất ra để giao diện điều khiển một cách an toàn như sau:

window.console && console.log('Debug message'); 
+0

+1 cho sự đơn giản: D – Tieme

+0

Tôi không nghĩ rằng điều này là rất tốt bởi vì ai đó có thể có bàn điều khiển ghi đè và .log không tồn tại. Bạn cũng nên kiểm tra xem .log tồn tại và thực sự là một hàm. – mambo

2

tôi luôn luôn bao gồm này trong đầu của tôi HTML-header trước khi tôi tải bất cứ điều gì khác. Gỡ lỗi với console.debug chỉ là quá dài đối với tôi. Và tôi muốn chuyển đổi việc sử dụng các chức năng của bàn điều khiển này.

Không biết cách tối ưu hóa mã, nhưng nó luôn hoạt động.

(function() { 
    var consoleDisabled = false; 
    if (consoleDisabled) { 
     window.console = undefined; 
    } 
    if (window.console == undefined) { 
     window.console = { 
      debug: function() { 
       return true; 
      }, 
      info: function() { 
       return false; 
      }, 
      warn: function() { 
       return false; 
      }, 
      log: function() { 
       return false; 
      } 
     } 
    } 
    debug = (function(args) { 
     window.console.debug(args); 
    }); 
    info = (function(args) { 
     window.console.info(args); 
    }); 
    warn = (function(args) { 
     window.console.warn(args); 
    }); 
    log = (function(args) { 
     window.console.log(args); 
    }); 
})(); 
debug(somevar); 
info(somevar); 
warn(somevar); 
log(somevar); 
4
try{ 
console.log("test") 
} 
catch(e){ 
console={}, 
console.log=function(a){} 
} 

chỉ cần đặt nó ở phía trên cùng của tập tin JS của bạn và sau đó sử dụng console.log(); mà không lo lắng về lỗi trình duyệt, tôi cũng đã gặp lỗi này trong IE9

+0

Giải pháp thú vị. Tôi thường không thích sử dụng các ngoại lệ để xử lý luồng, nhưng điều này có thể thực sự tiện dụng. – Hal

7

đây là những gì tôi sử dụng. lưu ý rằng tôi chỉ hỗ trợ các trình duyệt hỗ trợ nửa vời mà không hỗ trợ giao diện điều khiển. và tôi chỉ bao giờ sử dụng console.log(), nhưng bạn có thể xem làm thế nào nó có thể được mở rộng để hỗ trợ console.dir(), console.info(), vv

var console = console || { 
    "log": function(stuff) {} 
}; 

Tôi thích nó vì gọi nó không gây ra lỗi, nhưng nó trả về [không xác định], mà tôi nghĩ là thích hợp.

Lưu ý rằng nhiều nhiều người trước đó (và sau) chúng tôi đã viết polyfills tương tự:

https://gist.github.com/search?q=console+%7C%7C+console

+0

+1 vì tôi nghĩ đó là một ý tưởng hay. Câu trả lời của Andy E thực hiện chính xác những gì được hỏi, vì vậy anh ta vẫn có câu trả lời đúng. – helle

+0

đã đồng ý. đây là nhiều hơn một câu trả lời trực tiếp. Tôi rất vui vì bạn thích nó –

+0

Nó có thể có giá trị để nói rằng nó hoạt động vì chỉ thị _var_ thực sự được xử lý ** trước ** thực thi mã. – matpop

2

Cách đơn giản nhất sẽ là:

if (window.console){ 
    console.log('do something'); 
} 

thay vì chỉ viết:

console.log('do something'); 
Các vấn đề liên quan