>Форум Mozilla Россия http://forum.mozilla-russia.org/index.php >Разработка http://forum.mozilla-russia.org/viewforum.php?id=18 >2 вопроса по окну Customise Toolbar http://forum.mozilla-russia.org/viewtopic.php?id=24511 |
AllSeeingI > 01-07-2008 08:52:26 |
Доброго всем утра, 1. Есть у меня в тулбаре кнопка (type=menu) с широкой (85px по ширине, 20px по высоте) картинкой. При перемещении этой кнопки в окно Customise Toolbar от кнопки остаётся только название и дроп-маркер, а картинки нет. Как это исправить? 2. Как сделать так, чтобы при старте FF в окне Customise Toolbar уже были некие toolbaritem'ы? Заранее спасибо. |
Shutnik > 01-07-2008 11:49:53 |
чтобы в Customise Toolbar был значок у кнопки, можно сунуть в chrome.manifes примерно такого вида Выделить код Код:style chrome://global/content/customizeToolbar.xul chrome://myaddon/skin/customizeToolbar.css и внего вписать id кнопки и картинку к нему. чтобы текст отображался под иконкой, можно добавить к ней класс toolbarbutton-1 чтобы вручную сунуть кнопку на тулбар, я использую такой код: Выделить код Код:var navbar = document.getElementById("nav-bar"); var urlbar = document.getElementById("urlbar-container"); navbar.insertItem("mybutton", (urlbar && urlbar.parentNode == navbar ? urlbar : null), null, false); navbar.setAttribute("currentset", navbar.currentSet); document.persist(navbar.id, "currentset"); |
Anton > 01-07-2008 15:52:26 |
В оверлей на browser.xul добавить их как дочерние в элемент <toolbarpalette id="BrowserToolbarPalette"> |
AllSeeingI > 01-07-2008 20:23:40 |
Заработало, спасибо. Но есть ещё вопрос: я при старте браузера навешиваю на элементы всякие события и т.д., и когда добавляется новый элемент через Customise Toolbar - новые элементы не работают (потому как не инициализированы). Это как-то можно обойти? События есть какие-нибудь? |
Anton > 01-07-2008 20:29:52 |
dragdrop или xbl |
AllSeeingI > 01-07-2008 20:46:28 |
А xbl тут причём? |
Shutnik > 01-07-2008 21:08:16 |
ммм. я не совсем понял о чём ты |
Anton > 01-07-2008 21:09:35 |
Когда на элемент "навешивается" биндинг, управление получает конструктор биндинга. В нём можно выполнить все необходимые действия по инициализации элемента. |
AllSeeingI > 02-07-2008 00:31:52 |
И всё-таки простой способ есть: Выделить код Код:var methodstr = BrowserToolboxCustomizeDone.toString(); if(methodstr.indexOf("myFunc") == -1) { methodstr = methodstr.substring(0, methodstr.lastIndexOf("}") - 1); methodstr += "var wm = Components.classes['@mozilla.org/appshell/window-mediator;1'].getService(Components.interfaces.nsIWindowMediator);" methodstr += "var mainwindow = wm.getMostRecentWindow('navigator:browser');"; methodstr += "if(mainwindow.myFunc) mainwindow.myFunc();"; methodstr += "}"; eval("BrowserToolboxCustomizeDone =" + methodstr); } Грубо, зато работает.
Имелось ввиду - при старте расширения. Добавлено Wed Jul 2 00:32:39 2008 : |
Anton > 03-07-2008 15:09:30 |
"Хак" это называется. Кстати, в browser.js есть такие строки: Выделить код Код:var toolbox = document.getElementById("navigator-toolbox"); toolbox.customizeDone = BrowserToolboxCustomizeDone; откуда Выделить код Код:var toolbox = document. getElementById ("navigator-toolbox"); var oldCustomizeDone = toolbox. customizeDone; toolbox. customizeDone = function myCustomizeDone (aToolboxChanged) { oldCustomizeDone (aToolboxChanged); // ... }; или Выделить код Код:var toolbox = document. getElementById ("navigator-toolbox"); toolbox. customizeDone = (function (oldFunction) { return function (aToolboxChanged) { oldFunction (aToolboxChanged); // ... }; }) (toolbox. customizeDone); |
AllSeeingI > 04-07-2008 02:56:21 |
Тоже логичный выход. Но, что интересно, Яндекс в Яндекс.Баре решил делать по-моему |
Anton > 04-07-2008 14:00:20 |
От того, что разработчики Яндекс бара сделали расширение для Яндекса, потенциально ненадёжный подход не стал более надёжным. |