2010-12-01 14 views
17

私はdocument.ready()で定義されたconsole.logため、この代替を持っている:IEのスクリプトコンソール(console.log)に書き込む正しい方法は何ですか?

$(document).ready(function(){ 
    console.log("doc ready"); 
    if(typeof console === "undefined"){ 
    console = { log: function() { } }; 
    } 
} 

私は出力がFirefoxで表示されます

console.log("doc ready"); 
上記の呼び出し

が含まれている場合、IEはこの機能が利用できる持っていることになっていたと思ったが、コンソールではなくIEではなく、実際にはIEスクリプトの実行がこの時点で完全に中断します。

IEでコンソールに書き込む正しい方法は何ですか?

答えて

0

コンソールはファイアバグです。

IEのコンソールへの書き込みを有効にするには、firebug liteをインストールする必要があります。

+0

コンソールChromeでも動作します – darioo

+1

間違っていると、コンソールのFirebug LiteをIE7以下にインストールする必要があります。 IE8にはコンソールがありますが、Firebugなどのロギング方法は堅牢ではありませんが、そこにあります。 – epascarello

13

ので、命令の誤った順序のスクリプト実行の中断を、これが良いかもしれません:

$(document).ready(function(){ 

    if(typeof console === "undefined"){ 
    console = { log: function() { } }; 
    } 
    console.log("doc ready"); 
} 

あなたが最初のアクセス、この結果を、それが存在するかどうかをチェックする(とされていない場合、それを作成する)前に、コンソールをする場合エラーになります。

6

IE6/7にはデフォルトでコンソールがありません。

Firefoxは実際にはFirebugというプラグインによって提供されています。 FirebugをインストールせずにFirefoxのコピーを使用すると、consoleをIEと同じように呼び出す際にエラーが発生します。

IE8/9 doにはコンソールがあります。

ChromeとSafariにはコンソールオブジェクトが組み込まれていますが、FirebugやIE8とまったく同じ方法で動作するとは限りません。

デバッグウィンドウが開いていない限り、すべてのブラウザでコンソールオブジェクトが作成されないことがあります。つまり、console.log呼び出しのコードは、のいずれかのブラウザで失敗する可能性があります。

console.log()を呼び出すと、コンソールのないブラウザがクラッシュするのを防ぐために、例ではダミーのconsoleオブジェクトが存在しない場合は、本質的に作成しています。しかし、コードが実行される前にconsole.log()に電話しているので、コンソールのないブラウザはその行でクラッシュします。したがって、console.log("doc ready");行を移動して、consoleが存在するかどうかを検出するビットの後に来るようにしてください。

IEのためにコンソールが存在するようにするには、Firebug LiteというFirebugのバージョンがあります。これはどのブラウザでも実行できます。これを実行すると、consoleオブジェクトが作成されます。

ただし、ページがロードされた後でしか実行できないため、ドキュメント準備機能でコンソールメッセージを表示することはできません。さらに、コンソールオブジェクトが既に存在する場合はコンソールオブジェクトの作成に失敗することがあるので、ダミーのコンソールオブジェクトを作成する準備ができているコードによって、Firebug Liteが正常に動作しなくなる可能性があります。

最後に、コンソールを使用してデバッグするのは素晴らしいですが、後でデバッグ目的でのみ使用する予定がある場合でも、ライブコードをconsole.logに送信しないようにしてください。既に見てきたように、コンソールオブジェクトを持たないブラウザではコードの実行を停止させる可能性があります。また、ライブユーザーには問題が発生することに注意してください。 :コードを出荷する前に、コンソールへのすべての呼び出しを常に確実に削除することをお勧めします。

+1

IEがIE8 +のプラグイン/エクストラjsコードなしのコンソールを持っているので、間違っています。 – epascarello

+0

@epascarello - 元のポスターでは失敗していますが、十分です。 (彼は、彼が使っていたIEのどのバージョンを指定しなかった)。 [私の答えを編集してより具体的に] – Spudley

+0

Upvoteはconsole.logでライブコードを決して送ってはいけないと言っています。 –

2

使用可能なコンソールがない場合、firebug liteにフェールオーバーするために私が使用しているのは次のとおりです。これは、あなたが何らかの記述のコンソールを得ることを保証しますが、それらはすべて少しずつ異なって動作しますので注意してください。

function attachConsole(force) { 
    if(force || typeof console === "undefined"){ 
    var head= document.getElementsByTagName('head')[0]; 
    var script= document.createElement('script'); 
    script.type= 'text/javascript'; 
    script.src= 'http://getfirebug.com/releases/lite/1.2/firebug-lite-compressed.js'; 
    head.appendChild(script); 
    return true; 
    } 
return false; 
} 
関連する問題