2011-02-10 32 views
11

Tôi đã điều sau đây:Tại sao Firefox 3 phá vỡ với console.log

console.log (a.time_ago() + ' ' + b.time_ago()); 

này được phá vỡ trong FireFox 3, có nghĩa là khi FF lượt truy cập mà dòng trong JS, nó đi đâu xa. Kỳ lạ nếu tôi có Firebug mở nó không phá vỡ và tiếp tục như bình thường. Một số cách firebug ngăn chặn vấn đề này?

Tôi đang bối rối về vấn đề này. Bất kỳ suy nghĩ về lý do tại sao console.log sẽ phá vỡ firefox 3, nhưng không phải nếu firebug được mở?

Cảm ơn

+0

không phải là một phần của console.log firebug? và do đó nếu nó không mở, không có thùng chứa để dán vào ... –

Trả lời

30

Đây không chỉ là Firefox. Mã của bạn sẽ ngừng hoạt động trong mọi trình duyệt (ngoại trừ Chrome và safari (trong một số trường hợp) vì chúng có console.log() được tích hợp cùng với các công cụ dành cho nhà phát triển của chúng.)

Đó là bởi vì khi bạn không có firebug mở , đối tượng "console" không được xác định. Bạn nên cẩn thận không bao giờ để lại các chức năng console.log() trong mã của bạn, hoặc nó sẽ phá vỡ trong mọi trình duyệt.


tôi muốn thêm rằng tôi đã đôi khi sử dụng chức năng này:

function log() { 
    if (typeof console == 'undefined') { 
     return; 
    } 
    console.log.apply(console, arguments); 
} 

Sau đó, bạn chỉ có thể gọi:

log(somevar, anothervar); 

và nó sẽ làm việc theo cách tương tự như giao diện điều khiển .log, nhưng sẽ không thất bại nếu firebug không được tải (và ngắn hơn để gõ: P)

Chúc mừng

+0

wow Tôi không có ý tưởng! – AnApprentice

+1

Bạn có thể sử dụng 'console.log()', chỉ cần kiểm tra nếu 'window.console' tồn tại trước khi gọi bất kỳ chức năng điều khiển nào. Ví dụ. 'if (window.console) console.log ('Hello World');' – Michal

+1

safari cũng có console.log – generalhenry

1

Tôi luôn thực hiện kiểm tra if (console) để đảm bảo bảng điều khiển thực sự tồn tại. Nếu firebug không mở nó giống như bạn đang hành động trên một đối tượng null, vậy tại sao nó phá vỡ.

+0

Một [đối tượng rỗng] (http://en.wikipedia.org/wiki/Null_object) sẽ lặng lẽ nuốt nhật ký, điều này sẽ hoạt động tốt ... – delnan

+1

@delnan: Tôi nghĩ những gì bobber có nghĩa là 'console' có giá trị' null' (không đúng, nó là 'undefined'). Nhưng trong cả hai trường hợp, mã sẽ bị phá vỡ. –

+0

Ah vâng. Có nghĩa là không xác định! : D – bobber205

1

Firefox không có đối tượng điều khiển. Firebug thêm một.

Việc sửa chữa đơn giản là phải có firebug mở để phát triển và xóa bảng điều khiển console.log để triển khai.

bạn cũng có thể thực hiện một chức năng đăng nhập tùy chỉnh như

function log (msg) 
{ 
    if(console) 
    { 
    console.log(msg); 
    } 
} 

rằng sẽ đăng nhập chỉ khi console tồn tại

+0

vấn đề với chức năng này là nó sẽ không chấp nhận nhiều đối số và tham số giống như giao diện console.log() và nếu (console) không thực sự là kiểm tra tốt nếu đối tượng được xác định hay không trong javascript . – arnorhs

+0

mã snipit không có ý định hoạt động, chỉ để có ý tưởng. Tôi muốn đăng một ví dụ thực sự nhưng bạn đánh bại tôi quá nó: p – generalhenry

2

Trong FireFox nếu giao diện điều khiển không được mở ra khi bạn gọi đến cho nó một lỗi JavaScript được ném .

Tôi bọc tất cả console.log của mình trong trình bao bọc để kiểm tra bàn điều khiển - bạn có thể quấn kiểm tra xung quanh cuộc gọi bảng điều khiển hoặc sử dụng tên khác cho bảng điều khiển bí danh.

Aliasing

/* konsole is a safe wrapper for the Firebug console. */ 
var konsole = { 
    log: function(args){}, 
    dir: function(args){}, 
    debug: function(args){}, 
    info: function(args){}, 
    warn: function(args){}, 
    error: function(args){} 
}; 
// Remove below here when in production 
if (typeof window.console != 'undefined' && typeof window.console.log == 'function') { 
    konsole = window.console; 
} 
konsole.log('testing debugging'); 
konsole.error('throw an error message to the console'); 

Kiểm tra cho giao diện điều khiển

if (typeof window.console != 'undefined' && typeof window.console.log == 'function') { 
    console.log('testing debugging'); 
    console.error('throw an error message to the console'); 
} 
4

Trong trường hợp, con đom đóm đó được đóng lại, tôi ghi đè lên các đối tượng giao diện điều khiển. Vì vậy, bạn có thể triển khai các chức năng dự phòng ...

console = console || { log : function() { 
// place your logging code here, if firebug is closed 
}, debug : function() { 
// place your debug code here, if firebug is closed 
} /*, [ and so on .. ] */ }; 

Greetings,

Dyvor

0

Để giữ cho Firefox 3.0 từ phàn nàn đáng tin cậy sử dụng sau đây ...

if ('console' in window) {} 
Các vấn đề liên quan