подскажите, как поместить код css в код CB-кнопки?
есть такой стиль:
/*AGENT_SHEET*/ #phrase-highlighter-toolbar-button .toolbarbutton-icon { background-color: pink !important; } #phrase-highlighter-toolbar-button > .toolbarbutton-menubutton-dropmarker > .dropmarker-icon { background-color: pink !important; }
его нужно активировать по одному нажатию на CB-кнопку и отключить по другому нажатию
смотрел примеры в других кнопках, но у меня ничего не получилось...
Отсутствует
Inko7
В инициализацию, а css в справку
// ЛКМ переключить настройки кнопки и стиль .......... this._handleClick = function() setStyleForPages(void(run.value = !run.value)); // Создать настройки кнопки в about:config если они не существует .......... var s = "CB" + _id.slice(20) + ".setStyleForPage"; cbu.isPref(s, false); var previousUri = "CB" + _id.slice(20) + ".previousUri"; // Иконка для включеной кнопки .......... var icon = self.ownerDocument.getAnonymousElementByAttribute(self, "class", "toolbarbutton-icon"); var styleImage = "вставить иконку в base64"; // Получить настройки кнопки и css код из вкладки Справка .......... var css = self.Help; var run = Application.prefs.get(s); // Переключить css стиль для страницы .......... function setStyleForPages(reason) { if ( reason == "destructor" ) return; var sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService); var uri = makeURI("data:text/css," + encodeURIComponent(css)); try { sss.unregisterSheet(Services[_id + "previousUri"] || uri, 0) } catch(e) {}; Services[_id + "previousUri"] = uri; run.value && !reason && sss.loadAndRegisterSheet( uri, 0 ); icon.src = run.value ? styleImage : self.image; }; addDestructor(setStyleForPages); run.value && setStyleForPages();
Отредактировано villa7 (11-11-2015 23:31:28)
Лучше спросить у знающих - чем лезть не зная.
Отсутствует
villa7
а можно разместить код css не в справке, а в самом коде?
не спорю, так намного удобнее, но справка у меня занята под другое...
и иконки кнопки мне менять не нужно, нужен просто код включения/отключения стиля, как можно проще...
такое себе триггер
Отредактировано Inko7 (14-11-2015 21:45:41)
Отсутствует
villa7
ок, спасибо
по подобию старых кнопок что-то у самого получилось такое:
this.onclick = function(e) { if ( e.button == 0 ) { sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET); } if ( e.button == 1 ) { sss.unregisterSheet( uri, sss.AGENT_SHEET ); } }; var css = "/*AGENT_SHEET*/\n" css = "#phrase-highlighter-toolbar-button .toolbarbutton-icon { background-color: pink !important; }\n"; css = css + "#phrase-highlighter-toolbar-button > .toolbarbutton-menubutton-dropmarker > .dropmarker-icon { background-color: pink !important; }\n"; var uri = makeURI("data:text/css," + encodeURIComponent(css)); var sss = Cc["@mozilla.org/content/style-sheet-service;1"]. getService(Ci.nsIStyleSheetService); addDestructor(function() { sss.unregisterSheet( uri, sss.AGENT_SHEET ) });
Отсутствует
jars
видимо чтото в самой кнопке, потому что только в Init не решает. проблема кажется именно в части для правового клика -должно открывать из буфера обмена в новой вкладке. сейчас, открываю браузер, правой кнопкой(сссылка уже в буфере), открывается пустая веладка с ссылкой в адресной строке но не загруженной(приходится или жать еще раз или вручную загружать таки адресную строку).
this.midclick = function (event) {
var str = getSelect();
getBrowser (). selectedTab = getBrowser (). addTab (str);
gURLBar.handleCommand();
}
this.leftclick = function (event) {
getBrowser (). selectedTab = getBrowser (). addTab ("about:superstart");
gURLBar.select();
gURLBar.handleCommand();
}
this.setAttribute("onclick", "custombuttons.gQuot.mHandler(event, this)");
this.setAttribute("onmouseover", "this.tooltipText = readFromClipboard() ? readFromClipboard() : this.label;");
/* Получить выделенный текст из страницы или текстового поля,
если текст не выделен функция отдаст 'false' ..........................................*/
function getSelect() {
// выделенный текст из страницы ....
var selection = document.commandDispatcher.focusedWindow.getSelection();
var anchor = (selection.anchorNode !== null)? selection.anchorNode: false;
// выделенный текст из 'PRE' ....
if ( anchor && anchor.parentNode.tagName == 'PRE' ) {
var node = selection.focusNode;
var startPos = selection.anchorOffset;
var endPos = selection.focusOffset;
var selection = node.data.substring(startPos, endPos);
}
// выделенный текст из текстового поля ....
if ( selection.toString().length == 0 ) {
var theBox = document.commandDispatcher.focusedElement;
if ( theBox && (theBox.type == "text" || theBox.type == "textarea") ) {
var startPos = theBox.selectionStart;
var endPos = theBox.selectionEnd;
var selection = theBox.value.substring(startPos, endPos);
}
}
// исправляем проблему с переносом текста новую строку в стандартном win блокноте ....
if ( selection.toString().length !== 0 ) {
var selection = selection.toString();
var selection = selection.replace(/\u000A/g, "\u000D\u000A");
var selection = selection.replace(/\u000D\u000D\u000A/g, "\u000D\u000A");
}
return ( selection == '')? false: selection;
};
Отсутствует
bunda1
моя кнопка по левому клику открывает новую вкладку(работает), по среднему - выделенный в браузере текст открывается в поиске в новой вкладке(работает), по правому - текст из буфера должен открыться в новой вкладке: ссылка просто откроется, текст выведется в поиске.(не работает с первого клика при включении, но после 2-3 нажатия работает как должна до выключения браузера).
Отсутствует
bunda1
так ведь с левым и средним кликом всё в порядке, только правый глючит.(и тот потом исправляется)
ну а если так:
или так:
Отредактировано bunda1 (17-11-2015 20:08:15)
Отсутствует
bunda1
вставил вместо блока кода для левого клика = оба варианта точно так же при первом клике только открывают вкладку и вставляют из буфера текст, но не загружают его. по второму клику всё срабатывает, как ранее с моим кодом.
Отсутствует
bunda1
А Вы сами повседневно используете Firefox 24 ESR или последние версии?
Я использую Firefox 24 ESR.
Добавлено 20-11-2015 20:24:03
ну кстати я использую Waterfox 40.0.1(в ней и проблемы).
Ну тогда дублируй gURLBar.handleCommand(); с таймером типа:
BrowserOpenTab(); gURLBar.value = readFromClipboard(); gURLBar.handleCommand(); setTimeout(function() { gURLBar.handleCommand() }, 50)
Отредактировано bunda1 (20-11-2015 20:24:03)
Отсутствует
Отсутствует
хочу кнопку которая показывает список расширений FF
в виде html или текста
чтоб был статус понятен вкыл выкл
внутренний удалено показушник даже не позволяет скопировать список.
-----------
и по-моему это свинство
написать описание Custom Buttons на страничке дополнение, на инородном языке
ещё раз скажу: это свинство и позорище,полный отстой авторам.
Замечание п. 3.3
Sergeys
Отредактировано selevo (21-11-2015 17:48:29)
Отсутствует
selevo
А чего не about:support ? Список показывает, скопировать можно. Вкл/Выкл отображается.
Если кнопку делать, то код
(откроет в новой вкладке)
Отредактировано Coroner (21-11-2015 19:22:28)
Отсутствует