razoo
4. Еще
Возможно ли сделать так, чтобы картинка кнопки на onmouseover менялась в зависимости от того какой модификатор в это время нажат? Т.е. ctrl + onmouseover – одна картинка, просто onmouseover – другая. Это было бы наглядней, если все-таки получится применить варианты нажатий с модификаторами
Можно, код в раздел "Инициализация":
this. oldimage = this. image; this. onmouseover = function (event) { if (event. ctrlKey) this. image = "file:///m:/redicon.png"; else if (event. shiftKey) this. image = "file:///m:/greenicon.png"; else this. image = this. oldimage; }; this. onmouseout = function (event) { this. image = this. oldimage; };
Соответственно, поправить this. image = "file:///... нужными адресами.
Правда, картинка не будет меняться если модификатор нажимается когда курсор уже находится над кнопкой.
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
razoo
5. Переделал кнопки All-in-One Sidebar - Page Info и Multipanel. Они работают. Но как и задумано в AiOS – открываются в боковой панели. У родных кнопок AiOS есть возможность открывать в новом табе – но только на ctrl +click. Как сделать, чтобы они открывались в табе по умолчанию?
Page Info:
Multipanel:
AiOS должен быть установлен.
Добавлено 01-08-2009 15:37:39
razoo
6.
Infocatcher пишетЕсли только сделать «обертку» для оригинальной функции открытия
можно узнать, что значит "обертка"? )
Здесь имеется в виду, что в общем случае то, что задумано быть открытым в окне, на вкладке открыть невозможно.
Вообще, кто-нибудь когданибудь открывал в табе менеджер скрапбука?
Так:
?
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
Al_H
В раздел "Код": http://pastebin.mozilla-russia.org/100508
В раздел "Инициализация": http://pastebin.mozilla-russia.org/100509 - баг, не работают чекбоксы для строк тем
Исправлено: http://pastebin.mozilla-russia.org/100576
Желательно удалить из корневого каталога профиля файл themes.js
Темы фильтруются по префиксам "themecustomize-", "themecustomization-", "themeheal-".
С прокруткой таблицы не справился.
Отредактировано Anton (04-08-2009 23:50:06)
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
Классный аддончик, как раз для меня, мне только дай чегонить поскриптить Только такой вопрос появился: как получить доступ к JS-переменным, использующимся на конкретной странице? То есть, к примеру, где-то в скриптах страницы есть строчка
А я хочу, чтобы зайдя на эту страницу, я мог нажать свою кнопку, где написано что-то вроде
и мне выведет текст переменной?
Отсутствует
Только такой вопрос появился: как получить доступ к JS-переменным, использующимся на конкретной странице?
В общем случае это небезопасно, вроде как.
content.location.href = "javascript: var aaa='bbb'; void 0"; alert(content.wrappedJSObject.aaa);
А content.location.href = "javascript: ... " выполняет код без chrome-привилегий.
Или как-то так:
function bookmarklet() { window.aaa='bbb'; alert(aaa); } content.location.href = "javascript: (" + uneval(bookmarklet) + ")();";
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
нене, через window я сам знаю) дело в том, что страницу-то не я пишу)
Получается, что скрипты кнопок не имеют доступа к переменным, которые не прописаны в window...
Вот к примеру в консоли firebug'a можно написать любую команду, и все переменные видны... тут что-то не так?
Отсутствует
Dreyk
...То есть, к примеру, где-то в скриптах страницы есть строчка...
Если "где-то в скриптах страницы" есть переменная x, то
отобразит её значение.
Например, где-то в скриптах этой страницы есть переменная xajax.
выдаёт её значение.
...к переменным, которые не прописаны в window...
Какие переменные тебя интересуют ?
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
Есть какой-то API? Где почитать можно?
На http://developer.mozilla.org/
Там полно всяких API
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
как к функциям получить доступ, тем которые в страничке объявлены?
Так же, как и к переменным.
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
Только функции со странички лучше не вызывать...
А использовать для этого, например, javascript-протокол:
Например, где-то в скриптах этой страницы есть переменная xajax.
Пример на тему:
function bookmarklet() { alert(xajax); } content.location.href = "javascript: (" + uneval(bookmarklet) + ")();";
Или изучать матчасть про Components.utils.evalInSandbox.
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Только функции со странички лучше не вызывать...
Вообще говоря, лучше не трогать и переменные - к некоторым может быть привязана функция (getter).
Но:
html: http://pastebin.mozilla-russia.org/100525
chrome: http://pastebin.mozilla-russia.org/100526
Скорее всего, я плохо искал, но на приведенном примере разницы между песочницей и прямым вызовом, по крайней мере в 3.5 не видно.
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
Скорее всего, я плохо искал, но на приведенном примере разницы между песочницей и прямым вызовом, по крайней мере в 3.5 не видно.
Видимо, враппер там уже не один:
https://developer.mozilla.org/en/XPConnect_wrappers
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Вообще говоря, лучше не трогать и переменные - к некоторым может быть привязана функция (getter).
Да, забыл про них...
По идее, достаточно проверить
obj.__lookupGetter__(property)
Скорее всего, я плохо искал, но на приведенном примере разницы между песочницей и прямым вызовом, по крайней мере в 3.5 не видно.
Я тоже поигрался – только через eval() и прочие new Function() удалось вызвать код со страницы с повышенными привилегиями.
Отредактировано Infocatcher (03-08-2009 17:08:15)
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Та нет там вроде геттеров)
Это я себе кнопку писал, чтобы на файлообменниках по 30-60 секунд не ждать Собстна функций вызывать и не надо даже, без этого обошелся
Как выложить готовую кнопку?
Отредактировано Dreyk (04-08-2009 03:19:50)
Отсутствует
Anton, спасибо, работает.
Я только заменил на
chrome://scrapbook/content/manage.xul
Иначе он открывает в табе не менеджер а боковую панель скрапбука.
В отличии от Скрапбука открыть в табе Менеджер Закладок таким триксом не удалось.
Может, предложите еще вариант?
Кнопки All-in-One Sidebar также заработали как хотелось. Все отлично. С модификаторами тоже помогли разобраться – спасибо Antonу и Infocatcherу.
Теперь возник вопрос, можно ли как-нибудь обрабатывать двойные клики?
Что касается замены плагина Uppity на кастомбатоновскую кнопку – то, порыскав, я нашел GoUp, кнопка практически делает то же самое. Но она для CB2, может быть, поэтому работает некорректно? На какой бы пункт в меню дропмаркера я не щелкал – она поднимает только на один уровень.
Я не прошу возиться с чужим кодом :)), я пока хотел только узнать может ли этот глюк быть из-за «заточки» кнопки под разные Custom Buttons?
Еще хотел спросить, какой должен быть код кнопки для папки из закладок. Или где его поискать DOMi Т.е., если поместить папку на панель закладок она ведь ведет себя как выпадающее меню. Вот, собственно у меня на панели закладок 20 таких папок и все закладки раскиданы в них по темам и подкаталогам. Эти 20 и хотелось заменить кнопками (раздилить визуально по темам, а то, они все одинаковые). Но только те папки, что на панели (т.е головные темы закладок), все что ниже чтобы оставалось родным букмарочным.
Отсутствует
Dreyk
Как выложить готовую кнопку?
В тегах [code] или на pastebin, я думаю.
razoo
В отличии от Скрапбука открыть в табе Менеджер Закладок таким триксом не удалось.
?
Теперь возник вопрос, можно ли как-нибудь обрабатывать двойные клики?
Так же, как и обычные клики:
я пока хотел только узнать может ли этот глюк быть из-за «заточки» кнопки под разные Custom Buttons?
Для этой конкретной кнопки - нет. Я проверил на CB2 3.0.1 - она работает точно так же. Наверное, так задумано.
На замену переделанная из кнопки для Block Site новая:
В раздел "Код":
var url = getBrowser (). contentDocument. location. href; url = url. match (/^([a-zA-Z]+:\/\/\/?)?([^\/]+)\/([^?]*)?(.*)$/); var domain = ""; if (url) domain = url [1] + url [2] + "/" loadURI (this. uriToLoad || domain); this. uriToLoad = "";
В раздел "Инициализация":
var THIS = this; var enabledImg = ""; var disabledImg = ""; this. clickHandler = function (event) { if (event. button == 2) return; if (event. originalTarget. nodeName == "toolbarbutton") return; else if (event. originalTarget. nodeName == "menuitem") this. uriToLoad = event. originalTarget. getAttribute ("label"); }; this. getPaths = function (event) { var url = getBrowser (). contentDocument. location. href; url = url. match (/^([a-zA-Z]+:\/\/\/?)?([^\/]+)\/([^?]*)?(.*)$/); var domain = ""; var levels = ""; if (url) { domain = url [1] + url [2] + "/"; var path = url [3] && url [3]. split ("/") || ""; var levels = []; var curpath = ""; for (var i = 0; i < path. length; i++) { if (path [i]) { curpath = curpath + path [i] + "/"; levels. push (domain + curpath); } } levels. pop (); } if (!levels) { THIS. disabled = true; if (disabledImg) THIS. image = disabledImg; } else { THIS. disabled = false; if (enabledImg) THIS. image = enabledImg; } return levels || []; }; this. createMenu = function (event) { if (event && (event. originalTarget. nodeName != "toolbarbutton")) return; var levels = this. getPaths (event); var menu = this. getElementsByTagName ("menupopup") [0]; if (menu) this. removeChild (menu); menu = ""; menu = <menupopup xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"/> var menuitem; for (var i = 0; i < levels. length; i++) { menuitem = <menuitem label={levels [i]} tooltiptext={levels [i]}/> menu.menuitem[i] = menuitem; } menu = new DOMParser (). parseFromString (menu. toXMLString (), "application/xml"). documentElement; this. appendChild (menu); this. type = "menu-button"; this. orient = "horizontal"; }; this. onUnload = function (event) { window. removeEventListener ("focus", THIS. getPaths, true); window. removeEventListener ("unload", THIS. onUnload, false); }; this. destroy = function () { this. onUnload (null); }; window. addEventListener ("focus", this. getPaths, true); window. addEventListener ("unload", this. getPaths, false); this. createMenu (null); this. setAttribute ("onclick", "this.clickHandler(event)"); this. setAttribute ("onmouseover", "this.createMenu(event,getBrowser().contentDocument.location.href)");
Еще хотел спросить, какой должен быть код кнопки для папки из закладок.
Вот это не просите. Я пару раз честно за это брался, оба раза не справился, и браться больше не хочу.
Отредактировано Anton (04-08-2009 15:22:15)
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
...у меня на панели закладок 20 таких папок и все закладки раскиданы в них по темам и подкаталогам. Эти 20 и хотелось заменить кнопками (раздилить визуально по темам, а то, они все одинаковые). Но только те папки, что на панели (т.е головные темы закладок), все что ниже чтобы оставалось родным букмарочным.
у меня подобное реализовано через userChrome.css:
/* Скрыть "text" или "icon" папки в Панели закладок */
#personal-bookmarks .toolbarbutton-text {display : none !important;}/* Назначить иконку папке в Панели закладок */
.bookmark-item[container="true"][label="тут название папки в Панели закладок"] {
list-style-image: url( 'тут код иконки в base64') !important;
-moz-image-region: rect(0px 16px 16px 0px) !important;
}
Правда не всплывают подсказки при наведении на иконку папки
Отредактировано 3Jlou (04-08-2009 15:40:16)
Отсутствует
Dreyk
Я имею в виду через собственный протокол custombuttons://
В контекстном меню кнопки есть пункт "Копировать код в буфер". Он копирует в буфер обмена ссылку вида custombutton://...
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
/* Скрыть "text" или "icon" папки в Панели закладок */
#personal-bookmarks .toolbarbutton-text {display : none !important;}/* Назначить иконку папке в Панели закладок */
.bookmark-item[container="true"][label="тут название папки в Панели закладок"] {
list-style-image: url( 'тут код иконки в base64') !important;
-moz-image-region: rect(0px 16px 16px 0px) !important;
}
Отлично, спасибо.
Правда не всплывают подсказки при наведении на иконку папки
Это мелочь, можно, например, чуть расширить изображение иконки папки и вписать название прямо в нее.
Работает. Я и не знал, что places - это букмарки ((
Кстати, все табы в каторые принудительно запихали окна имеют в заголовке:
И полоска Fission показывает, будто таб что-то не может догрузить.
мне это не мешает, даже прикольно, но может им "витаминов" нехватает :)
Т.е. вопрос: это оттого, что таб не знает, что ему в фавикон назначить, или он действительно "недогружает" чего-то? Повторюсь, на полноценности работы в таком табе это никак пока не сказывалось.
На замену переделанная из кнопки для Block Site новая:
Везде работает, но сайты с результатами поискового запроса почему-то не обрабатывает.
В принципе, несущественно, это, просто, при тестировании кнопы попались )
Спасибо, пригодиться.
Отредактировано razoo (04-08-2009 21:23:33)
Отсутствует
И полоска Fission показывает, будто таб что-то не может догрузить.
мне это не мешает, даже прикольно, но может им "витаминов" нехватает
Т.е. вопрос: это оттого, что таб не знает, что ему в фавикон назначить, или он действительно "недогружает" чего-то?
Я посмотрел на тестовом профиле 3.5 и FirefoxPortable 3.0.6 + Fission 1.0.9 - "недогруза" не увидел.
Фавиконка в places.xul вряд ли явно прописана, так что у таба она должна быть по умолчанию, и недозагрузка не из-за этого.
Не знаю, может быть из-за того, что какой-нибудь из скриптов "падает" на ошибке.
Везде работает, но сайты с результатами поискового запроса почему-то не обрабатывает.
Могу попробовать доделать, только нужен адрес, сам не найду.
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
Могу попробовать доделать, только нужен адрес, сам не найду.
Любой Google-Яндекс.
Только тут скорее мой косяк: кнопка обрабатывает правильно и если нажать на саму кнопку то GoUp будет, но поскольку вариант для «вверх» у него только один – он не указывает его в меню дропмаркера. А я клацал по меню - видел, что оно пусто - и переходил на другой таб. Причем, маленький пустой квадратик, который бывает когда нет пунктов в меню - малозаметен, но пока он не закроется – я не могу перескочить на другой таб – при «скоростном кликаньи бывалого серфера» возникает «ложный эффект легкого подвисания». ))
Кстати, в Uppity есть еще така фича: пока таб не закрыт – в меню остается список возможных мест «вверх» и «вниз» до места с которого начал, а настоящее место нахождения – отмечено черным маркером.
Т.е. это, фактически хистори таба, только не реальные переходы, а возможные, и не «вперед-назад», а «вверх-вниз» :)
Но, что у них реально не по уму сделано: что чем выше GoUp – тем ниже он в меню )
Отредактировано razoo (05-08-2009 10:01:46)
Отсутствует