Советы по реализации моей собственной консоли в качестве XPCOM

Я хочу использовать свою собственную консоль для своего расширения, где я буду печатать различную отладочную информацию. Я думал, что сделаю это, делая

window.open("chrome://myextension/content/console.xul"..

а затем печать в текстовые поля этого окна. Вы уже видите что-то не так здесь? знак равно

Теперь у меня есть небольшая проблема, window.open немедленно возвращается, и если я затем продолжаю и немедленно использую функцию myconsole.log("boo"), то содержимое в этом недавно открытом окне еще не загружено, и я получу ошибки. Это означает, что мне нужно дождаться окончания загрузки консоли, прежде чем я смогу печатать на нее. Каков будет правильный способ сделать это? Я мог бы использовать nsITimer или thread.sleep внутри метода log, чтобы продолжать проверять, загружен ли он уже, но мне это не нравится. Я также не знаю, как правильно использовать событие window.onload, потому что я вижу только что-то вроде window.onload = function() {весь мой код расширения.. }, который мне тоже не нравится.

Я хочу, чтобы это использовалось в любое время где-нибудь как-то так

console = Cc["@myconsole;1"].getService().wrappedJSObject;
console.log("foo");

Любой совет? Спасибо за терпение =)

1 ответ

Я бы реализовал это сначала как модуль ведения журнала бэкенда:

https://developer.mozilla.org/en/JavaScript_code_modules

А затем напишите пользовательское окно Chrome, которое взаимодействует с ним (получает все журналы, очищает журналы, подписывается, чтобы получать новые события журнала)

Чтобы сэкономить время написания кода, см. Также console2 и (наименее известную) консоль трассировки firebug:

Другие вопросы по тегам