2011-02-10 12 views
11

Mam następujący:Dlaczego Firefox 3 zerwanie z console.log

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

To jest złamanie w Firefoksie 3, co oznacza, że ​​gdy FF uderza linię w JS, to idzie dalej. O dziwo, jeśli mam otwarty Firebug, to nie pęka i trwa normalnie. Jaki sposób firebug zapobiega temu problemowi?

Jestem zdziwiony tym. Wszelkie przemyślenia, dlaczego console.log złamie firefox 3, ale nie, jeśli firebug jest otwarty?

Dzięki

+0

nie Czy console.log część Firebug? a więc jeśli nie jest otwarty, nie ma pojemnika do wklejenia ... –

Odpowiedz

30

To nie jest tylko przeglądarka Firefox. Twój kod będzie przestać działać w każdej przeglądarce (oprócz Chrome i Safari (w niektórych przypadkach), ponieważ mają console.log() zbudowany w wraz z ich narzędzi programistycznych.)

To dlatego, gdy nie masz Firebug otwarty , obiekt "konsola" nie jest zdefiniowany. Należy zachować ostrożność, nigdy nie pozostawiać funkcji console.log() w kodzie, lub będzie on łamał się w każdej przeglądarce.


Chciałbym dodać, że czasami wykorzystywane tę funkcję:

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

Następnie można po prostu zadzwonić:

log(somevar, anothervar); 

i będzie działać tak samo jak konsola .log, ale nie zawiedzie, jeśli firebug nie zostanie załadowany (i jest krótszy w typie: P)

Pozdrowienia

+0

wow, nie miałem pojęcia! – AnApprentice

+1

Możesz użyć 'console.log()', sprawdź czy 'window.console' istnieje przed wywołaniem jakichkolwiek funkcji konsoli. Na przykład. 'if (window.console) console.log (" Hello World ");' – Michal

+1

safari ma również konsolę.log – generalhenry

1

Zawsze wykonuję test if (console), aby upewnić się, że konsola faktycznie istnieje. Jeśli firebug nie jest otwarty, to tak jakbyś działał na obiekt zerowy, a więc dlaczego się łamie.

+0

A [obiekt zerowy] (http://en.wikipedia.org/wiki/Null_object) po cichu połknie rejestrację, co będzie działało dobrze ... – delnan

+1

@delnan: Myślę, że określenie "spławik" oznacza, że ​​'console' ma wartość' null' (co nie jest prawdą, jest 'niezdefiniowane'). Ale w obu przypadkach kod zostanie złamany. –

+0

Ah tak. Meant undefined! : D – bobber205

1

Firefox nie ma obiektu konsoli. Firebug dodaje jeden.

Najprostszym rozwiązaniem jest otwarcie firebuga w celu rozwoju i usunięcie instrukcji console.log do wdrożenia.

można również utworzyć funkcję dziennika niestandardowego jak

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

która logowania tylko wtedy, gdy konsola istnieje

+0

Problem z tą funkcją polega na tym, że nie przyjmuje ona wielu argumentów i parametrów w taki sam sposób jak robi to konsola.log(), a także jeśli (konsola) nie jest tak naprawdę dobrym sprawdzeniem, czy obiekt jest zdefiniowany czy nie w javascriptie . – arnorhs

+0

kod snipit nie miał być funkcjonalny, tylko po to, by uzyskać lepszy pomysł. Dodałbym prawdziwy przykład, ale mnie też biłeś: str – generalhenry

2

w Firefoksie jeśli konsola nie jest otwarty, gdy dzwonisz do niego błędu JavaScript jest wyrzucany .

Zawijam wszystkie moje pliki console.log w opakowaniu, aby sprawdzić konsolę - można albo zawijać zaznaczenie wokół wywołania konsoli, albo użyć innej nazwy do aliasu konsoli.

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'); 

Sprawdź konsoli

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

na wszelki wypadek, że Firebug jest zamknięta, ja zastąpić obiekt konsoli. Możesz więc zastosować funkcje zastępcze ...

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 .. ] */ }; 

Pozdrowienia,

Dyvor

0

Aby zachować Firefox 3.0 z sędzią niezawodnie używać następujących ...

if ('console' in window) {} 
Powiązane problemy