Mozilla
Mozilla Error Console
gonGon
2010. 10. 8. 12:54
# Error Console
요즘 나오는 여타 브라우저처럼 FireFox도 자체 console을 가지고 있다.
firefox.exe -jsconsole
-jsconsole 옵션으로 실행하거나 Ctrl+Shifht+J를 눌러 FireFox의 Error Console 창을 볼 수 있다.
이 Error Console은 FireFox에만 있는 것은 아니고 Mozilla의 다른 제품에도 공통적으로 들어 있다.
Error Console은 javascript와 css 관련 error, warn, info를 볼 수 있다.
Error Console에 출력되는 message들은 mozilla의 console service 메커니즘에 의해 제공된다.
cf) Firebug는 HTML/XUL로 UI를 작성하고 javascript로 작동을 구현한 FireFox의 debug plugin이다.
Firebug에서 보이는 error, warn, info는 Mozilla console service를 통해 받은 message 들이다.
# Console Service
Console Service를 제공하는 Mozilla backend의 interface는 다음과 같다.
nsIConsoleService
nsIConsoleListener
nsIConsoleMessage
nsIConsoleService
Mozilla Component의 log message를 얻어오거나 listener를 등록/삭제할 수 있게 해 준다.
getMessageArray
logMessage
logStringMessage
regiesterListener
unregiesterListener
reset
nsIConsoleListener
nsIConsoleService에 등록하면, logMessage가 호출될 때마다 observe를 통해 message를 받게 된다.
observe
nsIConsoleMessage
components가 전달하는 message object. observer를 통해 받는다.
javascript sample
var theConsoleListener =
{
observe:function( aMessage ){
dump("Log : " + aMessage.message);
},
QueryInterface: function (iid) {
if (!iid.equals(Components.interfaces.nsIConsoleListener) &&
!iid.equals(Components.interfaces.nsISupports)) {
throw Components.results.NS_ERROR_NO_INTERFACE;
}
return this;
}
};
function onLoad()
{
var aConsoleService = Components.classes["@mozilla.org/consoleservice;1"]
.getService(Components.interfaces.nsIConsoleService);
aConsoleService.registerListener(theConsoleListener);
}
# Java XPCOM에서 error console 사용하기
ATF의 사용예을 보자.
ATF의 Browser Console view가 error console을 구현하고 있다.
if (SINGLETON_MODE) {
......
consolePage = new JavaScriptConsolePage();
try {
// registering the listener
nsIConsoleService consoleService = (nsIConsoleService) Mozilla
.getInstance().getServiceManager()
.getServiceByContractID(
"@mozilla.org/consoleservice;1",
nsIConsoleService.NS_ICONSOLESERVICE_IID);
consoleService
.registerListener(new JavaScriptConsoleListener(
consolePage));
// populate cons0le with initial items
nsIConsoleMessage[][] messageArray = new nsIConsoleMessage[1][];
consoleService.getMessageArray(messageArray, null);
for (int i = 0; i < messageArray[0].length; i++)
consolePage.logConsoleMessage(messageArray[0][i]);
} catch (Exception e) {
MozIDEUIPlugin.log(e);
}
......
}
"@mozilla.org/consoleservice;1"을 이용하여 console service를 얻어오고, JavascriptConsoleListener을 listener로 등록하고 있다. JavaScriptConsoleListener는 nsIConsoleListener를 implements하여 observe를 구현하고 있다.
주의할 것은 SINGLETON 이라는 것이다.
SINGLETON이기 때문에 browser editorpart가 여러 개라도 한 개의 view로 모든 message가 전달된다.