2011-05-17 98 views
28

我正在編寫一個插件。爲此,我會記錄一些事情,比如警告,necc等等。要記錄它們,我將使用控制檯,但如果某些瀏覽器不支持控制檯,則可能會出現錯誤。要處理這個錯誤,我想使用這個代碼:檢查控制檯是否存在

if (typeof console == 'undefined') console = {}; 
if (typeof console.log == 'undefined') console.log = function() {}; 
if (typeof console.debug == 'undefined') console.debug = function() {}; 
if (typeof console.info == 'undefined') console.info = function() {}; 
if (typeof console.warn == 'undefined') console.warn = function() {}; 
if (typeof console.error == 'undefined') console.error = function() {}; 

這個工作是否正確或有更好的選擇?

回答

34

你正在接近它。然而,你可能會縮短一點:

if(typeof console === "undefined") { 
    console = { 
     log: function() { }, 
     debug: function() { }, 
     ... 
    }; 
} 

這允許您使用console.log/console.debug etc沒有首先檢查是否控制檯對象被定義。如果您正在登錄,我建議始終包含此代碼段,因爲它很容易忘記刪除,並且如果沒有控制檯存在,它會破壞您的網站。

2
console && console.log("whatever"); 

這不行嗎?

+0

我相信你可以做'console.log(「whatever」)||真的;'或類似的東西。我在幾個月前看到它,並且不記得開發者是如何做到的,但我認爲這是正確的。 – Endophage 2011-05-17 20:18:59

+0

@Endophage如果控制檯不受支持,你會得到一個「無法調用方法」的未定義日誌,一個正確的在線檢查將是: 'console && console.log && console.log(「whatever」)' – Lior 2012-10-31 14:10:07

9

這種方法可以更容易地添加/修改/刪除在未來的方法和更優雅和更少的冗餘比大多數提供:

if (!"console" in window || typeof console == "undefined") { 
    var methods = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"]; 
    var emptyFn = function() {}; 
    window.console = {}; 
    for (var i = 0; i < methods.length; ++i) { 
     window.console[methods[i]] = emptyFn; 
    } 
} 
0

如何縮短@alexn的回答有點

window.console = window.console || { debug: function(){}, log: function() { } }; 
相關問題