Вот тут написано, как добавлять иконки в контекстное меню FireFox. Там надо указать путь к картинке в виде url(image_url), но только я не пойму, как сопоставить этот путь с локальными файлами на диске. Вот, например, видел такие пути:

url(data:image/png;base64 …
url("chrome://global/skin/icons/…")
url("chrome://global/content/bindings/…")

Но ГДЕ это находится реально на диске???

Или, если поставить вопрос с другой стороны. Как мне через этот дурацкий "chrome://" сослаться на картинки:
Папка_Профиля\icons\default\SomeImage.png
C:\Program Files\Папка_FireFox\My_Icons\SomeImage.png

И вообще, как прописать в url(image_url) путь к локальному файлу? Просто тупая подстановка адреса в стиле Windows (типа C:\SomeDIR\SomeFile.png) ничего не даёт …

Тема перенесена из форума «Firefox» в форум «Разработка».

EgorSokolov пишет

Вот, например, видел такие пути:

url(data:image/png;base64 …
url("chrome://global/skin/icons/…")
url("chrome://global/content/bindings/…")

data:image/png;base64 - вообще нигде, это строковое представление двоичных данных - т.н. base64 string.
chrome - в общем случае и как отдельный объект файловой системы - тоже нигде: физически файл может находиться внутри zip-архива (и так чаще всего и бывает), chrome URI указывает на этот файл внутри архива.

EgorSokolov пишет

Или, если поставить вопрос с другой стороны. Как мне через этот дурацкий "chrome://" сослаться на картинки:
Папка_Профиля\icons\default\SomeImage.png
C:\Program Files\Папка_FireFox\My_Icons\SomeImage.png

Никак. Чтобы chrome URI были валидными, в системе (в FF) должен быть зарегистрирован соответствующий адресуемым ресурсам chrome package; для регистрации нужен манифест - chrome.manifest. С помощью chrome URI адресуются внутренние ресурсы браузера и расширений, внешние произвольные файлы таким образом адресованы быть не могут.

EgorSokolov пишет

И вообще, как прописать в url(image_url) путь к локальному файлу? Просто тупая подстановка адреса в стиле Windows (типа C:\SomeDIR\SomeFile.png) ничего не даёт

Вот так: file:///С:/SomeDIR/SomeFile.png

hydrolizer
А разве не будет работать, если положить файл в папку chrome профиля и прописать ссылку url(chrome://имя.тип)?

Kamui
Нет. Папка chrome и протокол chrome не соотносятся. Но даже если бы и работало - это не есть общий случай произвольного файла.

Вообще, есть https://developer.mozilla.org/en/JavaSc … ng_aliases, только реальная необходимость в таких фокусах бывает довольно редко.

hydrolizer пишет

Нет. Папка chrome и протокол chrome не соотносятся. Но даже если бы и работало - это не есть общий случай произвольного файла.

Тьфу ты блин, перепутал:) там же если положить файл в папку chrome, то можно просто указывать его имя? Т.е. как-то так: url(имя.тип)?

Kamui пишет

там же если положить файл в папку chrome, то можно просто указывать его имя? Т.е. как-то так: url(имя.тип)?

Это же легко проверяется. :) Можно любые относительные пути.

Infocatcher пишет

Это же легко проверяется. :) Можно любые относительные пути.

Я как-то не зморачивался насчет локальных файлов, всегда в стилях делал в base64:)

Infocatcher пишет

только реальная необходимость в таких фокусах бывает довольно редко

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

Я делал так:
клал в профайл диру chrome
и писал такоэ в userChrome.css

#personal-bookmarks toolbarbutton[label="openSUSE"]
{
list-style-image: url("suse-green.ico") !important;
padding: 0px !important;
}

seleko пишет

клал в профайл

Жестоко >__>

hydrolizer пишет

но я как-то затрудняюсь представить, когда она может понадобиться

В Custom Buttons используется.
Вроде бы, чтобы оверлей с кнопками не кэшировался.

hydrolizer пишет
Infocatcher пишет

только реальная необходимость в таких фокусах бывает довольно редко

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

в некоторых случаях код исполняется ещё до регистрации ресурсов. случаи эти точно не назову и актуально ли это для современных версий лиса, но иметь ввиду стоит.