Советы по реализации моей собственной консоли в качестве 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: