Полезная информация

Хотите узнать больше о расширениях? Посмотрите ролики, рассказывающие о работе с расширениями Firefox.

№885120-08-2015 10:41:08

manuk
Участник
 
Группа: Members
Зарегистрирован: 17-10-2010
Сообщений: 306
UA: Palemoon 25.0

Re: Custom Buttons

bunda1, а жест (скрипт) "закрыть вкладку справа (следующую)" возможен?

Отсутствует

 

№885220-08-2015 14:50:39

hartumov
Участник
 
Группа: Members
Зарегистрирован: 17-11-2013
Сообщений: 136
UA: Firefox 25.0

Re: Custom Buttons

Есть функция

Выделить код

Код:

function func_1('str1', 123, 567, 'str2') {

   // тело функции

}

Эту функцию я запускать не хочу. но могу получить её аргументы в виде строки - просто взять из кода страницы. А теперь я хочу запустить другую функцию с этими же аргументами. Как это сделать?

Отредактировано hartumov (20-08-2015 14:56:49)

Отсутствует

 

№885320-08-2015 15:37:17

vv07
Участник
 
Группа: Members
Зарегистрирован: 07-11-2007
Сообщений: 689
UA: Firefox 16.0

Re: Custom Buttons

Уважаемые спецы! Нет ли возможности, создать кнопку работающую по принципу расширения User Agent Switcher? Само расширение глючит или конфликтует с чем то.
А на моей 16 лисе, сейчас очень актуально иметь возможность быстрой смены useragent.

Отсутствует

 

№885420-08-2015 15:57:32

Ultima2m
Участник
 
Группа: Members
Откуда: Россия
Зарегистрирован: 28-11-2013
Сообщений: 608
UA: Firefox 40.0

Re: Custom Buttons

Так была такая кнопка User-agent change
Не помню где брал.
Вот код, если надо

