7

私はこれに何度か遭遇しましたが、それについての説明はありません。サイトに JS エラーはありませんでした。コードは実際に実行されています。それらを置き換えるとalert()うまくいきます。

今日もそれが起こったので、コンソールオブジェクトでコンソールオブジェクトを確認しようとしましたが、何かがコンソールオブジェクトを上書きしたかのように、いくつかの不規則性を見つけました。

次のスクリーンショットは、この問題が発生したサイト (サイト A) のものです。

http://ompldr.org/vZ256Mw/Selection_004.jpg

log、warn、info が空の関数であることがわかりますか? コンソール オブジェクトは、コンソールが正常に動作するサイト (サイト B) とは異なります (スクリーンショットは次のとおりです)。

http://ompldr.org/vZ256Mg/Selection_003.jpg

現在、両方のサイトで実行されているコードはまったく同じです。サイト B は私のローカル インストールであり、サイト A はステージングであり、コードにはコンソール オブジェクトを上書きするものは何もないので、この動作の説明は何でしょうか?


nfroidure の提案に従って、他の何よりも前にそのコードを head セクションに追加し、これを取得uncaught error! (anonymous function) (anonymous function)しました:

if (!("console" in window) || !("firebug" in console))
{
    var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml",
    "group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"];

    window.console = {};
    for (var i = 0; i < names.length; ++i)
        window.console[names[i]] = function() {}
}

ifチェックが間違っていると思うので、これは責任があります。Chromeで"console" in windowtrueになり、falseになり、コンソールメソッドが置き換えられます。"firebug" in windowそこにあるはず&&ですよね?

更新:オペレーターを変更した後&&、サイト A で動作するようになりましたが、あるサイトでのみトリガーされ、別のサイトではトリガーされない理由がわかりません。

4

2 に答える 2

1

コンソールには次のようなメソッドがあるため、サイトAにはFirebugが含まれているようです:http://getfirebug.com/wiki/index.php/Console_API

于 2012-12-12T16:50:28.423 に答える
1

ドキュメントの上部にこれを追加してみてください:

<script>
(function(){
    var wc=window.console;
    delete window.console;
    window.__defineGetter__("console", function(){
        return wc;
        });

    window.__defineSetter__("console", function(val){
        throw('error!');  // Look at js stack when throwed
        });
})();
</script>
于 2012-12-12T16:50:41.177 に答える