2014-02-28 47 views
1

在正常瀏覽器中運行的網頁中,我們可以使用console.log()/error()/warn()將消息打印到Web控制檯。但是,在xulrunner應用程序中運行的頁面(html或xul)中,似乎console.log()/error()/warn()以無提示方式放置消息。如何在xulrunner應用程序中啓用javascript console.log()/ error()/ warn()?

我設置這些首選項: pref("browser.dom.window.dump.enabled", true); pref("javascript.options.showInConsole", true); 和運行的XULRunner與-console-jconsole選項。

那麼,是否有可能在xulrunner應用程序中啓用javascript console.log/error/warn?

我知道dump()函數適用於xulrunner和-console,但它不是標準的,並且在我的xulrunner應用程序中運行着我的控制網頁。

舉個例子來說明這個問題,你可以結賬https://github.com/matthewkastor/XULRunner-Examples.git,然後使用console運行帶有網頁的'瀏覽器'應用程序。

回答

2

XULRunner將刪除傳遞給console.log()的消息,除非您將調試器附加到它。這可以通過遠程調試來實現:XULRunner作爲調試器,firefox作爲調試器。一旦調試器連接到XULRunner應用程序,您就可以在調試器中看到console.log()ed消息。

Instruction for remote debgging可以在MDN找到。

您可能還想將您的Firefox的devtools.debugger.remote-enabled前綴設置爲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,與null分配windowtype;如果你的頁面是XUL,分配windowtypexul:window元素的WINDOWTYPE屬性的值相同:

<xul:window windowtype=... > 
    ... 
    </xul:window> 
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。

+0

謝謝您的回答。但nsIConsoleService(1)與CommonJS控制檯不是API兼容的,並且普通瀏覽器的控制檯實現(2)不能在非特權頁面中使用。所以我沒有看到比dump()更好的優勢。 –

相關問題