скрытый текст

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EUser-agent%20change%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAD///8A////AJkyAACZMwAAmTIAAJcwAACUKQBAqVIh1J48CX6YMAAAmTMAAJkzAACZMwAAmDEAAP///wD///8A////AP///wCZMgAAmTMAAJQqABadNwiRz45Y+fTUo/+fPgyKlSoAAJcvAACZMgAAmTMAAJgxAAD///8A////AP///wD///8Aly8AAZUvAV65Xyji8LBn///XiP/6xoD/r1wq56hRIcmkSxm7ljEBcZcwAAeZMQAA////AP///wD///8A////AKFCEcfhkkn//7VY//+vUP//qEn//7BY//+5Yv//uF7//LVd/92NQ/+fPAq4li8AC////wD///8A////AP///wCdOQiLyGYe8vieP///rkz//6ZE//6nS//vkTj/7Ywz//qcPf//tFD/4og3/5gwAIb///8A////AP///wD///8AmDEAAJMrACikQQ2w2o9J///RgP/8xHn/oD4LyZYvAYmjPwzH8bNn///Zh/+0WiDn////AP///wD///8A////AJkyAACZMgAAli4AAJQrAFa3ZjDb5rp9/6JCDoqXLgAAkykALbhoMf/Wpmr/sVsl/////wD///8A////AP///wCZMwAAmTMAAJkzAACZMgAAlCsAEZo3BIiaNAFPmTMAAJo0AAeWLgBGkykASpcwAEX///8A////AP///wD///8AmDEAU5QqAFmWLgBXmjQADJkzAACaNQJJnj0Km5QqAB+ZMQAAmTMAAJkzAACZMwAA////AP///wD///8A////ALBZI//dr3H/wHU9/5IpAECWLgAAnjsIeem9gP/Bdz7qli8BbZUtAAOZMgAAmTIAAP///wD///8A////AP///wCtUBff/858//e6a/+qSRLYmTIEmaA9CMr3um///9J//+ObUf+rShPFkysAPJcwAAD///8A////AP///wD///8AlS4Acth8L///tE///6E///OSNv/0lTn//qVJ//+jQP//q0j//aNB/9JyJf2fPQug////AP///wD///8A////AJcvAAObNgaf1II9//eyXv/+tmD//rdj//+zXf//q0z//7JU//+1Wf/fkUn/okMSv////wD///8A////AP///wCYMAAAmDEAAJUuAFugQxKqpEoauqhRINz2xID//9qM/+6vZ/+2XCXelC4AWZcwAAD///8A////AP///wD///8AmDAAAJkzAACZMwAAlzAAAJYsAACcOAZ47sub/8yLVvWbNQaKlCsAEpkyAACZMwAA////AP///wD///8A////AJgwAACZMwAAmTMAAJkzAACYMQAAnDkGbqZMG9STKQA8ly8AAJkzAACZMgAAmTMAAP///wD///8A/H8AAPB/AADABwAAwAMAAMADAADgAwAA+EMAAPxDAADCPwAAwg8AAMAHAADAAwAAwAMAAPAHAAD+DwAA/j8AAA%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bvar%20ps%20%3D%20Components.%20classes%20%5B%22@mozilla.org/preferences-service%3B1%22%5D.%20getService%20%28Components.%20interfaces.%20nsIPrefService%29.%20getBranch%20%28%22general.%22%29%3B%0A%20%20%20%20ps.%20setCharPref%20%28%22useragent.override%22%2C%20%22reset%22%29%3B%0A%0Athis.PS%20%3D%20Components.classes%5B%27@mozilla.org/preferences-service%3B1%27%5D%20.getService%28Components.interfaces.nsIPrefBranch%29%3B%0Athis.PS.clearUserPref%28%22general.useragent.override%22%29%3B%0Athis.image%3D%0A%27data%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAD///8A////AJkyAACZMwAAmTIAAJcwAACUKQBAqVIh1J48CX6YMAAAmTMAAJkzAACZMwAAmDEAAP///wD///8A////AP///wCZMgAAmTMAAJQqABadNwiRz45Y+fTUo/+fPgyKlSoAAJcvAACZMgAAmTMAAJgxAAD///8A////AP///wD///8Aly8AAZUvAV65Xyji8LBn///XiP/6xoD/r1wq56hRIcmkSxm7ljEBcZcwAAeZMQAA////AP///wD///8A////AKFCEcfhkkn//7VY//+vUP//qEn//7BY//+5Yv//uF7//LVd/92NQ/+fPAq4li8AC////wD///8A////AP///wCdOQiLyGYe8vieP///rkz//6ZE//6nS//vkTj/7Ywz//qcPf//tFD/4og3/5gwAIb///8A////AP///wD///8AmDEAAJMrACikQQ2w2o9J///RgP/8xHn/oD4LyZYvAYmjPwzH8bNn///Zh/+0WiDn////AP///wD///8A////AJkyAACZMgAAli4AAJQrAFa3ZjDb5rp9/6JCDoqXLgAAkykALbhoMf/Wpmr/sVsl/////wD///8A////AP///wCZMwAAmTMAAJkzAACZMgAAlCsAEZo3BIiaNAFPmTMAAJo0AAeWLgBGkykASpcwAEX///8A////AP///wD///8AmDEAU5QqAFmWLgBXmjQADJkzAACaNQJJnj0Km5QqAB+ZMQAAmTMAAJkzAACZMwAA////AP///wD///8A////ALBZI//dr3H/wHU9/5IpAECWLgAAnjsIeem9gP/Bdz7qli8BbZUtAAOZMgAAmTIAAP///wD///8A////AP///wCtUBff/858//e6a/+qSRLYmTIEmaA9CMr3um///9J//+ObUf+rShPFkysAPJcwAAD///8A////AP///wD///8AlS4Acth8L///tE///6E///OSNv/0lTn//qVJ//+jQP//q0j//aNB/9JyJf2fPQug////AP///wD///8A////AJcvAAObNgaf1II9//eyXv/+tmD//rdj//+zXf//q0z//7JU//+1Wf/fkUn/okMSv////wD///8A////AP///wCYMAAAmDEAAJUuAFugQxKqpEoauqhRINz2xID//9qM/+6vZ/+2XCXelC4AWZcwAAD///8A////AP///wD///8AmDAAAJkzAACZMwAAlzAAAJYsAACcOAZ47sub/8yLVvWbNQaKlCsAEpkyAACZMwAA////AP///wD///8A////AJgwAACZMwAAmTMAAJkzAACYMQAAnDkGbqZMG9STKQA8ly8AAJkzAACZMgAAmTMAAP///wD///8A/H8AAPB/AADABwAAwAMAAMADAADgAwAA+EMAAPxDAADCPwAAwg8AAMAHAADAAwAAwAMAAPAHAAD+DwAA/j8AAA%3D%3D%27%3B%0A%0A%0Avar%20%u043C%u0435%u043D%u044E%20%3D%0A%27%3Cmenupopup%20xmlns%3D%22http%3A//www.mozilla.org/keymaster/gatekeeper/there.is.only.xul%22%5Cn%5C%0A%20%20%20%20%20%20%20oncommand%3D%22this.parentNode.%u0441%u043C%u0435%u043D%u0438%u0442%u044C%u042E%u0437%u0435%u0440%u0430%u0433%u0435%u043D%u0442%28event%29%22%3E%5Cn%5C%0A%20%20%20%20%20%20%20%20%20%20%3Cmenuitem%20type%3D%22radio%22%20value%3D%22reset%22%20label%3D%22Default%20User-Agent%22/%3E%5Cn%5C%0A%20%20%20%20%20%20%20%20%20%20%3Cmenuseparator/%3E%5Cn%5C%0A%20%20%20%20%3Cmenuitem%20type%3D%22radio%22%20value%3D%22Mozilla/5.0%20%28Windows%3B%20U%3B%20MSIE%2010.0%3B%20Windows%20NT%208.0%3B%20Win64%3B%20x64%3B%20Trident/5.0%3B%20.NET4.0E%3B%20ru%29%22%20label%3D%22WinNT%20x64%20IE%2010.0%22/%3E%5Cn%5C%0A%20%20%20%20%3Cmenuitem%20type%3D%22radio%22%20value%3D%22Mozilla/5.0%20%28compatible%2C%20MSIE%2011%2C%20Windows%20NT%206.3%3B%20Win64%3B%20x64%3B%20Trident/7.0%3B%20rv%3A11.0%29%20like%20Gecko%22%20label%3D%22Win8.1%20x64%20IE-11.0%22/%3E%5Cn%5C%0A%20%20%20%20%3Cmenuitem%20type%3D%22radio%22%20value%3D%22Mozilla/5.0%20%28Windows%20NT%206.1%29%20AppleWebKit/537.36%20%28KHTML%2C%20like%20Gecko%29%20Chrome/43.0%20Safari/537.36%22%20label%3D%22Chrome%2043.0%22/%3E%5Cn%5C%0A%20%20%20%20%3Cmenuitem%20type%3D%22radio%22%20value%3D%22Opera/9.80%20%28X11%3B%20Linux%20i686%3B%20Ubuntu/14.10%29%20Presto/2.12.388%20Version/12.16%22%20label%3D%22Opera%2012.16%20/%20Linux%22/%3E%5Cn%5C%0A%20%20%20%20%3Cmenuitem%20type%3D%22radio%22%20value%3D%22Mozilla/5.0%20%28Android%204.2%3B%20Linux%20armv7l%3B%20rv%3A9.0%29%20Gecko/20111216%20Firefox/38.0%20Fennec/38.0%22%20label%3D%22Android%204.2%20/%20Fennec%2038.0%22/%3E%5Cn%5C%0A%20%20%20%20%3Cmenuitem%20type%3D%22radio%22%20value%3D%22AppEngine-Google%3B%20%28+http%3A//code.google.com/appengine%3B%20appid%3A%20unblock4myspace%29%22%20label%3D%22AppEngine-Google%22/%3E%5Cn%5C%0A%20%20%20%20%3Cmenuitem%20type%3D%22radio%22%20value%3D%22Mozilla/5.0%20%28Windows%3B%20U%3B%20Windows%20NT%205.1%3B%20ru%3B%20rv%3A1.9.2.3%29%20Gecko/20100401%20Firefox/3.6.15%20YB/3.5.1%22%20label%3D%22FF%203.6.15+yandexbar%22/%3E%5Cn%5C%0A%20%20%20%20%3Cmenuitem%20type%3D%22radio%22%20value%3D%22iCab/3.0.2%20%28Macintosh%3B%20U%3B%20PPC%20Mac%20OS%29%22%20label%3D%22iCab/Mac%22/%3E%5Cn%5C%0A%20%20%20%20%3Cmenuitem%20type%3D%22radio%22%20value%3D%22Mozilla/5.0%20%28X11%3B%20Linux%20x86_64%3B%20rv%3A2.0b6pre%29%20Gecko/20100401%20Firefox/38.0.1%22%20label%3D%22Firefox-38.0.1%20/%20Linux%22/%3E%5Cn%5C%0A%20%20%20%20%3Cmenuitem%20type%3D%22radio%22%20value%3D%22AmigaVoyager/3.2%20%28AmigaOS/MC680x0%29%22%20label%3D%22AmigaVoyager%22/%3E%5Cn%5C%0A%20%20%20%20%3Cmenuitem%20type%3D%22radio%22%20value%3D%22Mozilla/5.0%20%28X11%3B%20U%3B%20Linux%20x86_64%3B%20en-US%3B%20rv%3A1.9.1.3%29%20Gecko/20090914%20Slackware/13.0_stable%20Firefox/3.5.3%22%20label%3D%22Slackware%22/%3E%5Cn%5C%0A%20%20%20%20%3Cmenuitem%20type%3D%22radio%22%20value%3D%22Mozilla/5.0%20%28Macintosh%3B%20U%3B%20PPC%20Mac%20OS%20X%2010.4%3B%20ru%3B%20rv%3A1.9.2.3%29%20Gecko/20100401%20Firefox/38.0.1%22%20label%3D%22Firefox-38.0.1%20Mac%20OS%22/%3E%5Cn%5C%0A%20%20%20%20%3Cmenuitem%20type%3D%22radio%22%20value%3D%22NCSA%20Mosaic/1.0%20%28X11%3BSunOS%204.1.4%20sun4m%29%22%20label%3D%22NCSA%20Mosaic-1.0%20/%20SunOS%204.1.4%22/%3E%5Cn%5C%0A%20%20%20%20%3Cmenuitem%20type%3D%22radio%22%20value%3D%22NetSurf/2.0%20%28RISC%20OS%3B%20armv5l%3B%20NetSurf/2.0%29%22%20label%3D%22NetSurf-2.0%20RISC%20OS%22/%3E%5Cn%5C%0A%20%20%20%20%3Cmenuitem%20type%3D%22radio%22%20value%3D%22Mozilla/5.0%20%28BeOS%3B%20U%3B%20Haiku%20BePC%3B%20en-US%3B%20rv%3A38.0.1.1%29%20Gecko/20080112%22%20label%3D%22Mozilla-38.0.1%20/%20BeOS%22/%3E%5Cn%5C%0A%20%20%20%20%3Cmenuitem%20type%3D%22radio%22%20value%3D%22Mozilla/5.0%20%28OS/2%3B%20U%3B%20Warp%204.5%3B%20en-US%3B%20rv%3A1.8.1.3pre%29%20Gecko/20070307%22%20label%3D%22Mozilla/5.0%20OS/2%22/%3E%5Cn%5C%0A%20%20%20%20%3Cmenuitem%20type%3D%22radio%22%20value%3D%22Mozilla/5.0%20%28PLAYSTATION%203%3B%202.00%29%22%20label%3D%22Mozilla/5.0%20%28PLAYSTATION%203%3B%202.00%29%22/%3E%5Cn%5C%0A%20%20%20%20%3Cmenuitem%20type%3D%22radio%22%20value%3D%22Links%20%286.9%3B%20Unix%206.9-astral%20sparc%3B%2080x25%29%22%20label%3D%22Links%20/%20Unix%22/%3E%5Cn%5C%0A%3C/menupopup%3E%27%3B%0A%0A%0A%u043C%u0435%u043D%u044E%20%3D%20e4xConv_parseXULFromString%20%28%u043C%u0435%u043D%u044E%29%3B%0A%u043C%u0435%u043D%u044E.%20childNodes%20%5B0%5D.%20setAttribute%20%28%22checked%22%2C%20%22true%22%29%3B%0Athis.%20orient%20%3D%20%22horizontal%22%3B%0Athis.%20type%20%3D%20%22menu%22%3B%0Athis.%20appendChild%20%28%u043C%u0435%u043D%u044E%29%3B%0Athis.%20%u0441%u043C%u0435%u043D%u0438%u0442%u044C%u042E%u0437%u0435%u0440%u0430%u0433%u0435%u043D%u0442%20%3D%20function%20%28%u0441%u043E%u0431%u044B%u0442%u0438%u0435%29%0A%7B%0A%20%20%20%20var%20%u044E%u0437%u0435%u0440%u0430%u0433%u0435%u043D%u0442%20%3D%20%u0441%u043E%u0431%u044B%u0442%u0438%u0435.%20target.%20getAttribute%20%28%22value%22%29%3B%0A%20%20%20%20%20%20%20var%20ps%20%3D%20Components.%20classes%20%5B%22@mozilla.org/preferences-service%3B1%22%5D.%20getService%20%28Components.%20interfaces.%20nsIPrefService%29.%20getBranch%20%28%22general.%22%29%3B%0A%20%20%20%20ps.%20setCharPref%20%28%22useragent.override%22%2C%20%u044E%u0437%u0435%u0440%u0430%u0433%u0435%u043D%u0442%29%3B%0Athis.PS%20%3D%20Components.classes%5B%27@mozilla.org/preferences-service%3B1%27%5D%20.getService%28Components.interfaces.nsIPrefBranch%29%3B%0Athis.pref%3D%27general.useragent.override%27%3B%0Avar%20state%3Dthis.PS.getCharPref%28this.pref%29%3B%0Aif%20%28state%3D%3D%22reset%22%29%20%7B%20%0Athis.PS%20%3D%20Components.classes%5B%27@mozilla.org/preferences-service%3B1%27%5D%20.getService%28Components.interfaces.nsIPrefBranch%29%3B%0Athis.pref%3D%27general.useragent.override%27%3B%0Avar%20state%3Dthis.PS.getCharPref%28this.pref%29%3B%0Athis.PS%20%3D%20Components.classes%5B%27@mozilla.org/preferences-service%3B1%27%5D%20.getService%28Components.interfaces.nsIPrefBranch%29%3B%0Athis.PS.clearUserPref%28%22general.useragent.override%22%29%3B%20%0Athis.image%3D%0A%27data%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAD///8A////AJkyAACZMwAAmTIAAJcwAACUKQBAqVIh1J48CX6YMAAAmTMAAJkzAACZMwAAmDEAAP///wD///8A////AP///wCZMgAAmTMAAJQqABadNwiRz45Y+fTUo/+fPgyKlSoAAJcvAACZMgAAmTMAAJgxAAD///8A////AP///wD///8Aly8AAZUvAV65Xyji8LBn///XiP/6xoD/r1wq56hRIcmkSxm7ljEBcZcwAAeZMQAA////AP///wD///8A////AKFCEcfhkkn//7VY//+vUP//qEn//7BY//+5Yv//uF7//LVd/92NQ/+fPAq4li8AC////wD///8A////AP///wCdOQiLyGYe8vieP///rkz//6ZE//6nS//vkTj/7Ywz//qcPf//tFD/4og3/5gwAIb///8A////AP///wD///8AmDEAAJMrACikQQ2w2o9J///RgP/8xHn/oD4LyZYvAYmjPwzH8bNn///Zh/+0WiDn////AP///wD///8A////AJkyAACZMgAAli4AAJQrAFa3ZjDb5rp9/6JCDoqXLgAAkykALbhoMf/Wpmr/sVsl/////wD///8A////AP///wCZMwAAmTMAAJkzAACZMgAAlCsAEZo3BIiaNAFPmTMAAJo0AAeWLgBGkykASpcwAEX///8A////AP///wD///8AmDEAU5QqAFmWLgBXmjQADJkzAACaNQJJnj0Km5QqAB+ZMQAAmTMAAJkzAACZMwAA////AP///wD///8A////ALBZI//dr3H/wHU9/5IpAECWLgAAnjsIeem9gP/Bdz7qli8BbZUtAAOZMgAAmTIAAP///wD///8A////AP///wCtUBff/858//e6a/+qSRLYmTIEmaA9CMr3um///9J//+ObUf+rShPFkysAPJcwAAD///8A////AP///wD///8AlS4Acth8L///tE///6E///OSNv/0lTn//qVJ//+jQP//q0j//aNB/9JyJf2fPQug////AP///wD///8A////AJcvAAObNgaf1II9//eyXv/+tmD//rdj//+zXf//q0z//7JU//+1Wf/fkUn/okMSv////wD///8A////AP///wCYMAAAmDEAAJUuAFugQxKqpEoauqhRINz2xID//9qM/+6vZ/+2XCXelC4AWZcwAAD///8A////AP///wD///8AmDAAAJkzAACZMwAAlzAAAJYsAACcOAZ47sub/8yLVvWbNQaKlCsAEpkyAACZMwAA////AP///wD///8A////AJgwAACZMwAAmTMAAJkzAACYMQAAnDkGbqZMG9STKQA8ly8AAJkzAACZMgAAmTMAAP///wD///8A/H8AAPB/AADABwAAwAMAAMADAADgAwAA+EMAAPxDAADCPwAAwg8AAMAHAADAAwAAwAMAAPAHAAD+DwAA/j8AAA%3D%3D%27%3B%0A%0A%20%7D%0A%20else%20%7B%20this.image%3D%0A%27data%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIADkAgAAFgAAAIlQTkcNChoKAAAADUlIRFIAAAAQAAAAEAgGAAAAH/P/YQAAAAFzUkdCAK7OHOkAAAAEZ0FNQQAAsY8L/GEFAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjOM5pdQAAACVUlEQVQ4T3WTMWhTURSG2zSaNqRRqU0N1MbUUGnStNDGtMagoqFFaR2qCELpoBUUFaQ4SV2kOKmDODrJm+Th9CYJDhK3ThLFIThlKpkkSCuvuX5/zJM3aODjvHty/v/ed867XW7LDXTxU4QkxCDo/myGKi9fLdnpCVP7WLno/nJz5KchA1MwBjEJuzsGQTiAMOH+aAYQDFWebho3EDRuOGLK6w9Nc7uxQP4KdddgAdIS9oJ270EY33pjGWd1Zds+X3Lt0dQfgw7OaGqX//eovQpZaWWgY2vHPnt1pVXzCf6HdaZoqL+PbkYGURb9lRfPZrd8RXVo+NYeZeCE59CdhLwMDmEwYo0M170ii8Y5N9bM63zONDu5dr5QVEMn0VyCSXRhGaRkYgWCvEjQ6BS19+XnNDNZfrL5Rblq7LBhIp8QLFN7llgixuGWDBLQXX1rT8AUTZpVMzUZjAo6SeNr9SY1MYQ5yMIR1v1w0DPQFAbhKMQp6GVkw86jDYPpEjmNd6z6zh7HdABC5IbguAzSUEAUgRNwD5Epd0bI/Hf1bdQ/VzNOIPit3QtAsw5ZGYTbJhyLo363Ly/u+BunRuojUgO9nE1P0DyGjAx6IEnRAzsa+VvkoVFqpN5az7yaNtQrTMtgv3a32Mkv/Bcys+ZLhibfRqNxRmUQYtFHzDCBoqPj+URaO5jzaRs+tg36MUPtsQ77ZDCgB8hjNEf3l/XOnkH7ueWu8d8i8TRRF+ku8Q4xIQONUBdKp1A/xiFW+1BOcJV3uJHXKT5FTrdvvhMvwJzbcgd/A3Q4lrpREVkLAAAAAElFTkSuQmCC%27%3B%0A%0A%20%7D%3B%0A%7D%0A%20%20%0A%0Afunction%20e4xConv_parseXULFromString%28xul%29%20%7B%0A%09xul%20%3D%20xul.replace%28/%3E%5Cs+%3C/g%2C%20%22%3E%3C%22%29%3B%0A%09return%20new%20DOMParser%28%29.parseFromString%28xul%2C%20%22application/xml%22%29.documentElement%3B%0A%7D%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Отсутствует

 

