0

console.log()今日、Stackoverflow のどこかで読んでいたのですが、IE のバグが発生するという記事を読んだことを覚えています。ユーザーは、展開前にそのすべてのインスタンスをコードから削除する必要がある、またはjavascript ライブラリを使用して IE でそれを省略することができると述べていました。

私の質問は、この 2 番目のオプションに関するものです。そのようなライブラリをどのように作成しますか? onloadそれ以降のjsの解析方法に影響を与えるのは、実行されるものだけでしょうか? 何かのように...または、どのブラウザーで呼び出されているかを自己認識させるメソッドif browser == IE, omit all instances of console.log()の拡張機能でしょうか? console.log()私はjQuery関数の拡張にある程度精通していますが、生のjsでこれが行われるのを見たことはありません. 私がこれに興味を持っているのは、ブラウザーの相互互換性を一般的に達成するための良い方法だと思うからです。これはconsole.log()具体的なことではありません。

4

2 に答える 2

3

1 つのアプローチは、console.log()が常に定義されていることを確認して、いつでも心配なく使用できるようにすることです。このコードを追加して、常に定義されるようにすることができます。

このコードは、IE (またはそれを持たない他のブラウザー) でconsole.log()定義され、安全に何もしないようにします。既に存在する場合、このコードは何もせず、以前の の定義をそのまま残しconsole.log()ます。

if (!window.console) {
    window.console = {};
}
if (!console.log) {
    console.log = function() {};
}
于 2011-08-26T04:43:02.320 に答える
1

存在するかどうかわからないグローバル プロパティをテストするには、いくつかの方法があります。できるだけ防御的になるように努める必要があります。

var global = this;

if (!('console' in global)) {
  global.console = {};
}

if (!('log' in global.console)) {
  global.console.log = /* whatever */;
}

in テストでは、おそらく代わりにtypeofを使用できます。アイデアは、存在しない可能性のある識別子を使用しないことです。おそらく少し正気です:

// If console exists, declaring it will not hurt
// If it didn't exist, it does now
var console;

if (typeof console == 'undefined') {
  console = {};
}

if (typeof console.log == 'undefined') {
     console.log = /* whatever */;
}
于 2011-08-26T05:55:10.450 に答える