Причем тут загрузка на хост? Я об этом не слова же. А репа у меня скрыта, так что не волнует)
Я, перед Вами извинился уже, могу повторить, прошу прощение, что пост воспринял в свой адрес, ну а про репу, я тому кто мне её понизил)))
да вроде недавно искали, и вроде что-то находили, не кнопку может, а дополнение, но точно не uploudprogress
давай, WW, дерзай
найдёшь, доложишь
Спасибо, попробую) всё что находил, на подобии как у оперы, то есть загрузка страницы, а мне нужна, именно файла.
Такой кнопки нет.
Жаль, а у меня на Вас, вся надежда была.
Firefox - самый лучший брауз!!!
Отсутствует
Подскажите пожалуйста, есть приложение Cookie Importer https://addons.mozilla.org/ru/firefox/a … r/?src=api, команда на импорт куки выглядит так:
Функция выбора файла далее выглядит так:
krkAddons.cookieImporter.doImport = function(){ // Load FielPicker var ifp = Components.interfaces.nsIFilePicker; var fp = Components.classes["@mozilla.org/filepicker;1"].createInstance(ifp); // Set FilePicker attributes fp.init(window, null, ifp.modeOpen); fp.appendFilters(ifp.filterAll | ifp.filterText); fp.filterIndex = 1; fp.defaultString = "cookies.txt";
Подскажите пожалуйста, как с помощью Custom Buttons сделать кнопку, которая импортировала бы файл c:\cookies.txt? Без запроса на поиск данного файла, а сразу...
Спасибо!
Отсутствует
К сожалению, не подойдет, cookiesafe не хочет работать с современными версиями FF, я долго пытался их подружить... Да и там произвольная кука, а мне нужна определённая...
Отредактировано Abricosio (28-01-2012 16:35:51)
Отсутствует
Подскажите пожалуйста, как с помощью Custom Buttons сделать кнопку, которая импортировала бы файл c:\cookies.txt? Без запроса на поиск данного файла, а сразу...
Например, так:
--- import.js +++ import-mod.js @@ -2,27 +2,17 @@ if(!krkAddons.cookieImporter) krkAddons.cookieImporter={}; krkAddons.cookieImporter.doImport = function(){ - - // Load FielPicker - var ifp = Components.interfaces.nsIFilePicker; - var fp = Components.classes["@mozilla.org/filepicker;1"].createInstance(ifp); - - // Set FilePicker attributes - fp.init(window, null, ifp.modeOpen); - fp.appendFilters(ifp.filterAll | ifp.filterText); - fp.filterIndex = 1; - fp.defaultString = "cookies.txt"; - try{ - // Let User choose a file - var rv = fp.show(); + var file = Components.classes["@mozilla.org/file/local;1"] + .createInstance(Components.interfaces.nsILocalFile); + file.initWithPath("c:\\cookies.txt"); - if (rv == ifp.returnOK) { + if (file.exists()) { // Open the selected file var istream = Components.classes["@mozilla.org/network/file-input-stream;1"].createInstance(Components.interfaces.nsIFileInputStream); - istream.init(fp.file, 0x01, 0444, 0); // readonly + istream.init(file, 0x01, 0444, 0); // readonly // Select nsILineInputStream interface for "readline()" usage istream.QueryInterface(Components.interfaces.nsILineInputStream);
Отредактировано Infocatcher (28-01-2012 17:08:06)
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Abricosio пишет: 2InfocatcherСпасибо большое за помощь!Только у меня почему-то не реагирует на нажатие кнопки...Infocatcher показал какие строки убрать а какие добавить в указанном файлеи тогда не будет вызываться тот диалог.то бишь этот код надо не в кнопку пихать.
А понял... А возможно все таки через custom buttons реализовать функционал, просто в идеале также хотел реализовать импорт файла с куками, название которого будет содержаться в файле c:/cookies.txt и выглядеть как
cookies=111 и т.д. (вот эту 111.txt в данном случае и подгружать)
Могу также как предыдущий пользователь с подобным вопросом поспособствовать финансовым пожертвованием на какое-либо дополнение или автору кода кнопки.
Если в двух словах описать необходимую кнопку:
Берем из файла c:/cookies.txt
строчку cookies=название
и импортируем файл с куками "название.txt" из папки c:/cookies
Отсутствует
если с клавиатуры, то не правильно.
Можно по таймеру проверять текущую раскладку.
Добавлено 29-01-2012 17:57:34
Abricosio
При посещении любого сайта, и нажатии на определенную кнопку, все внутренние ссылки на открытой странице сделать красными (изменить для них цвет)?
Если я правильно понял:
function makeURL (url) { var uri = makeURI (url); try { uri = uri. QueryInterface (Components. interfaces. nsIURL); } catch (e) { uri = null; } return uri; } var doc = gBrowser. contentDocument; var cdurl = makeURL (doc. location. href); cdurl. ref = ""; var links = doc. links; var curl; for (var i = 0; i < links. length; i++) { curl = makeURL (links [i]. href); if (curl && (curl. host == cdurl. host)) links [i]. style. backgroundColor = "red"; }
Отредактировано Anton (29-01-2012 17:57:34)
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
то бишь этот код надо не в кнопку пихать.
Да можно и в кнопку, только тогда нужно еще вызов функции добавить.
importCookies("c:\\cookies.txt"); function importCookies(path){ try{ var file = Components.classes["@mozilla.org/file/local;1"] .createInstance(Components.interfaces.nsILocalFile); file.initWithPath(path); if (file.exists()) { // Open the selected file var istream = Components.classes["@mozilla.org/network/file-input-stream;1"].createInstance(Components.interfaces.nsIFileInputStream); istream.init(file, 0x01, 0444, 0); // readonly // Select nsILineInputStream interface for "readline()" usage istream.QueryInterface(Components.interfaces.nsILineInputStream); // Open CookieManager connection var cm = Components.classes["@mozilla.org/cookiemanager;1"].getService(Components.interfaces.nsICookieManager2); if(!cm){ alert("Could not load nsICookieManager2"); return; } var line = {}, cookieNum, fields, hasmore; var cHost, cPath, cName, cValue, cSecure, cSession, cExpiry; cookieNum = 0; do{ /* One line from cookies.txt looks like ... * .google.com TRUE / FALSE 0 someID 4815162342 * <host> <domain> <path> <ssl> <expiry> <name> <value> * 0 1 2 3 4 5 6 */ hasmore = istream.readLine(line); var fields = line.value.split("\t", 7); if(fields.length != 7) continue; // Read needed fields cHost = fields[0]; cPath = fields[2]; cName = fields[5]; cValue = fields[6]; cSecure = (fields[3] == "TRUE"); cExpiry = parseInt(fields[4]); // Expiry == 0 means this is a session cookie cSession = (cExpiry == 0); // This is so weird! cm.add() won't take cSession=TRUE and cExpiry=0 // because cExpiry < Today! So we work around this by making the cookie // expire Sonntag, Feb. 7 2106 07:28:15. See you then ;-) if(!cExpiry) cExpiry = 0xffffffff; // Add that cookie using the CookieManager cm.add(cHost, cPath, cName, cValue, cSecure, false, cSession, cExpiry); cookieNum++; }while(hasmore); // Close cookies.txt istream.close(); alert("Imported " + cookieNum + " Cookies!"); } }catch(err){ alert(err.toString()); } };
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
okkamas_knife пишет: то бишь этот код надо не в кнопку пихать.Да можно и в кнопку, только тогда нужно еще вызов функции добавить.В секцию «код»
Только я не проверял. Если расширение работает, то и код должен.
Спасибо огромное работает как нужно, хотел только уточнить, свой вопрос
Если название файла содержится в файле c:\file.txt
как строчка cookies=название куки (без .txt)
Можно ли добавить такую вещь, как чтение данного названия из данного файла и импорт кук из указанного файла (c:\cookies\название куки.txt)?
Отсутствует
AbricosioПри посещении любого сайта, и нажатии на определенную кнопку, все внутренние ссылки на открытой странице сделать красными (изменить для них цвет)?Если я правильно понял:
Спасибо большое!
Два вопроса по данному коду:
Находимся на сайте1, на нем ссылка на сайт2 (который необходимо задать в кнопке заранее), как сделать красными ссылки от этого сайта2?
Как сделать постоянно включенную данную функцию? Вставка кода в инициализацию не помогает... Спасибо!
Отсутствует
bunda1
Обнаружил баг в кнопке Toggle Find+3. При наборе текста с клавиатуру курсор исчезает с Find bar после ввода каждой буквы, приходится его постоянно возвращать, иначе происходит просто замещение букв.
Отсутствует
здраствуйте хочу выложить кнопку "add-ons-manager"
кнопка в выподающем меню выводит списки аддонов,тем,персон,и стилей
при клике по menuitem в аддонах -опции аддона,в персонах -выбрать данную персону(если тема не стандартная все равно выбирается (не надо менять не чего в about:config и перезагружатся))
в стилях-редактировать выбраный стиль
инициалицация
Application.prefs.get("lightweightThemes.isThemeSelected").events.addListener("change", function() {var s=Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);s.setBoolPref('lightweightThemes.isThemeSelected', true)}); var val = this. getAttribute ("id"); var s=Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); Components.utils.import("resource://gre/modules/LightweightThemeManager.jsm"); this. x= function () { var groupbox= <tabbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> <tabs> <tab label="add-ons" image="11"/> <tab label="themes" image="11"/> <tab label="styles" image="11"/> <tab label="personas" image="11"/> </tabs> <tabpanels> <tabpanel class="add_on"> <vbox class="add_on" hidden="false"> <hbox hidden="false"> <label value="Enable" onclick="var style_="color:#000000;font-family:monospace;font-weight:lighter;border-bottom-width:1px;border-bottom-style:solid;border-bottom-color:#000000;"
var style_sel ='color:#FF6600;font-family:monospace;font-weight:lighter;border-bottom-width:1px;border-bottom-style:solid;border-bottom-color:#6633FF'
var Node=this.parentNode.childNodes;
for (var i = 0; i <3; i++)
		{
			
Node[i]. setAttribute ("style", style_)
		};
this.setAttribute ("style",style_sel)
var Node=this.parentNode.nextSibling .childNodes;
for (var i = 0; i <3; i++)
		{
		
if(Node[i].className ==this.className){
				Node[i].hidden=false}
			else{
				Node[i].hidden=true}
		};
		
" class="Enable_"/> <label value="Disable" onclick="var style_="color:#000000;font-family:monospace;font-weight:lighter;border-bottom-width:1px;border-bottom-style:solid;border-bottom-color:#000000;"
var style_sel ='color:#FF6600;font-family:monospace;font-weight:lighter;border-bottom-width:1px;border-bottom-style:solid;border-bottom-color:#6633FF'
var Node=this.parentNode.childNodes;
for (var i = 0; i <3; i++)
		{
			
Node[i]. setAttribute ("style", style_)
		};
this.setAttribute ("style",style_sel)
var Node=this.parentNode.nextSibling .childNodes;
for (var i = 0; i <3; i++)
		{
		
if(Node[i].className ==this.className){
				Node[i].hidden=false}
			else{
				Node[i].hidden=true}
		};
		
" class="Disable_"/> <label value="False" onclick="var style_="color:#000000;font-family:monospace;font-weight:lighter;border-bottom-width:1px;border-bottom-style:solid;border-bottom-color:#000000;"
var style_sel ='color:#FF6600;font-family:monospace;font-weight:lighter;border-bottom-width:1px;border-bottom-style:solid;border-bottom-color:#6633FF'
var Node=this.parentNode.childNodes;
for (var i = 0; i <3; i++)
		{
			
Node[i]. setAttribute ("style", style_)
		};
this.setAttribute ("style",style_sel)
var Node=this.parentNode.nextSibling .childNodes;
for (var i = 0; i <3; i++)
		{
		
if(Node[i].className ==this.className){
				Node[i].hidden=false}
			else{
				Node[i].hidden=true}
		};
		
" class="False_"/> </hbox> <box> <vbox class="Enable_" hidden="false"/> <vbox class="Disable_" hidden="true"/> <vbox hidden="true" class="False_"/> </box> </vbox> </tabpanel> <tabpanel class="theme_"/> <tabpanel class="styles_"> <vbox> <vbox class="st_e"/> <menuseparator/> <vbox class="st_d"/> </vbox> </tabpanel> <tabpanel class="pesonas_"/> </tabpanels> </tabbox> groupbox = cbu. makeXML(groupbox); return groupbox } this. xulFav = function () { var groupbox= <vbox onmouseout="this.firstChild.nextSibling.hidden=true" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> <vbox onmouseover="this.nextSibling.hidden=false"> <menuitem label="hjgjghjghj" class="menuitem-iconic bookmark-item"/> </vbox> <hbox hidden="true" onblur="this.hidden=true" onmouseup="this.hidden=true" onmouseover="this.hidden=false"> <button label="Preview" orient="horizontal" onmouseover="this.parentNode.hidden=false" image="11"/> <button label="del" onmouseover="this.parentNode.hidden=false" image="11"/> <button label="-" onmouseover="this.parentNode.hidden=false" image="11"/> </hbox> </vbox> groupbox = cbu. makeXML(groupbox); return groupbox } this. xulFavSel = function () { var groupbox= <vbox onmouseout="this.firstChild.nextSibling.hidden=true" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> <vbox onmouseover="this.nextSibling.hidden=false"> <menuitem label="hjgjghjghj" class="menuitem-iconic bookmark-item"/> </vbox> <hbox hidden="true" onblur="this.hidden=true" onmouseup="this.hidden=true" onmouseover="this.hidden=false"> <button label="del" onmouseover="this.parentNode.hidden=false" image="11"/> </hbox> <menuseparator/> </vbox> groupbox = cbu. makeXML(groupbox); return groupbox } this. xul_ = function () { var groupbox= <vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" onmouseout="this.firstChild.nextSibling.hidden=true" class="parent_"> <vbox onmouseover="this.nextSibling.hidden=false"> <menuitem label="hjgjghjghj" class="menuitem-iconic bookmark-item"/> </vbox> <hbox hidden="true" onblur="this.hidden=true" onmouseup="this.hidden=true" onmouseover="this.hidden=false"> <button label="Preview" orient="horizontal" onmouseover="this.parentNode.hidden=false" image="11"/> <button label="del" onmouseover="this.parentNode.hidden=false" image="11"/> <button label="+" onmouseover="this.parentNode.hidden=false" image="11"/> </hbox> </vbox> groupbox = cbu. makeXML (groupbox); return groupbox } var s=Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); var menupopup= document.createElementNS ("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul", "menupopup"); if(s.getChildList('').indexOf('LightweightThemeManager.Favorites_')==-1) { s.setCharPref('LightweightThemeManager.Favorites_','') } var fav=s.getCharPref('LightweightThemeManager.Favorites_'); var arr = LightweightThemeManager.usedThemes; if(!(LightweightThemeManager.currentTheme)) { var currentTheme=0 } else { var currentTheme=LightweightThemeManager.currentTheme.id } var groupbox= document.createElementNS ("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul", "groupbox"); groupbox. setAttribute ("id",'groupbox_p'); var box_= document.createElementNS ("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul", "vbox"); box_. setAttribute ("id",'box_p'); for (var i = 0; i < arr.length; i++) { if(!(fav=='')) { var fl=0 var data=fav.split(',') for (var j = 0; j < data.length; j++) { if(data[j]==arr[i].id) { if(currentTheme==arr[i].id) { var xul=this. xulFavSel() var menuItem =xul. getElementsByTagName ("menuitem") [0]; menuItem. setAttribute ("src",arr[i]. iconURL); menuItem. setAttribute ("label",arr[i]. name); menuItem. setAttribute ("id",arr[i]. id); var b_= xul. getElementsByTagName ("button") [0]; b_.setAttribute('oncommand','var tqa = document.getElementById('+'"'+val+'"'+');tqa.unst(event)'); groupbox.appendChild (xul); fl=1 } else { var xul=this. xulFav() var menuItem =xul. getElementsByTagName ("menuitem") [0]; menuItem. setAttribute ("src",arr[i]. iconURL); menuItem. setAttribute ("label",arr[i]. name); menuItem. setAttribute ("id",arr[i]. id); menuItem.setAttribute('oncommand','var tqa = document.getElementById('+'"'+val+'"'+');tqa._Changed(event)'); var b_= xul. getElementsByTagName ("button") [0]; b_.setAttribute('oncommand','var tqa = document.getElementById('+'"'+val+'"'+');tqa.Preview(event)'); var b_= xul. getElementsByTagName ("button") [1]; b_.setAttribute('oncommand','var tqa = document.getElementById('+'"'+val+'"'+');tqa.unst(event)'); var b_= xul. getElementsByTagName ("button") [2]; b_.setAttribute('oncommand','var tqa = document.getElementById('+'"'+val+'"'+');tqa.favDel(event)'); groupbox.appendChild (xul); fl=1 } } } if(fl==0) { switch (arr[i].id) { case currentTheme: var xul=this. xulFavSel() var menuItem =xul. getElementsByTagName ("menuitem") [0]; menuItem. setAttribute ("src",arr[i]. iconURL); menuItem. setAttribute ("label",arr[i]. name); menuItem. setAttribute ("id",arr[i]. id); var b_= xul. getElementsByTagName ("button") [0]; b_.setAttribute('oncommand','var tqa = document.getElementById('+'"'+val+'"'+');tqa.unst(event)'); groupbox.appendChild (xul); break; default: var xul=this. xul_() var menuItem =xul. getElementsByTagName ("menuitem") [0]; menuItem. setAttribute ("src",arr[i]. iconURL); menuItem. setAttribute ("label",arr[i]. name); menuItem. setAttribute ("id",arr[i]. id); menuItem.setAttribute('oncommand','var tqa = document.getElementById('+'"'+val+'"'+');tqa._Changed(event)'); var b_= xul. getElementsByTagName ("button") [2]; b_.setAttribute('oncommand','var tqa = document.getElementById('+'"'+val+'"'+');tqa.favADD(event)'); var b_= xul. getElementsByTagName ("button") [1]; b_.setAttribute('oncommand','var tqa = document.getElementById('+'"'+val+'"'+');tqa.unst(event)') var b_= xul. getElementsByTagName ("button") [0]; b_.setAttribute('oncommand','var tqa = document.getElementById('+'"'+val+'"'+');tqa.Preview(event)'); box_.appendChild (xul); break; } } } else { switch (arr[i].id) { case currentTheme: var xul=this. xulFavSel() var menuItem =xul. getElementsByTagName ("menuitem") [0]; menuItem. setAttribute ("src",arr[i]. iconURL); menuItem. setAttribute ("label",arr[i]. name); menuItem. setAttribute ("id",arr[i]. id); var b_= xul. getElementsByTagName ("button") [0]; b_.setAttribute('oncommand','var tqa = document.getElementById('+'"'+val+'"'+');tqa.unst(event)'); groupbox.appendChild (xul); break; default: var xul=this. xul_() var menuItem =xul. getElementsByTagName ("menuitem") [0]; menuItem. setAttribute ("src",arr[i]. iconURL); menuItem. setAttribute ("label",arr[i]. name); menuItem. setAttribute ("id",arr[i]. id); var b_= xul. getElementsByTagName ("button") [2]; b_.setAttribute('oncommand','var tqa = document.getElementById('+'"'+val+'"'+');tqa.favADD(event)'); var b_= xul. getElementsByTagName ("button") [1]; b_.setAttribute('oncommand','var tqa = document.getElementById('+'"'+val+'"'+');tqa.unst(event)'); var b_= xul. getElementsByTagName ("button") [0]; b_.setAttribute('oncommand','var tqa = document.getElementById('+'"'+val+'"'+');tqa.Preview(event)'); box_.appendChild (xul); break; } } } var box_0= this. x() var boxx= box_0.getElementsByClassName ("pesonas_")[0] if(groupbox.childNodes.length==0) { boxx.appendChild (box_); } else { boxx.appendChild (groupbox); groupbox.appendChild(document.createElement("menuseparator")); groupbox.appendChild (box_); } this. favDel= function (event) { var id= event. originalTarget.parentNode.previousSibling.firstChild.id; var fav=s.getCharPref('LightweightThemeManager.Favorites_'); var f=fav.indexOf(id) var n=fav.slice(0,f) var k=fav.slice(id.length+f) var n=n.slice(0,-1) if(n==0) { var k=k.slice(1) } var res=n+k s.setCharPref('LightweightThemeManager.Favorites_',res) var groupbox_p = document.getElementById("groupbox_p"); var box_p = document.getElementById("box_p"); el=event. originalTarget.parentNode.parentNode.parentNode var Theme=LightweightThemeManager.getUsedTheme(id) var xul=this. xul_() var menuItem =xul. getElementsByTagName ("menuitem") [0]; menuItem. setAttribute ("src",Theme. iconURL); menuItem. setAttribute ("label",Theme. name); menuItem. setAttribute ("id",Theme. id); var b_= xul. getElementsByTagName ("button") [2]; b_.setAttribute('oncommand','var tqa = document.getElementById('+'"'+val+'"'+');tqa.favADD(event)'); el. parentNode. removeChild (el); box_p.appendChild (xul); } this. favADD= function (event) { var id= event. originalTarget.parentNode.previousSibling.firstChild.id; var fav=s.getCharPref('LightweightThemeManager.Favorites_'); var res=fav+','+id s.setCharPref('LightweightThemeManager.Favorites_',res) var groupbox_p = document.getElementById("groupbox_p"); var box_p = document.getElementById("box_p"); el=event. originalTarget.parentNode.parentNode var Theme=LightweightThemeManager.getUsedTheme(id) var xul=this. xulFav() var menuItem =xul. getElementsByTagName ("menuitem") [0]; menuItem. setAttribute ("src",Theme. iconURL); menuItem. setAttribute ("label",Theme. name); menuItem. setAttribute ("id",Theme. id); var b_= xul. getElementsByTagName ("button") [2]; b_.setAttribute('oncommand','var tqa = document.getElementById('+'"'+val+'"'+');tqa.favDel(event)'); el. parentNode. removeChild (el); groupbox_p.appendChild (xul); } this. unst= function (event) { var id= event. originalTarget.parentNode.previousSibling.firstChild.id; var groupbox_p = document.getElementById("groupbox_p"); var box_p = document.getElementById("box_p"); el=event. originalTarget.parentNode.parentNode if(!(el. hasAttribute ("class"))) el=event. originalTarget.parentNode.parentNode.parentNode var Theme=LightweightThemeManager.getUsedTheme(id) Components.utils.import("resource://gre/modules/AddonManager.jsm"); AddonManager.getAddonsByTypes(["theme"], function(addons) { for(var i = 0, l = addons.length; i < l; i++) { if(addons[i].id == id+'@personas.mozilla.org') { el. parentNode. removeChild (el); addons[i].uninstall(); } } }); } this. Preview= function (event) { var id= event. originalTarget.parentNode.previousSibling.firstChild.id; var Theme=LightweightThemeManager.getUsedTheme(id) LightweightThemeManager.previewTheme(Theme) } this. _Changed= function (event) { var int_=Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); var id= event. originalTarget.id; var Theme=LightweightThemeManager.getUsedTheme(id) LightweightThemeManager.themeChanged(Theme) Components.utils.import("resource://gre/modules/AddonManager.jsm"); AddonManager.getAddonsByTypes(["theme"], function(addons) { for(var i = 0, l = addons.length; i < l; i++) { if(addons[i].isActive == true) { if(!(addons[i].id.slice(addons[i].id.length-21)=='@personas.mozilla.org')) { var res=addons[i] var res0=addons[i].id var THIS=this AddonManager.addAddonListener({ onDisabled: function(res) { AddonManager.getAddonByID(res0,function(a) { a.userDisabled=false Services.obs.notifyObservers(null, "lightweight-theme-styling-update",JSON.stringify(Theme)); AddonManager.removeAddonListener({ onDisabled: function(a){}}) }) }}) res.userDisabled=false } } } }); } /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// var iconURL='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACV0lEQVR4Xi3OT2ibZQDH8c/7msT1pZqOtlQ32ulaGJVuB0UvMiyRCbZCT14MHUIzcaCCFcZAGOiKIB3UkyCeBBU86EGYiPZanTIZwnTWScdqbdM/U/vHN1mS5jGHHD637w9+TOM1vKrTtPe8419z7njflrmWt2yb9ocpE0p4CaW2KTjVdtKgkqsnloZCMYyHQjgeHguD4YndoeBDwagZpzCKsfbmNIzjZZxF0aiS+Qd/TUJvRRjYzQcf2DPhotP6TOBJTOE5FIlVPG/NZEvRpq6Wpcp/dR1RXlcmz5pUasWOUalJDQ+3AOC83aGb/SF7TfCdMHCzJ5zYHwjKghXhwC1NXwvmBbOCgheVMI4iGSOas0MXXfWTdWU/WnBjc5kKUqpZkUGibkIFC1IdetSdwZXInB3HJS7bUNR3aCQbr67VaeAuKthGNxbxhVcccNiw8275LbZgw+dm/OUFn/h5falODjVUUUeEHfQKjrhg0OueEunUH3nGfY7akwjWvWnSjEdxG3U0UEOKCAnu4l58605Gzq4EOWRsqLWDFI22/bY6AlJ0ATHOCR6XlcgogCruRx6dgDo6BGvYQQY1cazfu3p9atUlxxT0YxnXcQ2/o4I8yvjSx+ZdsYI9ucjbNj2rx3UMY9O+ryy67bKGX3R42hEnjXnIIr4xJvE3LuH7WCqSw1HUsOAfq96QdU63j+SdUTbrBhLUHJTzg7Ki4ELsHhlNVJHBiIMOOatTnwSRYYeVHEMT2n3WMqoZizZ8pmm/BWKxLQXbHlCxjkfUDGs98yeqUluoAf8DkrzrAnZsWyMAAAAASUVORK5CYII=' Components.utils.import("resource://gre/modules/AddonManager.jsm"); var box_enable= document.createElementNS ("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul", "groupbox"); var box_disable= document.createElementNS ("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul", "groupbox"); var box_false= document.createElementNS ("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul", "groupbox"); var THIS=this AddonManager. getAddonsByTypes ( ["extension"], function (extensions) { var arr_enable = new Array(); var arr_disable = new Array(); var arr_false = new Array(); var e=extensions for (var i = 0; i < extensions. length; i++) { if(e[i].userDisabled==true) { arr_disable.push(e[i]) } else { arr_enable.push(e[i]) } if(e[i].appDisabled==true) { arr_false.push(e[i]) } } if(!(arr_disable.length==0)) { arr_disable. sort ( function (a, b, c, d) { return a.name > b.name; } ); } if(!(arr_enable.length==0)) { arr_enable. sort ( function (a, b, c, d) { return a.name > b.name; } ); } if(!(box_false.length==0)) { arr_enable. sort ( function (a, b, c, d) { return a.name > b.name; } ); } var sub_box= box_0.getElementsByClassName ("add_on")[0] var Node=sub_box.firstChild.firstChild .firstChild ; var boxx= box_0.getElementsByClassName ("Enable_")[1] var boxx2= box_0.getElementsByClassName ("Disable_")[1] var boxx3= box_0.getElementsByClassName ("False_")[1] Node.setAttribute("value",Node.getAttribute("value")+'/'+arr_enable. length) Node.setAttribute("style",'color:#FF6600;font-family:monospace;font-weight:lighter;border-bottom-width:1px;border-bottom-style:solid;border-bottom-color:#6633FF;') Node.nextSibling .setAttribute("value",Node.nextSibling .getAttribute("value")+'/'+arr_disable. length) Node.nextSibling .setAttribute("style",'font-family:monospace;border-bottom-color:#000000;border-bottom-style:solid;border-bottom-width:1px;') Node.nextSibling .nextSibling.setAttribute("value",Node.nextSibling .nextSibling.getAttribute("value")+'/'+arr_false. length) Node.nextSibling .nextSibling.setAttribute("style",'font-family:monospace;border-bottom-color:#000000;border-bottom-style:solid;border-bottom-width:1px;') for (var i = 0; i < arr_enable. length; i++) { var xul=THIS. xul_() var b_=xul.lastChild var menuItem =xul. getElementsByTagName ("menuitem") [0]; menuItem. setAttribute ("src",arr_enable[i]. iconURL); menuItem. setAttribute ("label",arr_enable[i]. name); menuItem. setAttribute ("id_",arr_enable[i]. id); b_.lastChild.setAttribute("label","open") b_.firstChild .setAttribute("label","on/of") b_.firstChild.setAttribute('oncommand','var tqa = document.getElementById('+'"'+val+'"'+');var class_="Disabled_";tqa.but_(event,class_)'); b_.firstChild.nextSibling.setAttribute('oncommand','var tqa = document.getElementById('+'"'+val+'"'+');var class_="_";tqa.but_(event,class_)'); b_.lastChild.setAttribute('oncommand','var tqa = document.getElementById('+'"'+val+'"'+');tqa.open_(event)'); if (arr_enable[i]. iconURL) { menuItem. setAttribute ("src",arr_enable[i]. iconURL); } else { menuItem. setAttribute ("src",iconURL); } if (arr_enable[i]. optionsURL) menuItem.setAttribute('oncommand', "window. openDialog ('" + arr_enable[i]. optionsURL + "', '', 'chrome,dialog=0,resizable,titlebar,toolbar,centerscreen');"); boxx. appendChild (xul) } for (var i = 0; i < arr_disable. length; i++) { var xul=THIS. xul_() var b_=xul.lastChild var menuItem =xul. getElementsByTagName ("menuitem") [0]; menuItem. setAttribute ("label",arr_disable[i]. name); menuItem. setAttribute ("id_",arr_disable[i]. id); b_.lastChild.setAttribute("label","open") b_.firstChild .setAttribute("label","on/of") b_.firstChild.setAttribute('oncommand','var tqa = document.getElementById('+'"'+val+'"'+');var class_="Disabled_";tqa.but_(event,class_)'); b_.firstChild.nextSibling.setAttribute('oncommand','var tqa = document.getElementById('+'"'+val+'"'+');var class_="_";tqa.but_(event,class_)'); b_.lastChild.setAttribute('oncommand','var tqa = document.getElementById('+'"'+val+'"'+');tqa.open_(event)'); if (arr_disable[i]. iconURL) { menuItem. setAttribute ("src",arr_disable[i]. iconURL); } else { menuItem. setAttribute ("src",iconURL); } if (arr_disable[i]. optionsURL) menuItem.setAttribute('oncommand', "window. openDialog ('" + arr_disable[i]. optionsURL + "', '', 'chrome,dialog=0,resizable,titlebar,toolbar,centerscreen');"); boxx2. appendChild (xul) } for (var i = 0; i < arr_false. length; i++) { var xul=THIS. xul_() var b_=xul.lastChild var menuItem =xul. getElementsByTagName ("menuitem") [0]; menuItem. setAttribute ("label",arr_false[0]. name); menuItem. setAttribute ("id_",arr_false[0]. id); b_.lastChild.setAttribute("label","open") b_.firstChild .setAttribute("label","on/of") b_.firstChild.setAttribute('oncommand','var tqa = document.getElementById('+'"'+val+'"'+');var class_="Disabled_";tqa.but_(event,class_)'); b_.firstChild.nextSibling.setAttribute('oncommand','var tqa = document.getElementById('+'"'+val+'"'+');var class_="_";tqa.but_(event,class_)'); b_.lastChild.setAttribute('oncommand','var tqa = document.getElementById('+'"'+val+'"'+');tqa.open_(event)'); if (arr_false[i]. iconURL) { menuItem. setAttribute ("src",arr_false[i]. iconURL); } else { menuItem. setAttribute ("src",iconURL); } boxx3. appendChild (xul) } } ) this. but_=function (event,class_) { var id= event. originalTarget.parentNode.previousSibling.firstChild. getAttribute ("id_") Components.utils.import("resource://gre/modules/AddonManager.jsm"); AddonManager.getAllAddons ( function(addons) { for (var i = 0; i < addons. length; i++) { if(addons[i].id==id) { if(class_=='Disabled_') { addons[i].userDisabled = !addons[i].userDisabled; } if(class_=='_') { addons[i].uninstall(); } if(class_=='st_') { window. openDialog ('chrome://stylish/content/edit.xul', addons[i].name, 'chrome,dialog=0,resizable,titlebar,toolbar,centerscreen;',addons[i]) } } } } ); } this.open_=function(event){ var id= event. originalTarget.parentNode.previousSibling.firstChild. getAttribute ("id_") var file = Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties). get("ProfD", Components.interfaces.nsIFile); file.append("extensions"); file.append(id); var tr=file.exists() if(tr==true) { let nsLocalFile = Components.Constructor("@mozilla.org/file/local;1", "nsILocalFile", "initWithPath"); new nsLocalFile(file.path).reveal(); } else { var id=id+'.xpi' var file = Components.classes["@mozilla.org/file/directory_service;1"]. getService(Components.interfaces.nsIProperties). get("ProfD", Components.interfaces.nsIFile); file.append("extensions"); file.append(id); var local = Components.classes["@mozilla.org/file/local;1"]. createInstance(Components.interfaces.nsILocalFile); var process = Components.classes["@mozilla.org/process/util;1"]. createInstance(Components.interfaces.nsIProcess); var args = [file.path] local.initWithPath("e:\\pro\\WinRAR\\WinRAR.exe"); process.init(local); process.run(false, args, args.length); }} var boxx= box_0.getElementsByClassName ("theme_")[0] AddonManager. getAddonsByTypes ( ["theme"], function (addons) { var box= document.createElementNS ("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul", "vbox"); var box__= document.createElementNS ("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul", "groupbox"); for (var i = 0; i < addons. length; i++) { if(!(addons[i].id.slice(addons[i].id.length-21)=='@personas.mozilla.org')) { if(addons[i].isActive) { var xul=THIS. xulFavSel() var b_=xul.lastChild.previousSibling var menuItem =xul. getElementsByTagName ("menuitem") [0]; menuItem. setAttribute ("label",addons[i]. name); menuItem. setAttribute ("id_",addons[i]. id); b_.firstChild.setAttribute('oncommand','var tqa = document.getElementById('+'"'+val+'"'+');var class_="_";tqa.but_(event,class_)'); if (addons[i]. iconURL) { menuItem. setAttribute ("src",addons[i]. iconURL); } else { menuItem. setAttribute ("src",iconURL); } box. appendChild (xul) } else { var xul=THIS. xul_() var b_=xul.lastChild var menuItem =xul. getElementsByTagName ("menuitem") [0]; menuItem. setAttribute ("label",addons[i]. name); menuItem. setAttribute ("id_",addons[i]. id); b_.lastChild.setAttribute("label","open") b_.firstChild .setAttribute("label","on/of") b_.firstChild.setAttribute('oncommand','var tqa = document.getElementById('+'"'+val+'"'+');var class_="Disabled_";tqa.but_(event,class_)'); b_.firstChild.nextSibling.setAttribute('oncommand','var tqa = document.getElementById('+'"'+val+'"'+');var class_="_";tqa.but_(event,class_)'); b_.lastChild.setAttribute('oncommand','var tqa = document.getElementById('+'"'+val+'"'+');tqa.open_(event)'); if (addons[i]. iconURL) { menuItem. setAttribute ("src",addons[i]. iconURL); } else { menuItem. setAttribute ("src",iconURL); } if (addons[i] .userDisabled) { box__. appendChild (xul) } else { box. appendChild (xul) } } } } boxx. appendChild (box) box. appendChild (box__) } ) var st_e= box_0.getElementsByClassName ("st_e")[0] var st_d= box_0.getElementsByClassName ("st_d")[0] AddonManager. getAddonsByTypes ( ["userstyle"], function (addons) { for (var i = 0; i < addons. length; i++) { var xul=THIS. xul_() var b_=xul.lastChild var menuItem =xul. getElementsByTagName ("menuitem") [0]; menuItem. setAttribute ("src",addons[i]. iconURL); menuItem. setAttribute ("label",addons[i]. name); menuItem. setAttribute ("id_",addons[i]. id); b_.lastChild.setAttribute("label","edit") b_.firstChild .setAttribute("label","on/of") b_.firstChild.setAttribute('oncommand','var tqa = document.getElementById('+'"'+val+'"'+');var class_="Disabled_";tqa.but_(event,class_);tqa.st_(event);'); b_.firstChild.nextSibling.setAttribute('oncommand','var tqa = document.getElementById('+'"'+val+'"'+');var class_="_";tqa.but_(event,class_);tqa.st_(event);'); b_.lastChild.setAttribute('oncommand','var tqa = document.getElementById('+'"'+val+'"'+');var class_="st_";tqa.but_(event,class_)'); var menuItem =xul. getElementsByTagName ("menuitem") [0]; if (addons[i]. iconURL) { menuItem. setAttribute ("src",addons[i]. iconURL); } else { menuItem. setAttribute ("src",iconURL); } if (addons[i] .userDisabled) { menuItem.setAttribute("disabled","true") st_d. appendChild (xul) } else { menuItem.setAttribute("disabled","false") st_e. appendChild (xul) } } } ) this. st_=function (event) { var m= event. originalTarget.parentNode.previousSibling.firstChild var obj= event. originalTarget.parentNode.parentNode var b= event. originalTarget.parentNode.parentNode.parentNode if(m.getAttribute("disabled")=='true') { b.previousSibling .previousSibling . appendChild (obj) m.setAttribute("disabled","false") } else { m.setAttribute("disabled","true") b.nextSibling .nextSibling. appendChild (obj) } } this. type = "menu-button"; this.orient = "horizontal"; this. appendChild (menupopup); menupopup.appendChild (box_0);
Отредактировано Ste_pan (30-01-2012 14:59:29)
Отсутствует
Ste_pan пишетписал под фокса не знаю
Так и у меня Firefox, только 11 и 12 и на обоих не работает.
поставил себе тоже 11-12 все работает
.......немного код поправил щас попробуй
Отсутствует
Всем здравствуйте! Ste_pan, а можно в эту кнопку добавить функцию поиска обновлений дополнений? Мне кажется, если бы это было бы реализовано, то данная кнопка могла бы быть очень востребована.
Отсутствует
.......немного код поправил щас попробуй
У меня тоже не работает на FF9.
Ошибка: Application.prefs.get("lightweightThemes.isThemeSelected") is null Источник: chrome://custombuttons/content/button.js?windowId=Firefox&id=custombuttons-button18@init Строка: 1
Если будешь добавлять в кнопку функцию поиска обновлений дополнений как просит Lenya1995, то может пригодится этот код:
var obj = { notification: "addons-background-update-complete", prefName: "extensions.update.enabled", extsUpdateEnabled: true, get os () { return Cc ["@mozilla.org/observer-service;1"]. getService (Ci. nsIObserverService); }, run: function () { Cu. import ("resource://gre/modules/AddonManager.jsm", this); this. extsUpdateEnabled = cbu. getPrefs (this. prefName); cbu. setPrefs (this. prefName, true); this. os. addObserver (this, this. notification, false); this. AddonManagerPrivate. backgroundUpdateCheck (); }, observe: function (s, t, d) { if (t == this. notification) { this. os. removeObserver (this, this. notification); cbu. setPrefs (this. prefName, this. extsUpdateEnabled); gBrowser. selectedTab = gBrowser. addTab ("about:addons"); LOG ("done"); } } }; obj. run ();
запускает поиск обновлений, после завершения обновления открывает вкладку about:addons и переключается на неё.
Отредактировано bunda1 (30-01-2012 19:56:34)
Отсутствует
Находимся на сайте1, на нем ссылка на сайт2 (который необходимо задать в кнопке заранее), как сделать красными ссылки от этого сайта2?
Как сделать постоянно включенную данную функцию?
Возможно я ошибаюсь, но мне кажется, это можно сделать вообще без расширений, через userContent.css.
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
Anton
@-moz-document url-prefix(http://forum.mozilla-russia.org){ A[href="http://custombuttons.mozdev.org/"] { color: red !important; } }
глянь с этим стилем на ссылку под своим аватаром.
mzfx
Отсутствует
Обнаружил баг в кнопке Toggle Find+3. При наборе текста с клавиатуру курсор исчезает с Find bar после ввода каждой буквы, приходится его постоянно возвращать, иначе происходит просто замещение букв.
Спасибо за баг
Toggle Find+3
//настройка функций кликов мыши(Mouse Click settings)................................................... this.onclick = function(event) { if(event.button == 0) { // Действие при клике ЛКМ gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); if (!gFindBar.hidden) { if ((gFindBar._findField.value)==''){Find(event)} else { Highlight(event); gFindBar.onFindAgainCommand(event.detail = 0); } } } else if(event.button == 1) { // Действие при клике СКМ gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); goDoCommand("cmd_selectNone"); goDoCommand("cmd_paste"); } }; //настройки языка(language settings)................................................... var cb=custombuttons,self=this,lang=cb.getPref("general.useragent.locale"); lang = lang.replace("-", "_"); function l(str) { self.properties = { en_US:{ Label: "Search with in a webpage", Left: 'L: Toggle Find Bar', Middle: 'M: Search for a page from the clipboard', Right: 'R: Menu + CB menu', Sec: ' seconds', AutoClose: 'Auto close', CloseTimer: ' Close Timer ', FindBarMini: 'FindBar mini', FindInMenu: 'Find in the context menu', PrefValue: 'AutoHighlight, add text', ClearPref: 'AutoHighlight, clear', AutoHighlight: 'AutoHighlight', }, ru:{ Label: "Поиск по странице", Left: 'Л: Показать - скрыть поиск по странице', Middle: 'С: Поиск по странице из буфера обмена', Right: 'П: Mеню + CB меню', Sec: ' секунд', AutoClose: 'Автоматически закрыть', CloseTimer: ' Закрыть через ', FindBarMini: 'FindBar мини', FindInMenu: 'Find в контекстном меню', PrefValue: 'Добавить текст', ClearPref: 'Сбросить текст', AutoHighlight: 'Автовыделение', } }; var tstr = cb.getLocalString(self, str); // Operations to handle replacements if (tstr.match(/[%]\w{1}/g)) { lang = (typeof self.properties[lang] != "undefined") ? lang : "en_US"; for(prop in self.properties[lang]) { if ((prop.match(/[_]\w{1}$/)) && ((prop.substr(prop.lastIndexOf("_")+1)) == (tstr.substring(tstr.indexOf("%")+1, tstr.indexOf("%")+4)))) { var tok = tstr.substring(tstr.indexOf("%"), tstr.indexOf("%")+4); tstr = tstr.replace(tok, l(prop)); } } } return tstr; } //переключения языка подсказки (switch tooltip language) //подсказка............................................................................. this.showTFinfo = function() { //getting prefs Unicode value var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService); var Val = "\n\n"+ l("AutoHighlight") +": "+ prefs.getComplexValue("FindBar.Highlight.value", Components.interfaces.nsISupportsString).data; //обрезать подсказку для "Автовыделение" var HValue = Val.substring(0,100); var HDots = ""; if (Val.length > 100){var HDots = '.......'; }; //.... this.tooltipText = l("Label") +"\n" + l("Left") +"\n" +l("Middle") +"\n"+ l("Right") + HValue + HDots; } this.setAttribute("onmouseover", "this.showTFinfo()"); //проверить наличие строк в about:config и создать если не существует(Add preferences)........................................ var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService); if (custombuttons.getPrefs("FindBar.version") !== '3') { prefs.setCharPref("FindBar.version", "3"); prefs.setBoolPref("FindBar.Highlight", true); prefs.setCharPref("FindBar.Highlight.value", "Firefox"); prefs.setBoolPref("FindBar.contextFindWords", true); prefs.setBoolPref("FindBar.DblclickClose", true); prefs.setCharPref("ui.textHighlightBackground", "#ef0fff");//http://coloria.net/bonus/colornames.htm //prefs.setCharPref("ui.textHighlightForeground", "#000000");//http://coloria.net/bonus/colornames.htm prefs.setBoolPref("FindBar.mini", false); prefs.setBoolPref("FindBar.auto_Close", false); prefs.setCharPref("FindBar.CloseTimer", "7");//7 сек(7 sec) prefs.setCharPref("FindBar.AutohighlightNum", "3"); }; //настройка меню(CB menu settings)................................................... //Объявляем 'storage' 'this_'... storage = globalStorage[document.domain]; var this_ = this; //изменить нужный пункт меню(toggle menuitems) //переключаем настройки в about:config(toggle preference) this.CBlabel = function (mi, id) { //Автоматически закрыть(FB auto close).... if(!id || id == "FBClose") { //переключаем настройки в about:config togglePref("FindBar.auto_Close"); //изменить нужный пункт меню var label = custombuttonsUtils. getPrefs ("FindBar.auto_Close", true) ? '● ' + l("AutoClose") : ' ' + l("AutoClose"); storage['FBClose'] = label; if(mi) mi.label = label; }; //FB auto close timer..... if(!id || id == "CloseTimer") { (function () { //Стоп, при инициализации кнопки if (!id) return; //switch auto close timer var HTTP = ""; var URL = custombuttons.promptBox(l("AutoClose"), l("CloseTimer")+custombuttons.getPrefs("FindBar.CloseTimer") + l("Sec"), HTTP); if (URL[0] == false) return; else var timer = [URL[1]]; //переключаем настройки в about:config(toggle preference) prefs.setCharPref("FindBar.CloseTimer", timer); })(); //изменить нужный пункт меню var label = l("CloseTimer")+ custombuttons.getPrefs("FindBar.CloseTimer") + l("Sec"); storage['CloseTimer'] = label; if(mi) mi.label = label; }; //FindBar.mini...... if(!id || id == "FBmini") { //переключаем настройки в about:config togglePref("FindBar.mini"); //Запускаем функцию fmini(run fmini) if (id) fmini(event); //изменить нужный пункт меню var label = custombuttonsUtils. getPrefs ("FindBar.mini", true) ? '● ' + l("FindBarMini") : ' ' + l("FindBarMini"); storage['FBmini'] = label; if(mi) mi.label = label; }; //Find в контекстном меню(Find in the context menu)..... if(!id || id == "FindInMenu") { // переключаем настройки в about:config togglePref("FindBar.contextFindWords"); //изменить нужный пункт меню var label = custombuttonsUtils. getPrefs ("FindBar.contextFindWords", true) ? '● ' + l("FindInMenu") : ' ' + l("FindInMenu"); storage['FindInMenu'] = label; if(mi) mi.label = label; }; //Автовыделение, добавить текст(Auto Highlight, add text)..... if(!id || id == "AddText") { //Запускаем функцию HighlightAdd(run function HighlightAdd) if (id) HighlightAdd(event); //изменить нужный пункт меню(toggle menuitems) var label = custombuttonsUtils. getPrefs ("FindBar.Highlight.value") ? ' ' + l("PrefValue") : ' ' + l("PrefValue"); storage['PrefValue'] = label; if(mi) mi.label = label; }; //Автовыделение, сбросить ..... if(!id || id == "Clear") { //сбросить настройки в about:config if (id) prefs.setCharPref("FindBar.Highlight.value", ""); //Запускаем функцию Highlight(run function Highlight) if (id) Highlight(event); //всплывающая подсказка if (id) custombuttons.alertSlide(l("ClearPref"),'????'); //изменить нужный пункт меню(toggle menuitems) var label = custombuttonsUtils. getPrefs ("FindBar.Highlight.value") ? ' ' + l("ClearPref") : ' ' + l("ClearPref"); storage['ClearPref'] = label; if(mi) mi.label = label; }; //Автовыделение(Switch, Auto Highlight)..... if(!id || id == "SwitchHighlight") { // переключаем настройки в about:config togglePref("FindBar.Highlight"); //Изменить иконку кнопки if (id) ToggleImage(event); //переключить кнопку 'Highlight'(toggle Highlight) if (id) document.getElementById('FindToolbar').getElement('highlight').removeAttribute("checked"); //Запускаем функцию Highlight(run function Highlight) if (id) Highlight(event); //изменить нужный пункт меню(toggle menuitems) var label = custombuttonsUtils. getPrefs ("FindBar.Highlight", true) ? '● ' + l("AutoHighlight") : ' ' + l("AutoHighlight"); storage['AutoHighlight'] = label; if(mi) mi.label = label; }; //переключаем настройки в about:config(toggle preference).... function togglePref(s){ //Стоп, при инициализации кнопки if (!id) return; //переключаем настройки custombuttons.setPrefs(s, !custombuttons.getPrefs(s)); } }; //Запускаем функцию CBlabel(run CBlabel)......... this.CBlabel(); //пункти меню(Our menu items) .... this.ss = [ { label: storage['FBClose'], cmd: 'document.popupNode.CBlabel(this, "FBClose")', sItemId: ''}, { label: storage['CloseTimer'], cmd: 'document.popupNode.CBlabel(this, "CloseTimer")', sItemId: ''}, { label: "separator", sItemId: ''}, { label: storage['FBmini'], cmd: 'document.popupNode.CBlabel(this, "FBmini")', sItemId: ''}, { label: storage['FindInMenu'], cmd: 'document.popupNode.CBlabel(this, "FindInMenu")', sItemId:''}, { label: "separator", sItemId: ''}, { label: storage['AutoHighlight'], cmd: 'document.popupNode.CBlabel(this, "SwitchHighlight")', sItemId: ''}, { label: storage['PrefValue'], cmd: 'document.popupNode.CBlabel(this, "AddText")', sItemId: ''}, { label: storage['ClearPref'], cmd: 'document.popupNode.CBlabel(this, "Clear")', sItemId: ''}]; // Our Initialization function for creating the context menu, setting up menuitems and telling var Cb = custombuttons; this.mObj = Cb.getCbContextObj(this); this.init = function(x) { x.mObj.setSub(); var nItem = {}, mItem = {}; document.getElementById(CB2const.sCBCtxtMenu).setAttribute("oncommand", "event.stopPropagation()"); for(var i in x.ss) { nItem = new x.mObj.getItem(); nItem.id = 'Note'; nItem.label = x.ss[i].label; if (nItem.label == "separator") { nItem = document.createElement("menuseparator"); } nItem.value = String(i); mItem = x.mObj.insertBefore(nItem , x.mObj.oMenu.lastChild); this.ss[i].sItemId = mItem.id; mItem.setAttribute('oncommand',x.ss[i].cmd) mItem.setAttribute("style", "margin-left: -14px;"); //.... var CCsubCall = document.getElementById("custombuttons-contextpopup-subCall"); CCsubCall.setAttribute("style", "margin-left: -4px;"); } x.mObj.getItem(); nItem = x.mObj.getItem(); nItem.id = 'Note'; this.separator = x.mObj.insertBefore( nItem , x.mObj.oMenu.lastChild); } this.init(this); //Стоп, при открытии настройки панелей.................................................... this.onDestroy = function(reason) { storage = globalStorage[document.domain] //.... if (reason == "constructor") storage['run'] = 'stop' if (reason == "destructor") delete storage['run'] if (reason == "update") storage['run'] = 'stop' } storage = globalStorage[document.domain]; if (storage['run']== 'stop') return; //Findbar, установить и удалить атрибут 'mini'(Findbar, set and remove attribute 'mini')........... //Findbar, установить и удалить 'hits'(Findbar, set and remove 'hits')........... function fmini(event){ //FindBar, auto find if (!gFindBar.hidden) { //Find gFindBar.onFindCommand(); } var findToolbar = document.getElementById("FindToolbar"); var HighBut = document.getAnonymousElementByAttribute( gFindBar, "anonid", "highlight"); if (custombuttonsUtils. getPrefs ("FindBar.mini", true)) { //... var highlightBtn = document.getElementById('FindToolbar').getElement('highlight'); if (highlightBtn.checked) { gFindBar._findField.style.color = prefs.getCharPref("ui.textHighlightBackground"); }; findToolbar.setAttribute("mini", "true"); storage['hits'] = ' '; HighBut.setAttribute("tooltiptext", "L = Find, R = Clear"); } else { findToolbar.removeAttribute("mini") storage['hits'] = ' hits'; HighBut.setAttribute("tooltiptext", "Highlight"); //... gFindBar._findField.style.color = "black"; } //Findbar, убрать фокус(Findbar, hide focus) _content.focus(); }; //Запускаем функции fmini(Run the function fmini) setTimeout(function() {fmini(event);}, 150) //Изменить иконку кнопки................................................................. function ToggleImage(event){ // toggle button image if (custombuttonsUtils. getPrefs ("FindBar.Highlight", true)) { this_.image="data:image/x-icon;base64,AAABAAEAExMAAAEAIAAYBgAAFgAAACgAAAATAAAAJgAAAAEAIAAAAAAA8AUAAAAAAAAAAAAAAAAAAAAAAAAAAAICAAAAADoHVOdAAWH/PQBd/TwAXP9AAWL/PwBf/z0AXv85AFn/MgBN/zEAS/85AFn/QgFj/zsAW/09AV7/OAdR5wAAAAAAAAACAAAAADsFWdtNAnr/TgF+/08Afv9PAH7/TwJ//0wAff9XD4T/azaN/1Emav8yAFD/RQNw/1ABgf9OAH3/TgB+/00Dev87BVnbAAAAADwIVudRAYH9VACK/1UEiv9UAYn/VACJ/1cEi/9MAIP/dzeh/+TV8P+olrH/LQBK/0sDdf9VAYj/VACJ/1QAif9UAIr/TwB9/ToHU+dEAWj/WAiM/loIkf9ZCZD/WQiP/1kIj/9dDJH/UQCI/4JAqf/68v//t6m+/zAAUP9OB3v/VwaM/1kIj/9ZCI//WgiR/1YIjP5DAmX/RQFo/V0Jlf9eB5r/XgiX/2AJnP9fCZn/Yw6b/1gAlP+DRq3/+PH+/7qsw/81AFr/UQmC/1wGlv9fCJn/XwiX/2AJmv9dCJb/RABp/UYDbf9eCJz/ZAih/2AIn/9jCaD/Ywqf/2QLnf9HAIP/aTKT/+fb8P+unLv/KABO/0gLc/9XC4r/XwmZ/18Lnv9hCaD/Xgic/0YDbv9IBnD/Yg2i/2cNqP9kDaX/Zg+n/2MHo/9dC5X/dT2Z/7ScxP/4+fv/0sbb/2g9hv9DC2n/RAVu/1QHif9hCKD/ZQuo/2INov9IBnD/SwVz/2YMqv9pDrD/aA+u/2kOrv9sGqf/p4HF/+Db5//Zy+X/yq7g/97O6//g2Oj/nH20/0sYdP9GCHT/XgeY/2gSrf9mDKr/SgVz/0oHd/9rELD/bA62/20QtP9jAa3/q3/O/+DY5/+vjsj/fziz/3wpuv+MRcT/wpvi/+jb8v+Ze7P/OABn/1MJiv9mEK7/aw+x/0oHd/9MCXz/cRW5/34nw/+AK8L/ikLE/+nZ9f+3o8b/YyKU/24Xr/9/J8T/dRy9/4Mzwv/TtOz/4Nfp/2M0if9cHYz/dSK3/3IYuP9MCXz/Twl+/4Arxf+SRdP/kEPQ/7eL4P/j1e7/hWSi/2kxmv+TT8r/lU/T/5VR0f+NQc3/sX3g/+PX7v+Vdqz/aDCU/4tCx/9/LcP/Twh+/1QSgf+QQtD/mkva/5JA1f+7i+X/2Mbp/4Bdnv9fKI3/hEG9/5NH1P+WS9j/jUHR/6t12//Yx+X/lHau/2svnv+US9P/j0HP/1QSgv9dIIn/lEbW/5tM3/+VRNv/s3zl/+7h+v+fgLn/WCeG/2w3nf+LR8P/kUXP/4I5wP+xitX/4dnp/49or/+BO7n/mUzc/5VG1v9cIIn/XyGM/5ZL2/+cUOX/mk/i/59V4//n0vv/2Mnl/4Zfqv9dL4v/ZCyV/3I3pf+NZLX/08ff/9fJ5f+CR7f/lUvV/51P5P+WS9v/XiGL/14gi/2aTeH/oVHr/6BR6P+bR+n/vIPu/+zb+v/h0ez/qYjD/4hjqP+ehLb/2dDi/+TX8P+pd9T/j0PV/55R5v+iUu3/mk3h/14gi/1kJZL/nU/n/qNU8v+gU+//pVbv/6FQ7/+3evH/3MP3//Pp/f/47///9ez//9vA9v+uceX/m0vj/6NU7v+iU+//plXy/5xP6P5iJJH/Wyt+55pR3/2mWPj/pVj3/6RY9/+nWvb/pVX1/6db9v+sZvf/rWn2/6xm9/+oXPb/pVb3/6ZZ+P+kWPf/plf3/6ZX+P+ZUN79Wyt+5wAAAABzQJ3bn1Ln/6JU9P+hV/X/oVb0/6NV9P+iV/X/olb1/6JV9P+iVfT/o1X0/6NW9P+iVfT/olX0/6NU9P+eUub/bj2W2wAAAAACAAICAAAAAGo9jeeBRa//fEOs/XxErf98RK3/fESt/3xErf98RK3/fESt/3xErf98RK3/fESt/3tDrP19RKv/az6K5wAAAAACAAICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="; } else { this_.image="data:image/x-icon;base64,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"; } }; ToggleImage(event); //find bar сверху (move find bar to the top)................................................ XPCOMUtils.defineLazyGetter(window, "gFindBar", function() { let XULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; let findbar = document.createElementNS(XULNS, "findbar"); findbar.setAttribute("browserid", "content"); findbar.id = "FindToolbar"; gBrowser.parentNode.insertBefore(findbar, gBrowser); // Force a style flush to ensure that our binding is attached. findbar.clientTop; window.gFindBarInitialized = true; return findbar; }); //find bar, показать количество совпадений(find bar,show the number of matches)...@author slimx................. (function() { //add label to findbar var status = document.getAnonymousElementByAttribute(gFindBar, 'anonid', 'match-case-status'); var sep = document.createElement("toolbarspacer"); var count = document.createElement("label"); count.hidden = true; status.parentNode.insertBefore(sep, status); status.parentNode.insertBefore(count, status);//findbar-container gFindBar.__proto__._foundMatches = count; gFindBar.__proto__._updateMatchesCount = function(aRes) { if (!this._updateMatchCountTimeout) window.clearTimeout(this._updateMatchCountTimeout); this._updateMatchCountTimeout = window.setTimeout(function(aRes, aSelf) { aSelf._updateMatchesCountWorker(aRes); }, 0, aRes, this); } gFindBar.__proto__._updateMatchesCountWorker = function(aRes) { var word = this._findField.value; if (aRes == this.nsITypeAheadFind.FIND_NOTFOUND || !word) { this._foundMatches.hidden = true; this._foundMatches.value = ""; } else { var matchesCount = this._countMatches(word).toString(); if (matchesCount != "0") { if (matchesCount == "1") this._foundMatches.value = matchesCount + storage['hits']; else if (matchesCount == "-1") { var matchLimit = 100; this._foundMatches.value = " \>"+ matchLimit + storage['hits']; // var key = (matchLimit > 1000) ? "Decrease" : "Increase"; } else this._foundMatches.value = matchesCount + storage['hits']; this._foundMatches.hidden = false; //Findbar, удалить атрибут 'red'(Findbar, remove attribute 'red').............. var findToolbar = document.getElementById("FindToolbar"); findToolbar.removeAttribute("red"); } else { this._foundMatches.hidden = true; this._foundMatches.value = ""; //Findbar, установить атрибут 'red'(Findbar, set attribute 'red')............... var findToolbar = document.getElementById("FindToolbar"); findToolbar.setAttribute("red", "true"); } window.clearTimeout(this._updateMatchCountTimeout); } } gFindBar.__proto__._countMatches = function(aWord, aWindow) { var win = aWindow || this.browser.contentWindow; var countFound = 0; for (var i = 0, count; win.frames && i < win.frames.length; i++) { if ((count = this._countMatches(aWord, win.frames[i])) != -1) countFound += count; else return count; } var doc = win.document; if (!doc || !(doc instanceof HTMLDocument)) return countFound; var body = doc.body; var count = body.childNodes.length; var searchRange = doc.createRange(); var startPt = doc.createRange(); var endPt = doc.createRange(); searchRange.setStart(body, 0); searchRange.setEnd(body, count); startPt.setStart(body, 0); startPt.setEnd(body, 0); endPt.setStart(body, count); endPt.setEnd(body, count); var retRange = null; var finder = Components.classes["@mozilla.org/embedcomp/rangefind;1"] .createInstance() .QueryInterface(Components.interfaces.nsIFind); finder.caseSensitive = this._shouldBeCaseSensitive(aWord); var matchLimit = 100; while ((retRange = finder.Find(aWord, searchRange, startPt, endPt))) { if (this._rangeIsVisible(retRange, win)) { if (this._findMode == this.FIND_LINKS) { if (this._rangeStartsInLink(retRange)) ++ countFound; } else ++ countFound; } if (countFound == matchLimit) { countFound = -1; break; } startPt = doc.createRange(); startPt.setStart(retRange.startContainer, retRange.startOffset + 1); } return countFound; } gFindBar.__proto__._rangeIsVisible = function(aRange, aWindow) { var node = aRange.startContainer; if (node.nodeType == node.ELEMENT_NODE) { if (node.hasChildNodes) { var childNode = node.childNodes[aRange.startOffset]; if (childNode) node = childNode; } } while (node && node.nodeType != node.ELEMENT_NODE) node = node.parentNode; // There is no perfect way to check if a node is visible in JavaScript, // so use the best measures we can have if (node) { var style = aWindow.getComputedStyle(node, ""); if (style) { if (style.visibility == "hidden" || style.visibility == "collapse" || style.display == "none") return false; if (style.left != "auto" && style.width != "auto") if (style.left < 0 && style.left + style.width < 0) return false; if (style.top != "auto" && style.height != "auto") if (style.top < 0 && style.top + style.height < 0) return false; } } return true; } gFindBar.__proto__._rangeStartsInLink = function(aRange) { var isInsideLink = false; var node = aRange.startContainer; if (node.nodeType == node.ELEMENT_NODE) { if (node.hasChildNodes) { var childNode = node.childNodes[aRange.startOffset]; if (childNode) node = childNode; } } const XLink_NS = "http://www.w3.org/1999/xlink"; do { if (node instanceof HTMLAnchorElement) { isInsideLink = node.hasAttribute("href");m break; } else if (typeof node.hasAttributeNS == "function" && node.hasAttributeNS(XLink_NS, "href")) { isInsideLink = (node.getAttributeNS(XLink_NS, "type") == "simple"); break; } node = node.parentNode; } while (node); return isInsideLink; } //insert count function to original eval("gFindBar._updateCaseSensitivity=" + gFindBar._updateCaseSensitivity.toString().slice(0, -1) + "this._updateMatchesCount();}"); eval("gFindBar._updateStatusUI=" + gFindBar._updateStatusUI.toString().slice(0, -1) + "this._updateMatchesCount();}"); })(); //FindBar, поиск колесиком мыши(FindBar, Mouse Scroll find )................................................ gFindBar.addEventListener('DOMMouseScroll', function (event){ //Найти (Find) gFindBar.onFindAgainCommand(event.detail < 0); }, false); //переключить 'Поиск на странице' двойным средним кликом на странице(toggle Find Bar, if Double midlle Click in page).......... var FBar = { addEvList : function(event) { //Стоп, при открытии настройки панелей if (storage['run'] == 'stop') return; //добавляем обработчики для обработки мышиных событий на странице....... //включена 'Использовать автоматическую прокрутку'... gBrowser.addEventListener('click', function(event){if (custombuttonsUtils. getPrefs ("general.autoScroll", true)){FBar.clickClose(event); }}, true); //если не включена 'Использовать автоматическую прокрутку' gBrowser.addEventListener('dblclick', function(event){if (!custombuttonsUtils. getPrefs ("general.autoScroll", true)) FBar.clickClose(event);}, true); }, clickClose : function(event) { //если нажатие на среднюю кнопку мыши if (1 == event.button) { //Стоп, если это 'bookmark tab','Управление дополнениями'.. if (getBrowser().currentURI.spec == "chrome://browser/content/bookmarks/bookmarksPanel.xul") return; if (getBrowser().currentURI.spec == "chrome://mozapps/content/extensions/extensions.xul") return; var strokaadresa= gURLBar.value; var nsa=strokaadresa.substring(0,6); if (nsa=="about:") return; //Стоп, если это ссылка(if link) var link = this.getLink(event.target); if(link) return; //если разрешено в настройках(about:config) if (custombuttonsUtils. getPrefs ("FindBar.DblclickClose", true)) { //переключить 'Поиск на странице' gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); if (!gFindBar.hidden){ Highlight(event); gFindBar.onFindAgainCommand(event.detail = 0); }; } } }, clickLink : function(event) { //Объявляем ссылку'Link'............ this.getLink = function(node) { if(!node || !node.localName) return null; const docNode = Node.DOCUMENT_NODE; // 9 const eltNode = Node.ELEMENT_NODE; // 1 for(node = node; node && node.nodeType != docNode; node = node.parentNode) { if( ( node instanceof HTMLAnchorElement || node instanceof HTMLAreaElement || node instanceof HTMLLinkElement ) && node.hasAttribute("href") || node.nodeType == eltNode && node.hasAttributeNS("http://www.w3.org/1999/xlink", "href") ) return node; } return null; }; } }; //Запускаем функцию addEvList(run function addEvList) FBar.addEvList(event); //Запускаем функцию clickLink(run function clickLink) FBar.clickLink(event); //findbar очистить, кликнуть правим кликом на findbar's label-Найти: или на иконку поиска на FindBar mini(FindBar clear findText, right click on findbar's label, else Find button).............. //findbar поиск, кликнуть левым кликом на findbar's label-Найти: или на иконку поиска на FindBar mini(FindBar find, left click on findbar's label, else Find button).............. var FindButt = document.getAnonymousElementByAttribute(gFindBar, "anonid", "find-label"); var HighBut = document.getAnonymousElementByAttribute( gFindBar, "anonid", "highlight"); //..... FindButt.setAttribute("onclick", "event.stopPropagation(); clickFind(event);"); //....... HighBut.addEventListener("click", function(event){ if (custombuttonsUtils. getPrefs ("FindBar.mini", true)){ gFindBar.getElement("highlight").removeAttribute("checked"); //....... clickFind(event); } }, true); //..................... clickFind = function(event){ event.preventDefault(); event.stopPropagation(); if ( event.button == 0 ) { Find(event); } else if ( event.button == 2 ) { gFindBar._findField.value = ''; gFindBar.onFindAgainCommand(false); //hide Highlight gFindBar._highlightDoc(false); } }; //Поиск по странице из буфера обмена, кликнуть средним кликом на findbar (FindBar Search for a page from the clipboard, midlle click on findbar).. //переключить кнопку 'Highlight' двойным левым кликом на findbar............ //Стоп, при открытии настройки панелей(stop, if onDestroy) if (storage['run'] !== 'stop') (function () { gFindBar.addEventListener("click", function(event){ if ( event.button != 1 )return; event.preventDefault(); event.stopPropagation(); this.str = readFromClipboard(); gFindBar._findField.value = this.str; Highlight(event); gFindBar.onFindAgainCommand(event.detail = 0); }, true); //переключить кнопку 'Highlight'......... gFindBar._findField.addEventListener("dblclick", function(event){ if ( event.button != 0 )return; event.preventDefault(); event.stopPropagation() //.... if (!custombuttonsUtils. getPrefs ("FindBar.mini")) return; if (custombuttonsUtils. getPrefs ("FindBar.Highlight")) return; //переключить кнопку 'Highlight' toggleHighlight(event); //Findbar, убрать фокус(Findbar, hide focus) _content.focus(); }, false); })(); //FindBar, автоматически закрыть(autohide Findbar)................................. //Стоп, при открытии настройки панелей(stop, if onDestroy) if (storage['run'] !== 'stop')(function () { function go() { gFindBar.close(); } function on() { if (!custombuttonsUtils. getPrefs ("FindBar.auto_Close", true)) return; if (gFindBar.hidden) return; if (window.ACRun == 'stop') return; window.ACRun = 'stop'; timeoutId = setTimeout(go, custombuttons.getPrefs("FindBar.CloseTimer") + '000') gFindBar.addEventListener('mouseover',off, false); gFindBar.addEventListener("DOMAttrModified", Modoff, false); } function Modoff() { if (gFindBar.hidden == false){ off(); } }; function off() { window.ACRun = ''; gFindBar.addEventListener('mouseover',Modoff, false); gFindBar.removeEventListener("DOMAttrModified", off, false); clearTimeout(timeoutId); } gBrowser.addEventListener('mouseover',on, false); })(); //FindBar, сочетания клавиш(Key config)......................................................... //Стоп, при открытии настройки панелей(stop, if onDestroy) if (storage['run'] !== 'stop')(function () { window.addEventListener('keydown', function (event){ //FindBar(ctrl+ F)показать - скрыть(Toggle Find Bar)......... if (event.altKey == false) { if ((event.keyCode==0x46)&&(event.ctrlKey)) { event.preventDefault(); event.stopPropagation(); gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close();}} //Findbar(ctrl+ALT+F), поиск по странице из буфера обмена(find from clipboard)............. if (event.altKey == true) { if ((event.keyCode==0x46)&&(event.ctrlKey)) { gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); goDoCommand("cmd_selectNone"); goDoCommand("cmd_paste");}} //Findbar(ctrl+ALT+H), FindBar, вести слова для выделение(set Highlight words)... if (event.altKey == true) { if ((event.keyCode==0x48)&&(event.ctrlKey)) { //Запускаем функцию HighlightAdd(run HighlightAdd) HighlightAdd(event); } } }, false); })(); //переключить кнопку 'Highlight'(toggle Highlight)............................................ function toggleHighlight(event) { var highlightBtn = document.getElementById('FindToolbar').getElement('highlight'); //... if (!highlightBtn.checked) { highlightBtn.setAttribute("checked", "true"); gFindBar._highlightDoc(true, gFindBar._findField.value); //.. gFindBar._findField.style.color = prefs.getCharPref("ui.textHighlightBackground"); } else { highlightBtn.removeAttribute("checked"); gFindBar._highlightDoc(false); //.. gFindBar._findField.style.color = "black"; } }; //Автоматически выделить заранее введенные слова (auto Highlight words permanent).................................................... Highlight = function(event) { //устанавливаем флаг... var m = true; if (event =='[object UIEvent]'){var m = false}; if (event =='[object DragEvent]'){var m = false}; //custombuttons.alertSlide(m); //.... var highlightBtn = document.getElementById('FindToolbar').getElement('highlight'); var FBNum = custombuttons.getPrefs("FindBar.AutohighlightNum"); //... if (!highlightBtn.checked) { gFindBar._findField.style.color = "black"; } //hide Highlight gFindBar._highlightDoc(false); //FindBar, auto find... if (!gFindBar.hidden) { var FBvalue = gFindBar._findField.value; //Findbar, удалить атрибут 'red'(Findbar, remove attribute 'red').............. if (FBvalue.length = 0) { var findToolbar = document.getElementById("FindToolbar"); findToolbar.removeAttribute("red"); } //Find..... if (m){ //Findbar, фокус(Findbar, focus) gFindBar._findField.focus(); gFindBar.onFindCommand(); //Findbar, убрать фокус(Findbar, hide focus) _content.focus(); } } //auto Highlight if (custombuttonsUtils. getPrefs ("FindBar.Highlight", true)) { if (gFindBar.hidden) { //getting prefs Unicode value var value = prefs.getComplexValue("FindBar.Highlight.value", Components.interfaces.nsISupportsString).data; }; if (!gFindBar.hidden) { if (FBvalue.length < FBNum) return; var value = FBvalue; }; //Highlight gFindBar._highlightDoc(true, value); } }; //Стоп, при открытии настройки панелей(stop, if onDestroy) if (storage['run'] !== 'stop') (function () { //добавляем обработчики... //обработчик для табов gBrowser.tabContainer.addEventListener("TabSelect", Highlight, false); document.addEventListener( "DOMContentLoaded", Highlight, false); //обработчики для FindBar gFindBar._findField.addEventListener("input", Highlight, false); gFindBar._findField.setAttribute("ondrop","event.stopPropagation(); Find(event); "); gFindBar.addEventListener("DOMAttrModified", function(event){ if (!gFindBar.hidden) return; Highlight(event)}, false); })(); //Найти на странице................. Find = function(event){ var sel = content.getSelection().toString(); if (sel){ if(gFindBar.hidden){gFindBar.onFindCommand();} //Убираем пробелы с обоих концов текста.... var newstr = sel.replace(/^\s+|\s+$/g,""); //... gFindBar._findField.value = newstr; Highlight(event); gFindBar.onFindAgainCommand(event.detail = 0); } else { Highlight(event); gFindBar.onFindAgainCommand(false); } }; //FindBar. контекстного меню (context Menu)....................................... (function contextFindWords(){ // выходим, если функция уже выполнялась if (document.getElementById("contextFindWords")) return; const kXULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; var contextMenu = document.getElementById("contentAreaContextMenu"); var separator = document.getElementById("context-sep-properties"); var eventTarget = null; var menu = document.createElementNS(kXULNS, "menu"); menu.id = "contextFindWords"; var locale = Components.classes["@mozilla.org/preferences-service;1"] .getService(Components.interfaces.nsIPrefBranch) .getCharPref("general.useragent.locale"); menu.setAttribute("label", locale.indexOf("ru") == -1 ? "Find" : "Find"); //menu.setAttribute("accesskey", "i"); menu.hidden = true; contextMenu.insertBefore(menu, separator); var menuPopup = document.createElementNS(kXULNS, "menupopup"); menu.appendChild(menuPopup); var lst = [ { label:locale.indexOf("ru") == -1 ? "Find on page" : "Найти на странице", //accesskey:"F", command:ContexFind }, { label:locale.indexOf("ru") == -1 ? "Search selected in Website" : "Поиск по сайту(google)", command:Search }, { label:locale.indexOf("ru") == -1 ? "Highlight selected" : "Выделить текст на странице", command:HighlightSel }, { label:locale.indexOf("ru") == -1 ? "Auto Highlight, add text" : "Автовыделение, добавить текст", command:addSel } ]; for(var i = 0, m; m = lst[i]; i++){ var menuItem = document.createElementNS(kXULNS, "menuitem"); menuItem.setAttribute("label", m.label); menuItem.setAttribute("type", "m.radio"); if ("accesskey" in m) menuItem.setAttribute("accesskey", m.accesskey); menuItem.addEventListener("command", m.command, false); menuItem.id = "context-Find-Words-" + m.label.toString(); menuPopup.appendChild(menuItem); } contextMenu.addEventListener("popupshowing", setMenuDisplay, false); function setMenuDisplay(aEvent) { var t = content.getSelection().toString(); if(t){ if (custombuttonsUtils. getPrefs ("FindBar.contextFindWords", true)) { document.getElementById("contextFindWords").hidden = false; } else { document.getElementById("contextFindWords").hidden = true; } } else { document.getElementById("contextFindWords").hidden = true; } } function ContexFind(){ //Запускаем функцию Find Find(event); } function Search(){ var focusedWindow = document. commandDispatcher. focusedWindow; var text = focusedWindow. getSelection (). toString (); var doc = getBrowser (). contentDocument; try { var url = doc. location. hostname; } catch(e) { var url = ""; } text = escape (convertFromUnicode ("UTF-8", text)); url = encodeURIComponent (url); var searchUrl = "http://www.google.com/search?as_q=" + text + "&as_sitesearch=" + url; gBrowser.selectedTab = gBrowser.addTab(searchUrl); } function HighlightSel(){ gFindBar.toggleHighlight(false); var text = document.commandDispatcher.focusedWindow.getSelection(); gFindBar._highlightDoc(true, text); goDoCommand("cmd_selectNone"); } function addSel(){ //Запускаем функцию HighlightAdd HighlightAdd(event); } })(); //Добавить текст(выделенный / из буфера обмена) для автовыделения..................... function HighlightAdd(event){ //Копируем выделенный текст в буфер document.getElementById("cmd_copy").doCommand(); // Get the root branch var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); //setting Unicode value var str = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString); //читаем из буфера обмена str.data = readFromClipboard(); prefs.setComplexValue("FindBar.Highlight.value", Components.interfaces.nsISupportsString, str); //всплывающая подсказка custombuttons.alertSlide(l("AutoHighlight"), str.data); //... goDoCommand("cmd_selectNone"); //Запускаем функцию Highlight(run Highlight) Highlight(event); }; //Следим за иконкой статуса на FindBar(Monitor the find-status-icon on FindBar)...................... //Findbar, установить и удалить атрибут 'yellow'(Findbar, set and remove attribute 'yellow') function fflash(event){ //.. var findToolbar = document.getElementById("FindToolbar"); var findstatus = gFindBar.getElement("find-status-icon"); //.. findstatus.addEventListener("DOMAttrModified",function(e) { if(findstatus.getAttribute("status")=="wrapped") { findToolbar.setAttribute("yellow", "true"); setTimeout(function() {findToolbar.removeAttribute("yellow"); }, 700);}; }, false)}; //Запускаем функции fflash, fmini(Run the function fflash) document.addEventListener( "DOMContentLoaded", fflash(event), false); // FindToolbar стиль(style)....................................................................... (function(css) { var pi = document.createProcessingInstruction( 'xml-stylesheet', 'type="text/css" href="data:text/css;utf-8,' + encodeURIComponent(css) + '"' ); return document.insertBefore(pi, document.documentElement); } )(<![CDATA[ @namespace url(http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul); #FindToolbar:not([mini="true"]){ border-bottom: 2px solid; -moz-border-bottom-colors: ThreeDShadow ThreeDHighlight;} #FindToolbar > .findbar-container > * { display: -moz-box !important; } #FindToolbar > hbox > label{-moz-appearance: none !important;font-weight: bold !important;} #find-field,.findbar-textbox{width: 250px !important;} #FindToolbar label[value="(С учётом регистра)"], #FindToolbar label[value="(Case sensitive)"], #FindToolbar .findbar-find-fast.findbar-find-status, #FindToolbar .findbar-container>image {display: none !important;} #FindToolbar[yellow="true"] .findbar-textbox{ -moz-box-shadow: 0 0 0 1em yellow inset !important;} #FindToolbar[red="true"] .findbar-textbox{ -moz-box-shadow: 0 0 0 1em red inset !important;} #FindToolbar:not([red="true"]) .findbar-textbox[status="notfound"]{ background: rgba(207,219,236,0.99) !important; color: black !important; -moz-box-shadow: none !important;} .findbar-closebutton{list-style-image: none !important; background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAD2EAAA9hAHVrK90AAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAABVElEQVR42mL8//8/AzUBQAAxMVAZAAQQ1Q0ECCCqGwgQQCzoAvkN3Q5ACoQ/TGwonYBNE1BNAZASAOINQDUXkOUAAgibC0EKAoC4H6hxARbDQJb0Q9U8QJcHCCBGbLEM1GQApA4AMT8QJwJdsQAqngCk5gPxQyA2AIp/QNcLEECMuJIN1Ov7oVxHqBfXA/FHUJCgexUGAAKIEV86RHLRR6gQyMWOQMMO4NIDEEB4Yxnq1YVQg0C4EJ9hIAAQQHgNBLoQ5E0DJKEAQskGIIAIpUOQa/ShrrwIxPbYYh4ZAAQQEx7XLYAadhHoTVBYJkDDMh6aDrECgABiwmEYKK3FQ13lAA3PC0heBqVRrN4HCCAmHDGbD3VNAnJag0ZIIpS7AJpeUQBAADFhiQQFIG7EldagMV8IxBPQIgwMAAKIkdrlIUAAUb20AQggqhsIEEBUNxAgwAD1Mmk1Ns1bkQAAAABJRU5ErkJggg==") center no-repeat !important; } /*Find Toolbar, mini......................................... */ #FindToolbar[mini="true"] .findbar-textbox{ width: 16em !important; height:21px!important; padding-right: 20px !important; margin-right: 2px!important; margin-left:-4px!important} #FindToolbar[mini="true"]{ position: fixed;right: 17px; background: menu!important; -moz-box-shadow: 0px 10px 5px -10px rgba(0,0,0,.3) !important; border-radius: 0 0 8px 8px !important;border-top: none !important; padding-right:3px!important;} #FindToolbar[mini="true"] .findbar-container>checkbox{ margin-left:-24px !important; margin-right: -3px !important} #FindToolbar[mini="true"] label[class="checkbox-label"], #FindToolbar[mini="true"] toolbarbutton.findbar-find-next, #FindToolbar[mini="true"] toolbarbutton.findbar-find-previous, #FindToolbar[mini="true"] .findbar-highlight label, #FindToolbar[mini="true"] .findbar-closebutton, #FindToolbar[mini="true"] .findbar-find-fast[anonid="find-label"], #FindToolbar[mini="true"] .findbar-find-fast[anonid="match-case-status"] { display: none !important;} #FindToolbar[mini="true"] toolbarbutton.findbar-highlight.tabbable, #FindToolbar[mini="true"] toolbarbutton.findbar-highlight.tabbable[checked="true"]{ -moz-appearance: none !important; list-style-image: none !important; background: url("data:image/gif;base64,R0lGODlhEAAQAMQWAJmZzJlmzGZmzGZm/2aZ/5mZ/5nM/8zM/8z//5mZmWZmmf///8yZzMzMmZlmmZmZM8zMM8zMZsz/ZsyZZpmZZmZmM////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAHoAxYALAAAAAAQABAAAAVsoCUCgQCIaCoKA1G4p7q6RmEXcQoMxYEYQEMOJSAYEL+D8jC0CG6GJTKhUtiAPiSCmlK4er7FgiGzWLGIBUJRZliVCLMi0Sg7FHhq4gGJlFUNEBIQE38pExGDFIYoFIkQi4wWjhEVkiIUFQohADs=") center no-repeat !important; border: 1px solid rgba(0,0,0,0.3) !important; height:21px !important;} #FindToolbar[mini="true"] checkbox{ -moz-box-ordinal-group: 3 !important;} #FindToolbar[mini="true"] textbox.findbar-textbox{ -moz-box-ordinal-group: 2 !important} #FindToolbar[mini="true"] toolbarbutton.findbar-highlight{ -moz-box-ordinal-group: 4 !important; margin-left:-3px !important} #FindToolbar[mini="true"] .findbar-closebutton{ -moz-box-ordinal-group: 7 !important; } ]]>.toString());
Отредактировано bunda1 (31-01-2012 21:06:08)
Отсутствует
Обработчик DOMContentLoaded срабатывает если открыть новые таби, как это отфильтровать?
document.addEventListener( "DOMContentLoaded",function(aEvent){ //фылтр.... //стоп, если срабатывает на фрейме var doc = aEvent.originalTarget; var win = doc.defaultView; if (win != win.top) return; if (win.frameElement) return; Highlight}, false); Highlight = function(event) { //....... }
Пришлось самому решить эту проблему.
gBrowser.addEventListener("DOMContentLoaded", function(event){ if (event.target.location.href !== getBrowser().currentURI.spec) return; Highlight(event)}, false);
Отредактировано bunda1 (01-02-2012 21:49:28)
Отсутствует