№885520-08-2015 16:36:15

vv07
Участник
 
Группа: Members
Зарегистрирован: 07-11-2007
Сообщений: 689
UA: Firefox 16.0

Re: Custom Buttons

Ultima2m пишет

Так была такая кнопка User-agent chang

То что нужно. Спасибо а то я не смог найти ее в готовых.

Отсутствует

 

№885620-08-2015 17:54:39

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 24.0

Re: Custom Buttons

manuk пишет

bunda1, а жест (скрипт) "закрыть вкладку справа (следующую)" возможен?

Выделить код

Код:

gBrowser.removeTab( gBrowser.visibleTabs[gBrowser.mCurrentTab._tPos+1] );

Отсутствует

 

№885721-08-2015 11:01:46

manuk
Участник
 
Группа: Members
Зарегистрирован: 17-10-2010
Сообщений: 306
UA: Palemoon 25.0

Re: Custom Buttons

bunda1, очередное спасибо.

Отсутствует

 

№885821-08-2015 13:45:07

Coroner
Участник
 
Группа: Members
Зарегистрирован: 29-10-2012
Сообщений: 4001
UA: Firefox 40.0

Re: Custom Buttons

Добрый день.
Имеется замечательная кнопка Vertical Toolbar (к сожалению не могу найти на неё ссылку). :blush:

