Yan, дык если эти кнопки установить твоим расширением, то они работают нормально....
!
Отсутствует
В версии 0.0.1.3 я сделал, чтобы при нажатии на кнопку проверялось, есть ли метод bind у Function, и если нет -- то он заново инициализируется.
Отредактировано Yan (05-12-2006 16:19:00)
Отсутствует
Yan, вотъ! я тоже так делаю. я просто добавляю твой код в начало инициализации.
например:
<content label="Image show-hide" image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAA3NCSVQICAjb4U/gAAAAD1BMVEUfact50/fF+v/M//////8mt18DAAAABXRSTlP/////APu2DlMAAAAJcEhZcwAACvAAAArwAUKsNJgAAAAgdEVYdFNvZnR3YXJlAE1hY3JvbWVkaWEgRmlyZXdvcmtzIE1Yu5EqJAAAADhJREFUeJxjcHFgAAIXFwYXB2NjYwYWEMNQUJCZAcYwYIEwGBigDEFhDIYQ+QygpUZKIAbIGQwsANX+EGaBLn8yAAAAAElFTkSuQmCC"> <xul:toolbarbutton xbl:inherits="label,image" /> </content> <implementation> <constructor> <![CDATA[ if ((typeof Function.prototype.bind)=="undefined") { Function.prototype.bind= function(object) { var method = this; return function() { return method.apply(object, arguments); }; }; }; this.pref='permissions.default.image'; this.setState=function(){ switch(this.PS.getIntPref(this.pref)) { case 1: this.image= 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAFo9M/3AAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAACp0lEQVR42mL4//8/g3zm6f8AAcQAYvz4uuc/QACBeSAOQAAx/P75/X/ukY//AQIILHXhz///lZe//wfJAgQQWOBui9D/P78t/6ftffcfIIAYYKbA9AIEEIjDWnPtx3+YIEAAMXz7/P7/75+v/mcADQQJAAQQ0HTt/y9nqv73W/caLAAQQDAzWC8CbWq89et//fWf/5HNBAgguIJzIKdc+v6/7Py3/8Wnv/wvPPkZrAgggMAKfv+c8P/f+8r//x+mAZ03/X/g5nf/sw68BysACCCIH78p///zSeb/n4ci/39d4P+/4+f//0d//QcrAAggFH8gY5A4CAMEEFxB0+1f/xtu/vxfc+X7f5CDYYoAAgiuoP7Gz//VV378r7j4HdkkVoAAgisA6Sy/8O1/ydmvYB+c+g02hRUggBgaw6T+g4Iegq//B/Fzj376fwLiSFaAAAIr+HI17f//l4X//9+JAyvIPPjh/3GoAoAAAit4MEns/71Gof+f1hmCFaQCownqTVaAAAIr+PNb4f+fFxL//9wUACsAScIUAAQQA8y/IA7IsSAvgvAFKD4PxdjCCIQBAgjDgAvQSK0DRmrtNWDQXAUFzTewxjNAn5/8/R/FIIAAwjAAZFsdMEFVAcMUFPkgzaAEUAoKvlOfkYMQ7AWAAAJrBvmLEC4Aasw/DsTHPiG7ghUggOAG/PkFTCG/p/3//6P///+PLf//vwamrsc5///+WQc2IHLX+//Zhz/+zz4EjwKwAQABBDfg90/d/w+mSvx/DEztPy+G//9/K/r//6vBwBhoBhvgv/HN//T97/9n7Hv//xiSAQABhDDgl8b/B33C/++3C/6/38T//34d7//7Vdz//0Kjzm/dq/9pe979T939Fp6UQQYABBDRYSAZdghrkgcIMAD5xMj+kGsEXgAAAABJRU5ErkJggg=='; this.tooltipText= 'load all images'; break; case 2: this.image= 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAA3NCSVQICAjb4U/gAAAAD1BMVEUfact50/fF+v/M//////8mt18DAAAABXRSTlP/////APu2DlMAAAAJcEhZcwAACvAAAArwAUKsNJgAAAAgdEVYdFNvZnR3YXJlAE1hY3JvbWVkaWEgRmlyZXdvcmtzIE1Yu5EqJAAAADhJREFUeJxjcHFgAAIXFwYXB2NjYwYWEMNQUJCZAcYwYIEwGBigDEFhDIYQ+QygpUZKIAbIGQwsANX+EGaBLn8yAAAAAElFTkSuQmCC'; this.tooltipText= 'don\'t load any images'; break; case 3: this.image= 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAFo9M/3AAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAACdklEQVR42mL4//8/g3zm6f8AAcQAYvz69es/QACBeSAOQAAx/Pnz5//Z20/+AwQQWOrHv///n7x89R8kCxBAYIEuXdb/f//+/X/w8oP/AAHEADMFphcggEAc1pdv3vyHCQIEEMPPnz//gwy8dPcpWAAggMCmnzp16v+Rqw/BAgABBDOD9RfQpncf3v1/9RahHSQHEEBwBd+BCh4DnXLv6Yv/Nx89/3/l/jOwIoAAAisAGXv9+vX/MOedvvn4//Frj8AKAAII7keQBAj//v37//M///8/+/0frAAggFD8gYxB4iAMEEBwBR8+vvv/5v1bYJC8/v/733+4IoAAgit4/e7t/+evX/9/9OIVskmsAAEEV/D01ev/D56//H/78Yv/1x48+//uD9gUVoAAYlizZg04pGAYxD8PjIbXUAUAAQRWMMmA9f+VK1f+dwK9CeKfuP7o/0uoAoAAAivo02f9f+7cuf9tOhAFh4DR9BziTVaAAAIrgIUBCIP4IEloOLACBBADzL8gDsixIC+C4uUnFP+AYmxhBMIAAYRhwE9wpL79/wYYLKCIfQEMmofPIUHz6e///2///EcxCCCAMAwA2fYCmKCeATWC0uFDYNDdf/by/50nL/5fBQbf5ftP/7//CzeEFSCAwJpB/iKErwJTz6V7T/9fBCZMJFewAgQQ3ABQAE0BBjcoyCcAQxUUsj16rP///fsHNuAcMG7OAFPZqRuP/79CMgAggOAGgCIRpBEUX6BkCYqWDh1WeMiD4u4oMBeAcsILJAMAAgjFgF6gjSDNII2gOG3RRhhw+MrD/wcvPfi//+J9eFIGGQAQQESHAa4kDxBgAMjdAQviliYiAAAAAElFTkSuQmCC'; this.tooltipText= 'load images only from this domain'; break; } } this.PS= Components.classes['@mozilla.org/preferences-service;1'] .getService(Components.interfaces.nsIPrefBranch); this.ob={}; this.ob.observe=this.setState.bind(this); this.PS.addObserver(this.pref,this.ob,false); this.setState(); ]]> </constructor> </implementation> <handlers> <handler event="click" button="0" modifiers="any"> <![CDATA[ switch(this.PS.getIntPref(this.pref)){ case 1: this.PS.setIntPref(this.pref,2);break; case 2: this.PS.setIntPref(this.pref,3);break; case 3: this.PS.setIntPref(this.pref,1);break; } ]]> </handler> </handlers>
Отредактировано Dark-Demon (06-12-2006 12:02:04)
!
Отсутствует
Dark-Demon
Если честно -- влом даже разбираться, т.к. в 2.0.0.1 всё равно поправят, и я этот хак из след. версий уберу.
Ты бы лучше другие баги ковырял, коих немало. Например, добавил я в user.js:
user_pref("nglayout.debug.disable_xul_cache",true);
user_pref("javascript.options.showInConsole", true);
user_pref("javascript.options.strict", true);
user_pref("browser.dom.window.dump.enabled", true);
И при последующем запуске все твои кнопки перестали инициализироваться. В панели они есть (проверил через DOM-инспектор), а их не видно. (После этого мне и стало влом разбираться, куда bind пропал.)
И перезапускать браузер при каждом изменении кнопки -- это никуда не годится.
С юзабилити проблемы большие..
Отсутствует
В панели они есть (проверил через DOM-инспектор), а их не видно.
ты ставил кнопки с моего сайта? или кастомкнопки?
И перезапускать браузер при каждом изменении кнопки -- это никуда не годится.
изменять можно не перезагружая, удалять уже тоже, но я эту версию ещё не выложил. вот с добавление - коряга.
Ты бы лучше другие баги ковырял, коих немало.
а ты strict отруби и ни одного не останется
Отредактировано Dark-Demon (06-12-2006 16:24:09)
!
Отсутствует
что-то addons.mozilla.org не хочет кушать моё расширение
а когда выходит версия 2.0.0.1?
!
Отсутствует
Чёрт, опять не заметил твоё сообщение от 6 декабря.
ты ставил кнопки с моего сайта? или кастомкнопки?
С твоего сайта.
...вот с добавление - коряга.
Это вроде как основная функция.
а ты strict отруби и ни одного не останется wink
Не понял. Как strict мешает работе расширения?
что-то addons.mozilla.org не хочет кушать моё расширение sad
а когда выходит версия 2.0.0.1?
Не знаю.
Отсутствует
Yan, strict никак не мешает работе, просто засоряет консоль.
!
Отсутствует
ввиду того, что старое моё расширение под третьей лисицей не заработало, да и редактор давно уже хотел дописать сделал новую версию:
http://dark-demon.nm.ru/soft/customitem … ems3a1.xpi
тестировал под фф 3.0а6
после установки расширения в палитре можно найти демонстрационную кнопку. другие адаптированные под новую версию расширения кнопки можно найти тут: http://dark-demon.nm.ru/soft/customitems3/
из нововведений:
возможность перегружать стандартные кнопки
новый редактор с разделением всех xbl сущностей
особенности:
после добавления новой кнопки требуется перезагрузка %-\
убрал наследование, возможно потом верну
Отредактировано Dark-Demon (10-07-2007 01:02:49)
!
Отсутствует
Подниму-ка я тему.
Во-первых, нужна ли вообще настройка на скрытие кнопки «применить» в редакторе? Пусть она всегда видна будет, не мешает же.
Во-вторых, чисто визуально лучше смотрится, когда после нажатия видно, что «сохранилось» – т.е. кнопка становится неактивной.
Относительно универсальная схема примерно такая:
<dialog onchange="changed(event);" oncommand="changed(event);" oninput="changed(event);" ondragexit="changed(event);"
С ondragexit не совсем хорошо, я пару раз пытался выявлять факт перетаскивания текста иначе, но результатов не добился.
Далее два варианта.
1. Просто проверять event.target.localName и если, например, это не "tab", включать кнопку.
2. При каждой загрузке настроек и при каждом сохранении пробегать по всем (сохраняемым) элементам, и записывать их состояние (которое уже сохранено) в атрибут:
checked="true" -> saved_checked="true"
value="qqq" (точнее, свойство value) -> saved_value="qqq"
А в changed(event), соответственно, проверять, изменилось ли.
Самый точный вариант, но и самый медленный, если может быть большой текст (а он может).
Ну, и преимущество в том, что код мало зависит от структуры XUL и от того, как реализовано чтение/сохранение настроек.
P.S. И все же «Показывать кнопку "Применить" в редакторе кода», а не «Отобразить кнопку "Применить" в редакторе кода». Последнее больше применимо к однократному действию.
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Во-первых, нужна ли вообще настройка на скрытие кнопки «применить» в редакторе? Пусть она всегда видна будет, не мешает же.
Если писать сразу в кнопку, то она будет пересоздаваться и инициализироваться при каждой записи.
А для отложенной записи нет инфраструктуры.
Во-вторых, чисто визуально лучше смотрится, когда после нажатия видно, что «сохранилось» – т.е. кнопка становится неактивной.
Относительно универсальная схема примерно такая:
Кажется, есть вариант попроще. nsIEditorObserver на редактор + анализ transactionManager. numberOfUndoItems
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
Если писать сразу в кнопку, то она будет пересоздаваться и инициализироваться при каждой записи.
В основном сохранение нужно на случай, если выполненный по F9 код тем или иным образом не даст сохраниться.
А инициализацию можно запускать только если окно редактора теряет фокус.
Кажется, есть вариант попроще. nsIEditorObserver на редактор + анализ transactionManager. numberOfUndoItems
Три редактора, два текстовых поля + хоткей, два чекбокса. И это после не особо внимательного осмотра.
Хотя если хочется точно знать, сохранено ли текущее состояние (скажем, если пользователь отменил все изменения), может, и проще.
И то наличие отмен не сильно связано с сохраненностью текста.
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Обнаружился небольшой баг: нельзя снять комментирование, если перед уже имеющимся комментированием есть пробелы.
Методика лечения примерно такая:
if(/^\s*\/\//m.test(block)) block = block.replace(/^(\s*)\/\//mg, "$1"); else block = block.replace(/^/mg, "//");
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Обнаружился небольшой баг: нельзя снять комментирование, если перед уже имеющимся комментированием есть пробелы.
Это не баг.
Ответственная за это функция предназначена для установки комментариев в начало строки и снятия их оттуда же.
Комментарии внутри строки имеют приоритет.
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
Удобнее, что ли, хм. Надо будет последить, что нужно чаще.
Разве что снимать «внутренние» комментарии при таком подходе неудобно.
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
http://forum.mozilla-russia.org/viewtop … 82#p364082
https://www.mozdev.org/bugs/show_bug.cgi?id=21391
Что вообще дает добавление оверлея через свой протокол кроме запрета кэширования?
Вроде как, там проблема в том, что компонента запускается позже, чем читается chrome.manifest. Так вот, может, есть смысл делать document.loadOverlay() после load/DOMContentLoaded окна или просто из подключенного к обычному оверлею скрипта?
Добавлено 13-08-2009 23:09:01
Хм, как-то странно оно себя ведет. По-моему, что-то не так с компонентой, реализующей протокол.
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Что вообще дает добавление оверлея через свой протокол кроме запрета кэширования?
Кроме того, что оверлей, загружаемый по собственному протоколу не кэшируется, есть возможность менять его содержимое прямо во время загрузки.
Так вот, может, есть смысл делать document.loadOverlay() после load/DOMContentLoaded окна или просто из подключенного к обычному оверлею скрипта?
Если надо "перекрывать" toolbarpalette это не будет работать.
Хм, как-то странно оно себя ведет. По-моему, что-то не так с компонентой, реализующей протокол.
И что же с ней "не так" ?
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
Кроме того, что оверлей, загружаемый по собственному протоколу не кэшируется, есть возможность менять его содержимое прямо во время загрузки.
Кроме версий js это сейчас для чего-нибудь используется?
Если надо "перекрывать" toolbarpalette это не будет работать.
А когда подключается toolbarpalette?
И что же с ней "не так" ?
Ммм... она не работает.
А если серьезно, не знаю. Или что-то глобально не так с оверлеями по своему протоколу, раз идут глюки из-за того, что другое расширение меняет момент загрузки своих скриптов, или что-то не так в реализации протокола. Или баг в Firefox, наконец.
И можно ведь у автора ABP спросить, глядишь, присоветует чего.
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Кроме версий js это сейчас для чего-нибудь используется?
Пока нет.
А когда подключается toolbarpalette?
Конструктор toolbox'а его удаляет из документа.
Ммм... она не работает.
Она-то как раз работает. Не работает chrome.manifest.
или что-то не так в реализации протокола.
Всё так.
И можно ведь у автора ABP спросить, глядишь, присоветует чего.
Уже посоветовал, за что я ему весьма благодарен. Оверлей с кнопками будет загружаться из resource://, селектор версий js - по-прежнему из custtombuttons://, но через loadOverlay (...)
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
Пока нет.
В том смысле, что есть планы использовать изменение контента, загружаемого по своему протоколу, для чего-то еще или просто может пригодиться?
И я не совсем понял, как проявляется баг, из-за которого нужно «руками» указывать версию js. Т.е. нельзя ли решить эту проблему не через одно место?
Конструктор toolbox'а его удаляет из документа.
До того, как запустятся скрипты расширений, так?
Тут, по идее, может помочь компонента навроде userChromeJS, если, конечно, есть подходящее событие, по которому можно запускаться.
Она-то как раз работает. Не работает chrome.manifest.
Т.е. это баг в реализации chrome.manifest?
или что-то не так в реализации протокола.
Всё так.
Тебе видней. Тем не менее, не стоило это исключать без веских оснований, а у меня их не было.
Уже посоветовал, за что я ему весьма благодарен. Оверлей с кнопками будет загружаться из resource://, селектор версий js - по-прежнему из custtombuttons://, но через loadOverlay (...)
Не совсем понимаю, что дает resource://, он что, тоже не кэшируется или можно сделать, чтобы не кэшировался?
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Т.е. нельзя ли решить эту проблему не через одно место?
Без динамической подмены версии js как раз и будет "через одно место" - лишние записи в chrome.manifest, несколько оверлеев, слегка отличающихся только значением атрибута type. Это при том, что в chrome.manifest нет флага для platformversion.
Тут, по идее, может помочь компонента навроде userChromeJS, если, конечно, есть подходящее событие, по которому можно запускаться.
Это значит, надо поставить observer на domwindowopened, когда он "поймает" окно, проверить, нужное ли это окно, поставить на окно обработчик некоего события, дождаться срабатывания обработчика и загрузить оверлей.
И ещё неизвестно, решит это проблему, или нет.
Т.е. это баг в реализации chrome.manifest?
Я разве что-нибудь говорил про "баг в реализации chrome.manifest" ?
Тебе видней. Тем не менее, не стоило это исключать без веских оснований, а у меня их не было.
Мдя... Ну я то ведь думал, что у тебя есть какие-то веские основания, раз ты это озвучиваешь.
что дает resource://, он что, тоже не кэшируется
Да, оверлеи через resource:// не кэшируются.
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
Без динамической подмены версии js как раз и будет "через одно место" - лишние записи в chrome.manifest, несколько оверлеев, слегка отличающихся только значением атрибута type. Это при том, что в chrome.manifest нет флага для platformversion.
Однако я могу подключить скрипт без указания версии js, содержащий
, и он будет работать.
И
будет работать.
Нельзя ли переместить методы для выполнения кода кнопок туда, откуда они будут работать без уточнения версии?
И ещё неизвестно, решит это проблему, или нет.
Если оверлей через resource:// решает проблему, нет смысла и проверять, понятно, что так сложнее.Только можно ли при этом будет поставить CB в виде глобального расширения? Или будет использоваться что-то хитрее, чем
resource custombuttons-profile ../../custombuttons/
?
Хотя нет, еще же где-то должна определиться версия js.
Я разве что-нибудь говорил про "баг в реализации chrome.manifest" ?
А я и не утверждаю, что ты говорил. Но ведь баг есть. И он где-то находится. Так вот, где баг?
Мдя... Ну я то ведь думал, что у тебя есть какие-то веские основания, раз ты это озвучиваешь.
Я сказал, что «по-моему». К тому же, проявлялось все это довольно-таки странно. Например, у меня почему-то вываливалось исключение на document.loadOverlay() при использовании custombutton-протокола и при том, что в chrome.manifest все строки с custombutton:// были закомментированы.
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Однако я могу подключить скрипт без указания версии js, содержащий
2.0, xbl вызывает что-нибудь из скрипта, загруженного без указания версии.
А я и не утверждаю, что ты говорил. Но ведь баг есть. И он где-то находится. Так вот, где баг?
Я же сказал: не работает chrome.manifest
Например, у меня почему-то вываливалось исключение на document.loadOverlay() при использовании custombutton-протокола и при том, что в chrome.manifest все строки с custombutton:// были закомментированы.
При каких условиях ?
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
2.0, xbl вызывает что-нибудь из скрипта, загруженного без указания версии.
Н-ну, пусть xbl оповещает наблюдателя, что нужно выполнить код такой-то кнопки.
Я же сказал: не работает chrome.manifest
Это уже вопрос терминологии. Если что-то не работает, то или так и задумано, или это баг.
При каких условиях ?
Тот код не сохранился, потому как не давал нужного результата...
И еще может влиять наличие/отсутствие/установка ABP.
Пока пытался воспроизвести, убил все расширения:
## Firefox overlay chrome://browser/content/browser.xul chrome://custombuttons/content/test.xul overlay chrome://browser/content/browser.xul chrome://custombuttons/content/overlay.xul # overlay chrome://browser/content/browser.xul custombuttons://content/buttonsoverlay.xul ## Browser # overlay chrome://browser/content/browser.xul custombuttons://content/cbbutton.xul overlay chrome://global/content/customizeToolbar.xul custombuttons://content/cbbutton.xul
test.xul:
<?xml version="1.0"?> <overlay xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> <script type="application/x-javascript"> <![CDATA[ document.loadOverlay("custombuttons://content/buttonsoverlay.xul", null); document.loadOverlay("custombuttons://content/cbbutton.xul", null); ]]> </script> </overlay>
А
window.addEventListener("load", function(e) { document.loadOverlay("custombuttons://content/buttonsoverlay.xul", null); document.loadOverlay("custombuttons://content/cbbutton.xul", null); }, false);
тупо не дает никакого эффекта.
Правда, это все без установленного ABP.
А при установке ABP плюс
setTimeout(function() { document.loadOverlay("custombuttons://content/buttonsoverlay.xul", null); document.loadOverlay("custombuttons://content/cbbutton.xul", null); }, 1000);
Firefox вообще падает при запуске. о_О
Закомментировал setTimeout и далее, тогда запустился.
Заодно нашел в userChromeJS коммент про https://bugzilla.mozilla.org/show_bug.cgi?id=330458.
Отредактировано Infocatcher (15-08-2009 03:14:21)
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Н-ну, пусть xbl оповещает наблюдателя, что нужно выполнить код такой-то кнопки.
Эта идея требует тщательного обдумывания.
Может быть, когда-нибудь потом, но не сейчас.
Это уже вопрос терминологии.
Первоначальный вопрос, напомню, был "Что не так с компонентой" : )
Firefox вообще падает при запуске. о_О
Наверное, если поставить observer вместо null, который будет загружать следующий оверлей, падать не будет.
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует