web-dev-qa-db-ja.com

JavaScriptからFirefoxエラーコンソールにログインする

Webページで実行されているJavaScriptコードからFirefoxの組み込みエラーコンソールにメッセージを追加することは可能ですか?

consoleオブジェクトと独自のエラーコンソールを提供するFirebugがあることは知っていますが、以前は簡単な修正方法を探していましたが、何も見つかりませんでした。

悪意のあるWebページがログをスパム送信するのを防ぐことはまったく不可能かもしれません。

52
Torsten Marek

信頼できないJavaScript(たとえば、ページからのスクリプト)からコンソールに直接書き込むことはできません。ただし、Firebugのインストールが魅力的ではない場合でも、 Firebug Lite を確認することをお勧めします。ブラウザにインストールする必要はありません(実際、Firefoxも必要ありません)。これは、任意のWebページに(動的にでも)含めることができるスクリプトであり、Firebugの基本的な機能(console.log()など)を提供します。

32
Ben Blank

Window.consoleの存在を確認するグローバル関数を定義する場合、Firebugをトレースに使用できますが、他のブラウザーでナイスを再生したり、Firebugのコンソールトレースをオフにしたりできます。

debug = function (log_txt) {
    if (typeof window.console != 'undefined') {
        console.log(log_txt);
    }
}

debug("foo!");
46
petsounds

はい、できます= P

function log(param){
    setTimeout(function(){
        throw new Error("Debug: " + param)
    },0)
}

//Simple Test:
alert(1)
log('This is my message to the error log -_-')
alert(2)
log('I can do this forever, does not break')
alert(3)

実関数への更新

これは単なる楽しみのための単純なハックです。

33
Fabiano Soriani

firebug 1.6X.0b1が有効で開いている場合でも、おそらく他の人が議論する特権の問題のために、windows.consoleはFirefox 4 beta 6では未定義です。ただし、Firefox 4には新しい[ツール]> [Webコンソール]があり、これが開いている場合、window.consoleオブジェクトがあり、ページ上の信頼できないJavaScriptコードはconsole.log()を使用できます。 Webコンソールは流動的です( https://wiki.mozilla.org/Firefox/Projects/Console を参照)、about:config、YMMVでdevtools。*という名前の設定を変更する必要がある場合があります。

14
skierpage

Firebugをインストールして、console.log。ただし、それができない場合は、常にエラーをスローできます。

throw "foobar";
throw new Error("bazquux");

もちろん、これにより現在実行中のコードから抜け出すことができるので、詳細なログに使用することはできませんが、それを回避できる場合は、ボックスから何かを取得する唯一の方法だと思います。

6
Brian Campbell

私の知る限り、それは不可能です。しかし、Firefoxの拡張機能がエラーコンソールと対話する方法に興味がある場合は、 チェックアウト を使用してください。

3
Ólafur Waage

この関数には、拡張機能もライブラリも必要ありません。ただし、関連するWebサイトに完全な特権を付与します。あなたはそれを開発しているので心配はありませんか?


// Define mylog() function to log to Firefox' error console if such a
// thing exists
function defineMyLog()
{
    // Provide a useless but harmless fallback
    mylog = function(msg) { };
    // return; // disable in production

    if (typeof(netscape) === "undefined") {
        // alert("Logging implemented only for Firefox");
        return;
    }
    // The initial auth popup can be avoided by pre-setting some magic user_pref
    //  ( "capability.principal.codebase.p0.granted", "UniversalXPConnect"), etc.
    try {
        netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
    } catch (e) { // User has denied privileges
        // alert(e.name + ": " + e.message);
        return;
    }
    ffconsoleService = Components.classes["@mozilla.org/consoleservice;1"]
                                 .getService(Components.interfaces.nsIConsoleService);
    mylog = function (msg)
    {
        netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
        ffconsoleService.logStringMessage(new Date().toLocaleTimeString() + ": " + msg);
    }
    mylog("Firefox logging function has been defined");

    // window.open("javascript:"); // this URL does not work anymore?
}
2
MarcH

興味のある方は、私が書いたスクリプトをチェックしてください。通常のコンソール(SafariやChromeなど)に干渉することはありませんが、ほとんどすべてのFirebugメソッドで拡張された「安価な」Firebugの代替品です。

http://code.google.com/p/glentilities/

ボンネットの下を見ると、「安い」という意味がわかります。 :-)

それをYUIまたはjson.orgのJSONシリアライザーと組み合わせて、console.dirを複製します。

FirebugとFirebug Liteは間違いなく優れたGUIですが、私は常に自分で作成したGUIを使用して、実稼働コードでもログを安全に保持します-without定数コメントとコメント解除、

1
pluckyglen

今日問題が発生しましたが、Firebugのコンソールには異なるタブがあり、私のタブはDepuration Informationにあり、エラーを引き起こさずにconsole.logの動作を確認するにはALLオプションを選択する必要があります!このようなシンプル! ; ^)

0
Sergio Abreu