скрытый текст

Выделить код

Код:

/*Initialization Code*/
var button = this;

const sideBarAutoClose = false; // true => включить авто закрытие боковой панели 
const autoCloseDelay = 500;     // ms

const showDelay = 250;        // ms
const distanceShow = 2;        // px
const distanceHide = 64;    // px
const vtWidthCorrection = -111;    // px ( number [ + or - ] ) // -1

const toolbarId = "vertical_toolbar";
const toolboxId = toolbarId + "_toolbox";
const sep = "\u00A0";
const firstAttributes = "\
id %id% class chromeclass-toolbar fullscreentoolbar true context toolbar-context-menu _width 40 \
customizable true flex 1 iconize large mode icons orient vertical widthcorr 0"
.replace(/ /g, sep).replace(/%id%/, toolbarId);

// ....................................................................................................

const pn = "custombutton.verticaltoolbar.attributes";
var prefs = Application.prefs;
if (!prefs.has(pn)) prefs.setValue(pn, firstAttributes);
var pref = prefs.get(pn);
function getAttr_pref() {
    return pref.value
}
function setAttr_pref() {
    pref.value = "";
    Array.slice(document.getElementById(toolbarId).attributes).forEach(function(attr) {
        pref.value += (attr.name + sep + attr.value + sep);
    });
}
// ....................................................................................................

