web-dev-qa-db-fra.com

Connectez-vous à la console d'erreur Firefox à partir de JavaScript

Est-il possible d'ajouter des messages à la console d'erreur intégrée de Firefox à partir de code JavaScript s'exécutant dans des pages Web?

Je sais qu'il existe Firebug, qui fournit un objet console et sa propre console d'erreur, mais je cherchais une solution rapide plus tôt et je n'ai rien trouvé.

J'imagine qu'il pourrait ne pas être possible d'empêcher des pages Web malveillantes d'envoyer du spam dans le journal?

52
Torsten Marek

Vous ne pouvez pas écrire directement sur la console à partir de JavaScript non approuvé (par exemple, des scripts provenant d'une page). Cependant, même si l'installation de Firebug ne vous intéresse pas, je vous recommande de vérifier Firebug Lite , qui ne nécessite aucune installation dans le navigateur (et qu'il n'a même pas besoin de Firefox). C'est un script que vous pouvez inclure dans n'importe quelle page Web (même dynamiquement), ce qui vous donnera des fonctionnalités de base de Firebug (telles que console.log()).

32
Ben Blank

Si vous définissez une fonction globale qui vérifie l'existence de window.console, vous pouvez utiliser Firebug pour le traçage et continuer à utiliser Nice avec d'autres navigateurs et/ou si vous désactivez le traçage de la console de Firebug:

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

debug("foo!");
46
petsounds

Oui, vous pouvez = 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)

Mise à jour pour une fonction réelle

C'est un simple bidouillage, juste pour le fun.

33
Fabiano Soriani

window.console n'est pas défini dans Firefox 4 bêta 6, même si Firebug 1.6X.0b1 est activé et ouvert, probablement à cause de problèmes de privilège dont d'autres discutent. Cependant, Firefox 4 a un nouvel outil> Console Web. S'il est ouvert, vous avez un objet window.console et le code JavaScript non approuvé de la page peut utiliser console.log (). La console Web est en pleine mutation (voir https://wiki.mozilla.org/Firefox/Projects/Console ), vous devrez peut-être modifier les paramètres nommés devtools. * Dans about: config, YMMV.

14
skierpage

Je voudrais juste installer Firebug et utiliser console.log. Si vous ne pouvez pas faire cela, vous pouvez toujours jeter une erreur:

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

Bien sûr, cela vous échappera du code que vous exécutez actuellement. Vous ne pouvez donc pas l'utiliser pour la journalisation détaillée, mais si vous pouvez contourner ce problème, je pense que c'est le seul moyen d'obtenir quelque chose de déconnecté .

6
Brian Campbell

Autant que je sache, ce n'est pas possible. Mais si vous êtes intéressé par la façon dont les extensions de Firefox interagissent avec la console d’erreur, consultez ceci .

3
Ólafur Waage

Cette fonction ne nécessite aucune extension ni bibliothèque. Cependant, il accorde tous les privilèges au site Web concerné. Pas de soucis puisque c'est toi qui le développe, non?


// 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

Si cela vous intéresse, consultez un script que j'ai écrit - il s'agit d'un remplacement "bon marché" de Firebug qui n'interfère avec aucune console normale (telle que Safari ou Chrome) mais l'étend avec presque toutes les méthodes Firebug:

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

Regardez sous le capot et vous verrez ce que je veux dire par "pas cher". :-)

Combinez-le avec les sérialiseurs JSON de YUI ou de json.org pour trier une réplique console.dir. 

Firebug et Firebug Lite sont certes des interfaces graphiques plus agréables, mais j’utilise toujours ma propre interface pour conserver la journalisation en toute sécurité, même pour le code de production - sans commentaires et dé-commentaires constants,

1
pluckyglen

J'ai un problème aujourd'hui et je remarque que la console dans Firebug a différents onglets et que la mienne était dans Informations de dépuration. Vous devez sélectionner l'option ALL pour que le fichier console.log fonctionne sans erreur de tri! Simple comme ça! ; ^)

0
Sergio Abreu