Возникла проблема при попытке разместить на тулбаре динамическую картинку.
В XUL файле есть кнопка с допустим id="dinam"
В CSS файле прописана картинка для этого id.
Так это в статике.
А нужно чтоб в записимости от переменной была разная картинка.
Но если в js-файле делать getElementById ("dinam");, то врядли мы сможем потом использовать setAttribute ("id", dinam2); (пробовал, не работает).
В CSS, думаю, нельзя прикрутить JS файл и использовать типа
#dinam {
    list-style-image: url(НАША_ПЕРЕМЕННАЯ);

Как найти выход из данной проблемы?
Или можно как то использовать картинку в кнопке без id в label'e?

css-правило можно сделать на любой атрибут.
#dinam[attr="state1"] { list-style-image: url(...); } /* без атрибутов */
#dinam[attr="state2"] { list-style-image: url(...); } /* с атрибутом attr */
и потом по ситуации ставить нужное значение атрибуту attr.

с этим разобрался

setAttribute ("attr", "state1");
...
setAttribute ("attr", "state2");

а такой вопрос, возможно как нить прикрутить refresh-функцию?
картинка просто - png файл генерируемый, и ее содержимое обновляется раз в несколько минут.
но в данный момент она грузится один раз и все, пока не переоткроешь браузер, она не обновится.
даже если с динамикой выбрать одну картинку, потом вторую и снова первую - первая при этом не обновится, а будет такой, какой она загрузилась в первый раз.
не знаю принципов работы CSS - грузит ли он "при запуске" все картинки и потом их использует или просто картинка кешируется и не обновляется... в любом случае хочется обновления картинки по нажатию кнопки

Выделить код

Код:

lbl. setAttribute ("attr", nonepic);
lbl. setAttribute ("attr", mypicture);

где nonepic - атрибут с пустой картинкой, mypicture - переменная, через которую ставится нужный атрибут - наша картинка
пытался этим сделать обновление картинки, в случае если переменная mypicture не меняет значения, но само собой не вышло, картинка (точнее все картинки от каждого атрибута) как загрузилась один раз, так и остается.

Вот есть элемент image: https://developer.mozilla.org/en/XUL/image#a-validate
У него - атрибут validate

validate
    Type: one of the values below
    This attribute indicates whether to load the image from the cache or not. This would be useful if the images are stored remotely or you plan on swapping the image frequently. The following values are accepted, or leave out the attribute entirely for default handling:

    * always: The image is always checked to see whether it should be reloaded.
    * never: The image will be loaded from the cache if possible.

По-моему - то, что нужно.

ну это, как я понял, отдельный элемент, как кнопки и прочее и само по себе без нажатия (активации скрипта) обновляться оно не будет. validate="always" внутри кнопки тоже не проканало
или просто использовать данный элемент "внутри" кнопки?
щас пойду пробовать вообщем

17-07-2009 17:39:17
сделал через image, но либо не работает, либо в чем то ошибся
XUL:

Выделить код

Код:

<toolbarbutton id="OnLineButton" tooltiptext=""
                               label="" oncommand="OnLineScript()">               
                <image id="onlinel2on" src="" validate="always" />
                  </toolbarbutton>

JS:

Выделить код

Код:

var lbl2 = document. getElementById ("onlinel2on");
lbl2. setAttribute ("src", myimage);

где myimage - сгенерированная строка с УРЛом картинки
само по себе работает, как и через CSS и даже занимает меньше кода, но вот обновлять не обновлет - показывает один и тот же онлайн. между разными картинками (разные занчения переменной - разные картинки) переключается на ура, но не обновляет при этом.

eXeLe пишет

но либо не работает, либо в чем то ошибся

У меня тоже не работает. Скорее всего, chrome xul кэшируется всегда.

а нет функций очищения кэша/удаления файла из кэша или например перезаписи файла в кэше?

Если картинка загружается по протоколу http - то есть, но в этом случае, я думаю, должен работать атрибут validate.
Если по протоколу file - не знаю. Картинку локального файла при его изменении можно попробовать загружать с помощью протокола data:

Anton пишет

Если по протоколу file - не знаю. Картинку локального файла при его изменении можно попробовать загружать с помощью протокола data:

Можно прибавлять к ссылке что-то вроде
"?" + new Date().getTime()
Или Gecko-специфичный Date.now(), выдающий то же самое.
Правда, это приведет к мусору в кэше.

Infocatcher пишет

Anton написал:Если по протоколу file - не знаю. Картинку локального файла при его изменении можно попробовать загружать с помощью протокола data:Можно прибавлять к ссылке что-то вроде"?" + new Date().getTime()Или Gecko-специфичный Date.now(), выдающий то же самое.Правда, это приведет к мусору в кэше.

сделал ссылку на картинку вида url + "?" + new Date().getTime()
обновляется успешно, спасибо =)