var browser = document.getElementById("browser");
var toolbar = document.getElementById(toolbarId);
var toolbox = document.getElementById(toolboxId);

if (!toolbar) {

    toolbox = document.createElement("toolbox");
    toolbox.id = toolboxId;
    toolbox.palette = gNavToolbox.palette;
    
    toolbar = document.createElement("toolbar");
    toolbar.style.minWidth = "20px"; // 20
    
    browser.insertBefore(toolbox, browser.firstChild);
    toolbox.appendChild(toolbar);

// ....................................................................................................
// Thanks - http://nanto.asablo.jp/blog/2007/04/22/1459018

    const style ='\
\
    toolbar[orient="vertical"] {\n\
        -moz-appearance: none;\n\
        border-bottom: 0px none;\n\
        border-top: 0px none;\n\
        border-right: 1px solid rgb(170, 188, 207);\n\
        background: none repeat scroll 0% 0% rgb(207, 219, 236);\n\
        -image: -moz-linear-gradient(rgba(155, 255, 255, .5), rgba(255, 255, 255, 0) 27px) !important;\n\
}\n\
    toolbar[orient="vertical"] > toolbarseparator,\n\
    toolbar[orient="vertical"] > [id^="wrapper-separator"] {\n\
        -moz-appearance: none !important;\n\
        margin: 0.2em 2px;\n\
        border-bottom: 1px solid ThreeDHighlight;\n\
        border-top: 1px solid ThreeDShadow;\n\
        height: 2px;\n\
        border-left: none;\n\
        border-right: none;\n\
}\n\
    toolbar[orient="vertical"] > toolbarspacer,\n\
    toolbar[orient="vertical"] > [id^="wrapper-spacer"] { height: 15px; }'

    var sspi = document.createProcessingInstruction('xml-stylesheet',
          'type="text/css" href="data:text/css,' + encodeURI(style) + '"');
    document.insertBefore(sspi, document.documentElement);

// ....................................................................................................

    var attr = getAttr_pref().split(sep);
    for (var i=0; i<(attr.length-1); i+=2) { toolbar.setAttribute(attr[i], attr[i+1]); }

    var currentSet = toolbar.getAttribute("currentset").split(",");
    currentSet.forEach(function(id){ toolbar.insertItem(id); });
}
// ....................................................................................................

var et = gNavToolbox.externalToolbars;
var already = false;
for (var i=0; i<et.length; i++) { if (et[i] == toolbar) { already = true; break } }
if (!already) et[et.length] = toolbar;

var delta = toolbar.getAttribute("widthcorr") - vtWidthCorrection;
toolbar.setAttribute("widthcorr", vtWidthCorrection);
if (delta) toolbar.setAttribute("_width", toolbar.getAttribute("_width") - delta);

function lock() {

    var width = toolbar.getAttribute("_width");
    
    toolbox.style.position = toolbar.hasAttribute("autohide") ? "" : "fixed";
    toolbox.style.height =
    toolbar.style.height = browser.boxObject.height + "px";

    toolbar.style.maxWidth =
    toolbar.style.minWidth =
    toolbox.style.maxWidth =
    toolbox.style.minWidth = width * !toolbar.collapsed + "px";    
}
function beforeCustomize() {

    toolbox.removeAttribute("style");
    toolbox.removeAttribute("width");
    toolbar.removeAttribute("style");
    toolbar.style.minWidth = "20px";
}
function customizationChange() {
    window.setTimeout(function() {
        toolbar.setAttribute("_width", toolbar.boxObject.width + vtWidthCorrection);
    }, 640);
}
function afterCustomize() {

    setAttr_pref();
    removeListeners();
    lock();
}
function collapser(e) {

    var distance = e.screenX - browser.boxObject.screenX;
    if (toolbar.waiting) return;

    if ((distance <= distanceShow) && (toolbar.collapsed)) {

        if (showDelay < 1) { toolbar.collapsed = false; lock(); return; }

        toolbar.waiting = true;
        window.setTimeout(function() {

            if (distance >= distanceShow) { toolbar.waiting = false; return; }
            toolbar.collapsed = false;
            lock();
            toolbar.waiting = false;

        }, showDelay);
    }
    if ((distance >= distanceHide) && (!toolbar.collapsed)) {
        toolbar.collapsed = true;
        lock();
    }
}
function removeListeners() {

    gNavToolbox.removeEventListener("beforecustomization", beforeCustomize, false);
    gNavToolbox.removeEventListener("customizationchange", customizationChange, false);
    gNavToolbox.removeEventListener("aftercustomization", afterCustomize, false);
}

this.onclick = function(e) { 

    if (e.button) return;

    var autohide = toolbar.hasAttribute("autohide");
    toolbar.collapsed = autohide;

    if (!autohide) {
        browser.removeEventListener("mousemove", collapser, false);
        toolbar.setAttribute("autohide", "true");
    }
    else {
        browser.addEventListener("mousemove", collapser, false);
        toolbar.removeAttribute("autohide");
    }
    lock();
}

toolbar.ondblclick = function(e) {

    if ( e.button || e.target.nodeName == "toolbarbutton"
                || e.target.nodeName == "toolbaritem" ) return;
    button.click();
}
// ....................................................................................................

if (!toolbar.hasAttribute("autohide")) {
    browser.addEventListener("mousemove", collapser, false);
}
else toolbar.setAttribute("autohide", "true");

lock();

gNavToolbox.addEventListener("beforecustomization", beforeCustomize, false);
gNavToolbox.addEventListener("customizationchange", customizationChange, false);
gNavToolbox.addEventListener("aftercustomization", afterCustomize, false);



