5

すべてのブラウザーで正常に動作する JS スクリプトがあります。しかし、驚いたことに、IE では最初の試行では機能しません。

ページをロードした後、F12 を押して (ie デバッガーを開き)、ページを更新すると、問題なく動作します。他のブラウザと同じように!しかし、この作業では、F12 を押さなければなりません。

ie のデバッガーは、開いたときに何かを行いますか? 解決策が見つかりません!

前もって感謝します。

4

3 に答える 3

12

デバッガーを開いていない場合、IE は console.log などがないものと見なし、未定義の関数を呼び出すとエラーが発生します。F12 を押すとコンソールが表示されるので、console.log は未定義ではなくなります。

これをコードの先頭に置くことで回避できます。

if (!window.console) window.console = {};
if (!window.console.log) window.console.log = function () { };

コードから console.log を編集するのではなく、未定義の場合は「何もしない」関数として定義することで、コンソールが存在しない場合にブラウザが何もしないようにするだけです。

js ファイルのサイズを小さくしたい場合 (特にモバイルでの使用に重要)、最終的にはリリース バージョンの詳細ログを削除する必要があります。

于 2012-07-05T14:13:58.030 に答える
2

前回の記事の拡張版

if (!('console' in window)) {
    var stub = function() { ; };
    window.console = {
        log : stub,
        info : stub,
        warn : stub,
        error : stub,
        assert : stub
    };
}

必要な場合にのみスタブをインストールするこの新しいものを投稿しています

/**
 * On IE console is not set if not opened and debug doesn't exists
 */
(function() {
    if (!('console' in window)) { window.console = {}; }
    var kind = ['log', 'info', 'warn', 'error', 'assert', 'debug'];
    var stub = function() { ; };
    for (var i = 0; i < kind.length; i++) {
        if (kind[i] in window.console) { continue; }
        window.console[kind[i]] = stub;
    }
})();
于 2012-12-04T04:15:16.467 に答える
2

console.log()スクリプトに次のようなものはありますか?F12を押すまでコンソールがないため、これで説明できるかもしれません

于 2012-07-05T14:13:25.593 に答える