2009-07-29 4 views
0

私は...それはFirefoxで正常に動作しますが、IE7で、私はエラーを取得しています... jQueryプラグインとして関数/メソッドがIE7に存在する場合、JSでどのように判断できますか?

コンソールを

(function($){ 
    $.log = function(debug) {  
     if (console.debug) {    
      console.debug(debug);   
     };  
    }; 
})(jQuery); 

を迅速かつ汚いロガーを書きました。デバッグがnullまたはオブジェクトではありません

JavaScriptでIE7と互換性のある関数を実行するにはどうすればよいですか?

答えて

4

console.debugは、Firefoxで動作するFirebugに固有です。

console.logを確認する前に、window.consoleが利用可能かどうかを確認する必要があります。

ここでエラーなしで作り直しあなたのコードです:コンソールはデバッグが関数であるかどうかを確認、その後、定義されている場合

(function($){ 
    $.log = function(debug) { 
     if (window.console && console.debug) { 
       console.debug(debug); 
     }; 
    }; 
})(jQuery); 
+1

IE8の開発ツールを、コンソールを持っています – redsquare

+1

Safariはデベロッパーモードを有効にしています。 – alex

+0

私が開発したものではないので、実際にコンソールツールをあまり使用していません。 –

3

チェック:

if (typeof(console) != 'undefined' && typeof(console.debug) == 'function'){ 
    //... 
} 
+0

実際には、コンソールが定義されていないと、エラーがスローされることは間違いありません。 window.console(「名前空間」またはオーナーオブジェクトを指定)または typeof console == 'オブジェクト' && typeof console。 debug == 'function' –

+0

実際には 'console is undefined'というエラーが発生しました – alex

+0

彼の修正されたものが動作するはずです。 idは1ライナー以来、私が好きだが(動作していれば)。 –

3
$.log = window.console && console.debug ? function(debug) { console.debug(debug); } : function(){}; 

バリエーション:

$.log = function(debug) { 
    if (window.console && console.debug) { 
     console.debug(debug) 
    } 
} 

$.log = function(msg) { 
    if (window.console) { 
     if (console.debug) console.debug (msg) 
     else if (console.log) console.log (msg) 
    } 
} 

$.log = function(msg) { 
    if (typeof console === 'object' && typeof console.debug === 'function') { 
     console.debug(msg) 
    } 
} 

$.log = 'console' in window && console.debug ? function(m){console.debug(m)}:function(){} 

$.log = function() { 
    if ('console' in window) { 
     console.debug ? function(m){console.debug(m)} : (console.log ? function(m){console.log(m)} : function(){} 
    } 
} 

$.log = window.log = function(m){ if(window.console && console.debug) console.debug(m) } 
+0

私はこれを試していないが、うまくいくと思うだろう。 –

+0

ああ、その反応に全部出かけましたか? :) –

+0

+1それは良い応答です。 – alex

0

上記の回答はすべてcor rectのようになりますが、ログ・ステートメントの副作用を引数オブジェクトから配列に変換し、出力は次のようになります(

["my"、 "debug"、あなたはargumentsオブジェクト転送し、そのままそれを維持する必要があることを修正するには「文」]

$.log = function() { // note no arguments used 
    if (window.console && console.debug) { 
     console.debug.apply(console, arguments) 
    } 
} 

今すぐ出力は次のようになります。

My debug statement