2011-02-10 20 views
11

我有以下幾點:爲什麼Firefox 3的斷裂與執行console.log

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

這是打破在Firefox 3中,當FF打在JS該行的意思,它去沒有進一步。奇怪的是,如果我打開Firebug,它不會中斷並繼續正常。一些螢火蟲如何防止這個問題?

我對此感到困惑。任何想到爲什麼console.log會打破Firefox 3,但不是如果螢火蟲打開?

謝謝

+0

是不是螢火蟲的一部分的console.log?因此,如果它沒有打開,沒有容器粘貼到... –

回答

30

這不只是Firefox。您的代碼將停止在每個瀏覽器(除了Chrome和Safari瀏覽器(在某些情況下),因爲他們有與他們的開發工具一起內置console.log()除外)。

這是因爲當你沒有螢火蟲打開,沒有定義對象「控制檯」。你應該小心,千萬不要在你的代碼中留下console.log()函數,否則它將在每個瀏覽器中破壞


我想補充一點,我有時用這個功能:

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

然後,您只需撥打:

log(somevar, anothervar); 

,它的工作方式是相同的控制檯.log,但是如果沒有加載螢火蟲,並且不會失敗(並且類型:P更短)

乾杯

+0

哇我不知道! – AnApprentice

+1

你可以使用'console.log()',在調用任何控制檯函數之前檢查'window.console'是否存在。例如。 'if(window.console)console.log('Hello World');' – Michal

+1

safari也有console.log – generalhenry

1

我總是做一個if (console)檢查以確保控制檯確實存在。如果螢火蟲未打開,就好像你正在處理一個空對象,這就是爲什麼它打破了。

+0

[空對象](http://en.wikipedia.org/wiki/Null_object)會默默吞下日誌記錄,這將工作正常... – delnan

+1

@delnan:我認爲浮子的意思是'console'具有'null'的值(這不是真的,它是'undefined')。但是在這兩種情況下,代碼都會中斷。 –

+0

啊是的。 Ment undefined! :D – bobber205

1

Firefox沒有控制檯對象。 Firebug添加一個。

簡單的解決方法是讓firebug爲開發打開並移除console.log語句以進行部署。

,您還可以像

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

自定義日誌功能,如果控制檯存在

+0

這個函數的問題在於它不會接受多個參數和參數,就像console.log()一樣,而且如果(控制檯)不是很好的檢查一個對象是否被定義或者不在javascript中。 – arnorhs

+0

代碼片段不是爲了實現功能,而是爲了實現這個想法。我會發佈一個真實的例子,但你也打敗了我:p – generalhenry

2

在Firefox中,將只記錄,如果控制檯未打開,當你打電話給它的JavaScript錯誤被拋出。

我將我所有的console.log包裝在一個包裝中以檢查控制檯 - 您可以圍繞控制檯調用包裝檢查,也可以使用別名控制檯的不同名稱。

別名

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

檢查控制檯

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

在情況下,螢火蟲被關閉,我覆蓋控制檯對象。所以,你可以實現後備功能...

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

問候,

Dyvor

0

爲了讓火狐3.0從抱怨可靠使用下面...

if ('console' in window) {} 
相關問題