Xpoint
   [напомнить пароль]

динамический xbl

Метки: [без меток]
2006-10-02 12:16:06 [обр] dark-demon(0/1)[досье]
проблема такая: я динамически меняю содержимое xbl-файла, но применяется оно только после перезагрузки, а хотелось бы сразу... можно ли как-то добраться до массива xbl-лек, или хотябы заставить мозиллу обновить кеш с ними?
спустя 2 часа 53 минуты [обр] Владимир Палант(434/4445)[досье]
Просто чтобы понять, что именно там кешируется — попробуйте добавить настройку nglayout.debug.disable_xul_cache и установить ее на false.
спустя 1 минуту [обр] Владимир Палант(434/4445)[досье]
PS: Метод document.loadBindingDocument() вы знаете? Он позволяет загрузить XBL и менять его документ с помощью DOM.
спустя 3 часа 24 минуты [обр] dark-demon(0/1)[досье]
nglayout.debug.disable_xul_cache к сожалению не действует на xbl %-/
а за loadBindingDocument спасибо, думаю это - то, что надо.
спустя 1 час 13 минут [обр] dark-demon(0/1)[досье]
забыл сказать, что правильная ссылка всё же - http://www.xulplanet.com/refer......tml#method_loadBindingDocument
:)
спустя 26 минут [обр] Владимир Палант(434/4445)[досье]
Это без разницы, данный интерфейс в XUL и HTML реализован одинаково...
спустя 15 часов [обр] dark-demon(0/1)[досье]
у меня тут возникла проблема с этой функцией. id у биндингов куда-то пропадают. такой код ничего не возвращает:
alert(document.loadBindingDocument('chrome://cb2-profile/content/custombuttons2.xbl').getElementById('cb2-imagesh'));
тем не менее, через getElementsByTagName все биндинги находятся, но опять же id ни у кого не установлен %-\
спустя 2 часа 49 минут [обр] Владимир Палант(434/4445)[досье]

Не пропадают, просто это XML-документ. В XML атрибут id не имеет никакого особенного значения, в качестве идентификатора может выступать любой атрибут в соответствии с DOCTYPE. В XBL DOCTYPE отсуствует, соответственно идентификатора нет.

А если до элементов добираться другими способами (getElementsByTagName либо documentElement.firstChild) — атрибут id есть, getAttribute('id') возвращает значение. Вы пытались получить id как свойство, я правильно понимаю? У nsIDOMElement такого свойства нет, а больше элементы в XML никаких интерфейсов не реализуют.

спустя 1 час 8 минут [обр] dark-demon(0/1)[досье]
getAttribute('id') - так пробовал, но ничего не получал. через свойство тоже глухо.
надо будет ещё через getElementsByAttribute попробовать...
спустя 22 минуты [обр] Владимир Палант(434/4445)[досье]
Не знаю, у меня getAttribute('id') корректно всё возвращает.
спустя 20 часов [обр] dark-demon(0/1)[досье]

проверил через DOM Inspector - id нет ни в каком виде. примечательно, что если биндинг применён к какому-либо элементу, то пропадает и extends /(o_0)/
однако, если кроме id задать xbl:id с тем же значением, то его можно юзать...

мой код примерно такой: http://dark-demon.jino-net.ru/~files/cb2-tp3.rar
плюс на одну из кнопок повесил предложенный выше код. кстати, getElementById в списке функций возвращаемого loadBindingDocument xml-документа значится....

спустя 4 минуты [обр] dark-demon(0/1)[досье]

а, ну содержимое архива нужно распаковать в папку профиля, чтобы всё заработало...

а у вас какой код?

спустя 1 час 17 минут [обр] Владимир Палант(434/4445)[досье]
Посмотрел, что выдает XMLSerializer для этого документа — печальная картина. Смотрю в код и вижу, что "динамичность" у XBL очень ограниченная. Похоже, что она ограничивается изменением содержимого тега content...
спустя 7 минут [обр] Владимир Палант(434/4445)[досье]
Кстати, к вашему изначальному вопросу — поскольку я тут наткнулся на ответ. XBL по возможности использует глобальный XUL cache. Но дополнительно он еще использует и собственный кеш для каждого документа на тот случай, если в XUL cache нужных данных нет или он отключен. Боюсь, что кеширование вы "побороть" не сможете — можно лишь переименовывать файл при каждом изменении.
спустя 5 часов [обр] dark-demon(0/1)[досье]
а кто такой XMLSerializer?
правильно ли я понял, что динамически менять в xbl определения методов, своиств итд нельзя?
спустя 1 час 4 минуты [обр] Владимир Палант(434/4445)[досье]

XMLSerializer преобразует DOM-документ в строку - http://www.xulplanet.com/references/objref/XMLSerializer.html. Удобно, когда нужно взглянуть, что за документ мы там получили.

Боюсь, что поняли вы правильно. Судя по тому, что я видел в коде, документ мы получаем уже обработанный. Причем реализация XBL удаляет все атрибуты/ноды, которые она отработала и перенесла в свои внутренние структуры. Доступа к этим внутренним структурам у нас нет, соответственно методы/свойства мы трогать уже не можем.

спустя 14 часов [обр] dark-demon(0/1)[досье]
и какой тогда смысл в функции loadBindingDocument? %-ну да ладно, по поводу xbl у меня ещё один вопросик. допустим через тег <resources> в биндинге я определил картинку. как мне из скрипта до неё достучаться?
спустя 6 часов [обр] Владимир Палант(434/4445)[досье]

Функция loadBindingDocument есть в спецификации — но реализация, судя по всему, сильно уступает...

Что касается resources — вы про http://www.w3.org/TR/xbl/? ИМХО Gecko еще не реализует XBL 2.0. См. http://www.mozilla.org/projects/xbl/xbl.html. Но в принципе — в спецификации сказано, что картинки в resources указываются исключительно для предзагрузки.

спустя 18 часов [обр] dark-demon(0/1)[досье]
да мне бы прсто src этих картинок бы получить, чтобы не писать каждый раз их полный урл. можно, конечно, их задавать через field, но это не так эстетично ;)
Powered by POEM™ Engine Copyright © 2002-2005