如何在xulrunner应用程序中启用javascript console.log()/ error()/ warn()?

时间:2014-02-28 05:28:27

标签: javascript console mozilla xulrunner

在普通浏览器中运行的网页中,我们可以使用console.log()/error()/warn()将消息打印到Web控制台。但是,在xulrunner应用程序中运行的页面(html或xul)中,似乎console.log()/error()/warn()以静默方式丢弃消息。

我设置了这些首字母: pref("browser.dom.window.dump.enabled", true); pref("javascript.options.showInConsole", true); 并使用-console-jconsole选项运行xulrunner。

那么,是否可以在xulrunner应用程序中启用javascript console.log / error / warn?

我知道dump()函数适用于带有-console的xulrunner,但它不是标准的,并且在我的xulrunner应用程序中运行了无法控制的网页。

有关详细说明此问题的示例,您可以结帐https://github.com/matthewkastor/XULRunner-Examples.git,然后运行浏览器'使用console的网页申请。

2 个答案:

答案 0 :(得分:2)

XULRunner将丢弃传递给console.log()的消息,除非您将调试器附加到它。这可以通过远程调试来实现:XULRunner作为调试对象,firefox作为调试器。将调试器连接到XULRunner应用程序后,您可以在调试器中看到console.log()ed消息。

可以在MDN找到

Instruction for remote debgging

您可能还想将firefox的devtools.debugger.remote-enabled pref设置为true

在您的应用中使用此代码:

  var windowtype = ...
  Components.utils.import('resource://gre/modules/devtools/dbg-server.jsm');
  DebuggerServer.chromeWindowType = windowtype;
  if (!DebuggerServer.initialized) {
    DebuggerServer.init();
    DebuggerServer.addBrowserActors(windowtype);
  }
  DebuggerServer.openListener(6000);

如果您的网页是(x)html,请windowtype分配null;如果您的网页为xul,请为windowtype分配xul:window元素的windowtype属性的相同值:

  <xul:window windowtype=... >
  ...
  </xul:window>

答案 1 :(得分:0)

您可以使用nsIConsoleService。

对于简单的日志消息:

function consoleLog(aMsg){
    var console;
    console = Components.classes["@mozilla.org/consoleservice;1"]
               .getService(Components.interfaces.nsIConsoleService);
    console.logStringMessage(aMsg);
}

console.log('My important message');

参考:nsIConsoleService在MDN。