// ....................................................................................................
var observer = {
    get obs() {
        return Cc["@mozilla.org/observer-service;1"].getService(Ci.nsIObserverService);
    },
    init: function() {
        this.obs.addObserver(this, "lightweight-theme-styling-update", false);
        this.observe();
    },
    destroy: function() {
        try {
            this.obs.removeObserver(this, "lightweight-theme-styling-update");
        } catch(ex) {}
    },
    observe: function(subject, topc, data) {
        setTimeout(function() {

            var win = document.getElementById("main-window");
            var bgi = window.getComputedStyle(win).backgroundImage;
            if (bgi == "none") {
                var bgc = window.getComputedStyle(win).backgroundColor;
                toolbar.style.backgroundColor = bgc;
            
                var brc = bgc;
                bgc.match(/\d+/g).forEach(function(color, i) {
                    if (i > 2) return;
                    brc = brc.replace(color, Math.round(color/1.5));
                });
                toolbar.style.borderRightColor = brc;
                return;
            }
            var url = bgi.replace('url("', "").replace('")', "");

            const xhtml = "http://www.w3.org/1999/xhtml";
            var img = document.createElementNS(xhtml, "img");
            var canvas = document.createElementNS(xhtml, "canvas");
            img.src = url;
            img.onload = function() {

                var width = canvas.width = img.width;
                var height = canvas.height = img.height;
                var context = canvas.getContext("2d");
                context.drawImage(img, 0, 0);
                var arr = context.getImageData(0, 0, width, height).data;

                var r = 0, g = 0, b = 0;
                var len = arr.length;
                for (var i = 0; i < len; i += 4) {
                    r += arr[i];
                    g += arr[i + 1];
                    b += arr[i + 2];
                }
                var colors = [r, g, b], borderRightColors = [];
                colors.forEach(function(color, i) {
                    var clr = Math.round(4 * color / len);
                    colors[i] = clr;
                    borderRightColors.push(Math.round(clr /1.5));
                });
                var rgb = "rgb(" + colors.join(", ") + ")";
                var rgbBrc = "rgb(" + borderRightColors.join(", ") + ")";

                toolbar.style.backgroundColor = rgb;
                toolbar.style.borderRightColor = rgbBrc;
            }
        }, 200);
    }
};
observer.init();



function n(id) document.getElementById(id);
const page = n("content"), box = n("sidebar-box"), sidebar = n("sidebar");
var tvtc, timeout;

function listenMO(node, listen) {
    var func = node == box ? onBMO : onPMO;
    (listen ? addEventListener : removeEventListener)
    .apply(this, ["mouseover", func, false, node]);
}
function onPMO() {
    listenMO(page, false);
    timeout = setTimeout(hideSB, autoCloseDelay );
    listenMO(box, true);
}
function onBMO() {
    listenMO(box, false);
    clearTimeout(timeout);
    listenMO(page, true);
}
function hideSB() {
    listenMO(box, false);
    if (box.hidden) return;
    var id = box.getAttribute("sidebarcommand") || "viewBookmarksSidebar";
    n(id).setAttribute("checked", true);
    toggleSidebar(id);
}
function onSBL() {
    var time = Date.now();
    listenMO(page, false);
    if (time - tvtc < 800) listenMO(page, true);
}
function onVTC(e) {
    var time = Date.now();
    for (var node = e.target; node; node = node.parentNode) {
        if (node != toolbar) continue;
        tvtc = time;
        break;
    }
}
function ael(add) {
    [    ["DOMContentLoaded", onSBL, false, sidebar],
        ["click", onVTC, false, window],
        ["command", onVTC, false, window]
    ].forEach(function(args) {
        (add ? addEventListener : removeEventListener).apply(this, args);
    });
}
if ( sideBarAutoClose ) ael(true);



this.onDestroy = function(reason) {
        observer.destroy();
        
    browser.removeEventListener("mousemove", collapser, false);
    if (!toolbar.hasAttribute("customizing")) removeListeners();
    if (reason == "delete") pref.reset();
    if (!getAttr_pref()) return;
    setAttr_pref();
    
    ael(false);
};


При использовании её в SeaMonkey возникает такая вот неприятность (вертикальная полоса):

скрытый текст
cf1492818bb54d11b73450245836f6c9.png

Вызванная кнопками сворачивания панелей. Если же их спрятать, прописав в userChrome.css следующий код

скрытый текст

Выделить код

Код:

toolbargrippy {
display: none !important;
}


То панель приобретёт нормальный вид без лишнией вертикальной полоски. Но хотелось бы и сохранить функционал сворачивалок панелей и добиться приемливого вида Vertical Toolbar. Можно-ли прятать сворачивалки при открытии тулбара и восстанавливать их при его исчезновении ? Или для этого нужна перезагрузка как в случае с CSS кодом ?
Если возможно - прошу умельцев помочь. Спасибо.

Отсутствует

 

№885921-08-2015 19:23:07

fokanik
Участник
 
Группа: Members
Зарегистрирован: 05-02-2014
Сообщений: 268
UA: Seamonkey 2.33

Re: Custom Buttons

Coroner пишет

toolbargrippy { display: none !important; }

Спасибо, обновил свой css файл :)

Добавлено 21-08-2015 19:44:19
Подскажите, в консоли ошибок появляется следующее:

Выделить код

Код:

Метка времени: 21.08.2015 21:38:14
Ошибка: DEPRECATION WARNING: Passing a callback to Livermarks methods is deprecated. Please use the returned promise instead.
You may find more details about this deprecation at: https://developer.mozilla.org/docs/Mozilla/JavaScript_code_modules/Promise.jsm
resource://gre/components/nsLivemarkService.js 371 LS_getLivemark
chrome://communicator/content/places/browserPlacesViews.js 939 PT__insertNewItem
chrome://communicator/content/places/browserPlacesViews.js 901 PT__rebuild
chrome://communicator/content/places/browserPlacesViews.js 1247 PT_invalidateContainer
chrome://communicator/content/places/browserPlacesViews.js 655 PVB_containerStateChanged
chrome://communicator/content/places/browserPlacesViews.js 75 PlacesViewBase.prototype.result
chrome://communicator/content/places/browserPlacesViews.js 49 PlacesViewBase.prototype.place
chrome://communicator/content/places/browserPlacesViews.js 13 PlacesViewBase
chrome://communicator/content/places/browserPlacesViews.js 857 PlacesToolbar
chrome://communicator/content/bookmarks/browser-places.js 848 PTH_init
chrome://navigator/content/navigator.js 664 Startup
chrome://navigator/content/navigator.xul 1 onload
null 0 null

Источник: resource://gre/modules/Deprecated.jsm
Строка: 79

Это нормально или нужно что-то делать?

Отредактировано fokanik (21-08-2015 19:44:19)

Отсутствует

 

№886021-08-2015 20:13:02

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 24.0

Re: Custom Buttons

Coroner пишет

То панель приобретёт нормальный вид без лишнией вертикальной полоски. Но хотелось бы и сохранить функционал сворачивалок панелей и добиться приемливого вида Vertical Toolbar. Можно-ли прятать сворачивалки при открытии тулбара и восстанавливать их при его исчезновении ? Или для этого нужна перезагрузка как в случае с CSS кодом ?
Если возможно - прошу умельцев помочь. Спасибо.

Может используй:

Выделить код

Код:

toolbargrippy[id="vertical_toolbar"] {
display: none !important;
}

или

Выделить код

Код:

toolbargrippy[id="vertical_toolbar_toolbox"] {
display: none !important;
}

Отсутствует

 

№886122-08-2015 06:14:48

Coroner
Участник
 
Группа: Members
Зарегистрирован: 29-10-2012
Сообщений: 4001
UA: Firefox 40.0

Re: Custom Buttons

bunda1 пишет

Может используй:

bunda1, спасибо. Я не смог вчера ответить. Убрал полоску с вертикальной панели кодом в CSS

скрытый текст

Выделить код

Код:

#vertical_toolbar .toolbar-grippy {
display: none !important;
}

fokanik пишет

Спасибо, обновил свой css файл

А можно не убирать совсем, а сделать компактнее, типа того :

скрытый текст

Выделить код

Код:

toolbargrippy {
   width: 3px !important;
}


:offtopic: Прошу прощения за CSS-оффтоп.

Отсутствует

 

№886222-08-2015 09:43:43

fokanik
Участник
 
Группа: Members
Зарегистрирован: 05-02-2014
Сообщений: 268
UA: Seamonkey 2.33

Re: Custom Buttons

Coroner пишет

А можно не убирать совсем, а сделать компактнее, типа того :

Спасибо.

Отсутствует

 

№886322-08-2015 14:15:17

Kamui
Участник
 
Группа: Members
Зарегистрирован: 31-03-2011
Сообщений: 1796
UA: Firefox 39.0

Re: Custom Buttons

Как добавить обработку ctrl+ЛКМ:

Выделить код

Код:

addEventListener("click", function(e) { 
if (e.button == 1) {
e.preventDefault();
e.stopPropagation();
gContextMenu.openLinkInTab();
setTimeout(function() { document.getElementById("contentAreaContextMenu").hidePopup() }, 20);
}
}, true, document.getElementById("context-openlinkincurrent"));

Пробовал добавить, но не получилось:

Выделить код

Код:

addEventListener("click", function(e) { 
if (e.button == 1 || e.button == 0 && !e.ctrlKey) {
e.preventDefault();
e.stopPropagation();
gContextMenu.openLinkInTab();
setTimeout(function() { document.getElementById("contentAreaContextMenu").hidePopup() }, 20);
}
}, true, document.getElementById("context-openlinkincurrent"));

Отсутствует

 

№886423-08-2015 11:02:02

rbfyec
Участник
 
Группа: Members
Зарегистрирован: 07-07-2012
Сообщений: 365
UA: Firefox 20.0

Re: Custom Buttons

Как сделать простенький счётчик найденных совпадений слов на странице?
Я делаю

Выделить код

Код:

function get_text(el) {
     ret = "";
     var length = el.childNodes.length;
     for(var i = 0; i < length; i++) {
        var node = el.childNodes[i];
        if(node.nodeType != 8) {
            ret += node.nodeType != 1 ? node.nodeValue : get_text(node);
         }
      }
              return ret;
   }
   var words = get_text(content.document.body); 
   var word = "my_word"; 
   var count = words.split(word).length-1;

И пробовал другие способы. Но они все находят бОльшее кол-во совпадений, чем видно глазом и чем считает счётчик для кнопки Find от Infocatcher.
Не всегда. На некоторых страницах бывает показывают правильно. Наверно считают и невидимые слова.

*******************

Kamui пишет

Как добавить обработку ctrl+ЛКМ:

А если попробовать

Выделить код

Код:

if (e.button == 1 || (e.button == 0 && e.ctrlKey))

Отредактировано rbfyec (23-08-2015 11:18:25)

Отсутствует

 

№886523-08-2015 22:48:38

Kamui
Участник
 
Группа: Members
Зарегистрирован: 31-03-2011
Сообщений: 1796
UA: Firefox 39.0

Re: Custom Buttons

rbfyec пишет

А если попробовать

Так срабатывает, но открывается не только в новой вкладке, но и в текущей.

Отсутствует

 

№886624-08-2015 15:19:24

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2249
UA: Firefox 38.0

Re: Custom Buttons

rbfyec пишет

function get_text(el)

get_text(el) возвращает нечто напоминающее el.textContent

Наверно считают и невидимые слова.

Ну, так отфильтруй то, что сочтёшь ненужным, типа

скрытый текст

Выделить код

Код:

function get_text(el) {
    var result = "";
    for(var node = el.firstChild; node; node = node.nextSibling) {
        if (
            node.nodeType == node.ELEMENT_NODE
            && node.scrollWidth && node.scrollHeight
            && node.nodeName != "SELECT"
        )
            result += get_text(node);

        else if (node.nodeType == node.TEXT_NODE)
            result += node.nodeValue;
    }
    return result;
}


Kamui
Может так подойдёт
скрытый текст

Выделить код

Код:

addEventListener("mouseup", e => {
    if (e.button == 1 || e.button == 0 && e.ctrlKey) {
        e.preventDefault();
        gContextMenu.openLinkInTab();
        e.target.parentNode.hidePopup();
    }
}, false, document.getElementById("context-openlinkincurrent"));

Отсутствует

 

№886724-08-2015 22:11:43

jars
Забанен
 
Группа: Members
Зарегистрирован: 28-07-2015
Сообщений: 235
UA: Firefox 32.0

Re: Custom Buttons

--- del ---

Отредактировано jars (24-08-2015 22:12:24)

Отсутствует

 

№886826-08-2015 13:17:56

LordNEVR
Участник
 
Группа: Members
Зарегистрирован: 26-08-2015
Сообщений: 3
UA: Firefox 38.0

Re: Custom Buttons

Приветствую.
Можно сделать код кнопки "Очистить удалённые"?
http://savepic.su/6050808.png
Хочу поместить её  на панель кнопок.

Отсутствует

 

№886926-08-2015 18:28:08

hartumov
Участник
 
Группа: Members
Зарегистрирован: 17-11-2013
Сообщений: 136
UA: Firefox 25.0

Re: Custom Buttons

Как сделать, чтобы, если ссылка имеет псевдокласс :hover посылался xmlhttprequest, а по  событию click на этой же ссылке:
===  Если уже получен ответ на xmlhttprequest, с этим ответом выполняется определеное действие
===  Если к моменту клика ответ еще не получен, ждем пока придет ответ и делаем с ним это  самое действие

Отсутствует

 

№887026-08-2015 21:04:01

Kamui
Участник
 
Группа: Members
Зарегистрирован: 31-03-2011
Сообщений: 1796
UA: Firefox 39.0

Re: Custom Buttons

Dumby
Спасибо, так вроде работает:)

Отсутствует

 

№887128-08-2015 19:04:39

hartumov
Участник
 
Группа: Members
Зарегистрирован: 17-11-2013
Сообщений: 136
UA: Firefox 25.0

Re: Custom Buttons

Ну как же сделать?
https://forum.mozilla-russia.org/viewto … 77#p692477

Отредактировано hartumov (28-08-2015 19:05:11)

Отсутствует

 

№887228-08-2015 23:30:38

fokanik
Участник
 
Группа: Members
Зарегистрирован: 05-02-2014
Сообщений: 268
UA: Seamonkey 2.33

Re: Custom Buttons

792bce12f668.jpg

А есть такая кнопка или аналог - для чтения текста голосом?

Отсутствует

 

№887330-08-2015 16:45:45

fokanik
Участник
 
Группа: Members
Зарегистрирован: 05-02-2014
Сообщений: 268
UA: Seamonkey 2.33

Re: Custom Buttons

Кнопка - Master Edit Button в SeaMonkey не работает, можно поправить - код (инициализация):

Выделить код

Код:

/*Initialization Code*/
var data = <window
  title={this.label}
  onload={"opener.document.getElementById(\"" + this.id + "\").load()"}
  xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
    <keyset>
      <key keycode="VK_ESCAPE" oncommand="close()"/>
    </keyset>
    <vbox flex="1">
      <listbox id="listbox" flex="1">
        <listhead>
          <listheader label="Id" width="200"/>
          <listheader label="Label"/>
        </listhead>
        <listcols>
          <listcol/>
          <listcol flex="1"/>
        </listcols>
      </listbox>
      <hbox>
        <button label="Edit" oncommand={"opener.document.getElementById(\"" + this.id + "\").edit()"}/>
      </hbox>
    </vbox>
</window>;
var bool = XML.prettyPrinting;
XML.prettyPrinting = false;
data = '<?xml version="1.0"?><?xml-stylesheet href="chrome://global/skin/" type="text/css"?>' + data.toXMLString();
XML.prettyPrinting = bool;
var dialog;
this.leftclick = function(event) {
  var url = "data:application/vnd.mozilla.xul+xml;text/plain," + data;
  var feature = "chrome,centerscreen,width=500,height=600,dialog=no";
  dialog = window.openDialog(url, "", feature);
}
this.midclick = function(event) {
  var os = Components.classes["@mozilla.org/observer-service;1"].
    getService(Components.interfaces.nsIObserverService);
  var cancelQuit = Components.classes["@mozilla.org/supports-PRBool;1"].
    createInstance(Components.interfaces.nsISupportsPRBool);
  os.notifyObservers(cancelQuit, "quit-application-requested", "restart");
  if (cancelQuit.data) {
    alert("Abort Restart Process");
  } else {
    var appStartup = Components.classes["@mozilla.org/toolkit/app-startup;1"].
      getService(Components.interfaces.nsIAppStartup);
    appStartup.quit(appStartup.eAttemptQuit | appStartup.eRestart);
  }
}
this.load = function() {
  var nodeList = document.getElementsByTagName("toolbarbutton");
  for (var i = 0; i < nodeList.length; i++) {
    if (nodeList[i].id.search("custombuttons-button") == 0) {
      var item = document.createElement("listitem");
      var cell = document.createElement("listcell");
      cell.setAttribute("label", nodeList[i].id);
      item.appendChild(cell);
      var cell = document.createElement("listcell");
      cell.setAttribute("label", nodeList[i].label);
      item.appendChild(cell);
      dialog.document.getElementById("listbox").appendChild(item);
    }
  }
  dialog.document.getElementById("listbox").focus();
  dialog.document.getElementById("listbox").selectAll();
}
this.edit = function() {
  var label = dialog.document.getElementById("listbox").selectedItem.firstChild.getAttribute("label");
  dialog.close();
  custombuttons.editButton(document.getElementById(label));
}
this.setAttribute("onclick", "custombuttons.gQuot.mHandler(event, this)");

А может аналог есть?

Отсутствует

 

№887430-08-2015 22:23:28

fokanik
Участник
 
Группа: Members
Зарегистрирован: 05-02-2014
Сообщений: 268
UA: Seamonkey 2.33

Re: Custom Buttons

bunda1, а можно тут сделать, так:
- Я создаю на рабочем столе скрытый файл - TextToEditor.txt
- Потом работает код
- И когда известно, что имя файла нужно изменить - файл сохраняется уже не скрытым (проверено через сохранить как ...)

Только код - скрытый файл не подхватывает почему-то:

Выделить код

Код:

/* Функция создаст текстовой файл в папке custombuttons в папке профиля 
   и запишет в файл выделенный текст и откроет файл в редакторе ...............................*/
function textToEditor() {

   var sel = getSelect();
         
   // фильтр ....
   if ( !sel ) {
        Components.classes["@mozilla.org/alerts-service;1"].getService(Components.interfaces.nsIAlertsService)
                  .showAlertNotification("chrome://global/skin/icons/error-16.png", "Text To Editor", "Выделите или скопируйте текст!", false, "", null, "");
        return;
        }
   // получить выделенный текст в UTF-8              
   var text = convertFromUnicode("UTF-8", sel ); 
          
   // устанавить путь к файлу и записать текст ....
   var foStream = Cc["@mozilla.org/network/file-output-stream;1"].createInstance(Ci.nsIFileOutputStream);
   var file = Services.dirsvc.get('Desk', Ci.nsIFile);     
   file.append("Text To Editor.txt");     
   foStream.init(file, 0x02|0x08|0x20, 0666, 0);
   foStream.write(text, text.length);
   foStream.close();     
   file.launch();
};
textToEditor();


/* Функция отдаст выделенный текст из страницы или текстового поля,
   если текст не выделен отдаст '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;
};

Отсутствует

 

№887501-09-2015 19:16:15

fokanik
Участник
 
Группа: Members
Зарегистрирован: 05-02-2014
Сообщений: 268
UA: Seamonkey 2.33

Re: Custom Buttons

Выделить код

Код:

deleteAllInFolder('emptyJunk'); //удалить все письма из папки спам

Такую функцию использует Seamonkey для удаления спама, сделал кнопку - но эта функция работает во всех активных папках (входящие, спам, удаленные), а вдруг, случайно, что-то лишнее удалю - как исправить?

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]