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

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

№787605-08-2014 14:18:01

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4296
UA: Firefox 31.0

Re: Custom Buttons

okkamas_knife пишет:

ты бы лучше написал чем грозят описанные нововведения - в плане что поломается из старых кнопок
и как с этими поломками бороться.:iron:

Ничем не грозят. Зато будет более удобная замена для E4X.

Indomito пишет:

Но после обновления она стало дублироваться, не последнего обновления FF (точно с какой версии не помню).

Заменить

Выделить код

Код:

      document.getElementById(mPopid).appendChild(mBarClone);

на

Выделить код

Код:

      mPopup.appendChild(mBarClone);

И можно уменьшить задержку:

Выделить код

Код:

setTimeout(this.initBtn, 5000);

Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№787706-08-2014 23:11:53

Indomito
Участник
 
Группа: Members
Откуда: Москва-Север
Зарегистрирован: 27-08-2009
Сообщений: 426
UA: Firefox 31.0

Re: Custom Buttons

Infocatcher спс  - помогло, а таймер я менял и ранее... результат был нулевой.


"Никогда не выявляйте в программе ошибки, если не знаете, что с ними дальше делать." Штейнбах

Отсутствует

 

№787807-08-2014 00:40:46

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4296
UA: Firefox 31.0

Re: Custom Buttons

Indomito
Собственно, проблема там из-за

Выделить код

Код:

this.type="menu";

Из-за этого (и особенностей Custom Buttons) инициализация выполнится дважды.
А document.getElementById(mPopid) вернет <menupopup>, созданный при повторной инициализации, так что заполнится дважды.


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№787919-08-2014 12:04:43

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

Re: Custom Buttons

Можно написать код, который бы результаты поиска Гугла по картинке мог сортировать пo дaтe?

Т. е. я захожу сюда нажимаю значок фотоаппарата, ввожу урл картинки и получаю много результатов.
Мне нужно расположить их по дaтe - сначала свежие, потом старше, или наоборот.

Отредактировано rbfyec (09-09-2014 13:10:56)

Отсутствует

 

№788006-09-2014 15:09:06

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

Re: Custom Buttons

Есть пара расширений которые иногда нужны на время, а держать их постоянно включенными не хочется. Приходится каждый раз открывать страницу аддонов, выбирать, перезапускать, закрывать страницу, потом чтобы отключить, всё повторять заново. Можно как то сделать кнопку, нажал, расширение включилось, автоматом браузер перегрузился, нажал, выключилось, перезагрузился и всё.


Лучше спросить у знающих - чем лезть не зная.

Отсутствует

 

№788107-09-2014 22:32:38

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

Re: Custom Buttons

villa7 пишет:

Есть пара расширений которые иногда нужны на время, а держать их постоянно включенными не хочется. Приходится каждый раз открывать страницу аддонов, выбирать, перезапускать, закрывать страницу, потом чтобы отключить, всё повторять заново. Можно как то сделать кнопку, нажал, расширение включилось, автоматом браузер перегрузился, нажал, выключилось, перезагрузился и всё.

Тебе нужна кнопка что бы переключить сразу несколько раширений или как?

Отсутствует

 

№788207-09-2014 23:45:18

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

Re: Custom Buttons

bunda1
Желательно по одному.
Визуальные закладки, удобно из контекстного иногда добавлять.
https://addons.mozilla.org/ru/firefox/a … bookmarks/
Иногда скачать видео, но если постоянно держать, то достают выскакивающие окошки.
http://www.internetdownloadmanager.com/ … ation.html
Иногда зайти на сайты когда не пускают по нормальному.
https://addons.mozilla.org/ru/firefox/addon/frigate/


Лучше спросить у знающих - чем лезть не зная.

Отсутствует

 

№788308-09-2014 10:54:20

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

Re: Custom Buttons

villa7
Создай кнопки с вот таким кодом:

Выделить код

Код:

AddonManager.getAddonsByTypes(["extension"], function(addons) { 
   addons.forEach(function(addon, i) {
      if ( addons[i].name == "DOM Inspector" )
           addons[i].userDisabled = !addons[i].userDisabled;     
   })
});    
Application.restart();

Вместо DOM Inspector поставь название своего расширения без номера версии.

Отсутствует

 

№788408-09-2014 11:59:41

voqabuhe
Участник
 
Группа: Members
Зарегистрирован: 06-12-2011
Сообщений: 2456
UA: Firefox 35.0

Re: Custom Buttons

bunda1 пишет:

Создай кнопки с вот таким кодом:

Я попробовал. Кнопка циклично перезапускает [nightly], раза четыре подряд, пока процесс не убил и не восстановился из backup. :)

Отсутствует

 

№788508-09-2014 12:49:28

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

Re: Custom Buttons

voqabuhe пишет:

Я попробовал. Кнопка циклично перезапускает [nightly], раза четыре подряд, пока процесс не убил и не восстановился из backup. :)

Ты наверно положил код в инициализацию.

Отсутствует

 

№788608-09-2014 13:15:02

voqabuhe
Участник
 
Группа: Members
Зарегистрирован: 06-12-2011
Сообщений: 2456
UA: Firefox 35.0

Re: Custom Buttons

bunda1 пишет:

Ты наверно положил код в инициализацию.

Ага.:dumb: Что ж ты сразу не предупредил?:) А за кнопочку спасибо, действительно удобно.

Отсутствует

 

№788708-09-2014 14:40:18

W@ld_Lii
Участник №315
 
Группа: Members
Зарегистрирован: 26-04-2009
Сообщений: 306
UA: Seamonkey 2.26
Веб-сайт

Re: Custom Buttons

Пересел с [firefox] на [seamonkey] и обнаружил, что не работает одна кнопка

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

Выделить код

Код:

//quick drag + dowload sort
//1. При перемещении выделенного текста, искать его в новой вкладке, с помощью текущего поисковика.
//2. При перемещении изображения, сохранять его в папку ~/Загрузки/DD.MM.YYYY (DD - текущий день, MM - текущий месяц, YYYY - текущий год).

location == "chrome://browser/content/browser.xul" && (function(event) {  
        var self = arguments.callee; 
        if ( !event ) {
             ["dragstart", "dragover", "drop"].forEach(function(type) { gBrowser.mPanelContainer.addEventListener(type, self, false) });
         
         addDestructor(function() {  
                     ["dragstart", "dragover", "drop"].forEach(function(type) { gBrowser.mPanelContainer.removeEventListener(type, self, false) }); 
                });
                 
              return;
              };
        
        switch (event.type) {
        case "dragstart":
                {
                        self.startPoint = [event.screenX, event.screenY];
                        self.sourceNode = event.target;
                        event.target.localName == "img" && event.dataTransfer.setData("application/x-moz-file-promise-url", event.target.src);
                        break;
                }
        case "dragover":
                {
                        self.startPoint && (Components.classes["@mozilla.org/widget/dragservice;1"].getService(Components.interfaces.nsIDragService).getCurrentSession().canDrop = true);
                        break;
                }
        case "drop":
                {
                        if (self.startPoint && event.target.localName != "textarea" && (!(event.target.localName == "input" && (event.target.type == "text" || event.target.type == "password"))) && event.target.contentEditable != "true") {
                                event.preventDefault();
                                event.stopPropagation();
                                var [subX, subY] = [event.screenX - self.startPoint[0], event.screenY - self.startPoint[1]];
                                var [distX, distY] = [(subX > 0 ? subX : (-subX)), (subY > 0 ? subY : (-subY))];
                                var direction;
                                var t = content.getSelection().toString();
                                if (distX > distY) direction = subX < 0 ? "L" : "R";
                                else direction = subY < 0 ? "U" : "D";                      
                               
                                
                                // Изображения ....
                                if ( event.dataTransfer.types.contains("application/x-moz-file-promise-url")) {
                                          // сохранить изображение или ссылку без запроса на место сохранения
                                          var img = event.dataTransfer.getData("application/x-moz-file-promise-url");
                                          //var path = "/home/wl/Загрузки/" + new Date().toLocaleFormat("%d.%m.%Y");
                                          var path = "/home/wl/Загрузки/image";
                                          // создать папку если не существует ....
                                          const file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
                                          file.initWithPath( path );
                                          if ( !file.exists() || !file.isDirectory() ) file.create(Components.interfaces.nsIFile.DIRECTORY_TYPE, 0777);
                                          Application.prefs.setValue("browser.download.useDownloadDir", true );
                                          Application.prefs.setValue("browser.download.dir", path );
                                          setTimeout(function() { saveImageURL( img, 0, 0, 0, 1, null, content.document) }, 100);
                                          //saveImageURL(event.dataTransfer.getData("application/x-moz-file-promise-url"), 0, 0, 0, 1, null, content.document);
                                          //возврат опции сохраниения Спрашивать куда сохр файл
                                          setTimeout(function() { Application.prefs.setValue("browser.download.useDownloadDir", false ) }, 200);
                                          return;                                                                           
                                     }
                                     
                                // Выделенный текст ....
                                if ( event.dataTransfer.getData("text/unicode") ) { 
                                     var sel = event.dataTransfer.getData("text/unicode");                              
                                          // поиск текста в текущем поисковике в новой активной странице
                                          var ss = Cc["@mozilla.org/browser/search-service;1"].getService(Ci.nsIBrowserSearchService);
                                          var submission = ss.currentEngine.getSubmission( sel, null );
                                          gBrowser.loadOneTab( submission.uri.spec, {relatedToCurrent: true, inBackground: true} );
                                          return;
                                     }                                  
                                self.startPoint = 0;
                        }
                }
        }
})();


Помогите, пожалуйста.


Браузер должен сам решать свои проблемы, а не возлагать их на пользователей. Minor

Отсутствует

 

№788808-09-2014 16:47:25

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

Re: Custom Buttons

bunda1
Ты не представляешь от каких неудобств меня избавил, нет честно, каждый раз лазить на страницу аддонов, чтобы просто тупо включить-отключить, муторно. Спасибо тебе большое.
Подумалось, вот бы ещё их объединить в одну кнопку с выпадающим списком, наподобие "Переключателя Jetpack-ов", цены бы не было, для тех кто не хочет держать постоянно включенными расширения, а лазить каждый раз на страницу аддонов лень.


Лучше спросить у знающих - чем лезть не зная.

Отсутствует

 

№788908-09-2014 17:51:02

xrun1
Участник
 
Группа: Members
Зарегистрирован: 12-12-2013
Сообщений: 582
UA: Firefox 32.0

Re: Custom Buttons

Может кто сможет сделать кнопку (инициализация), которая после поиска в searchbar вернёт поисковик по умолчанию и к этой кнопке прикрутить код из расширения Search on Engine Change? Т.е. идея такая: поискал, поисковик по умолчанию вернулся, но поле не очистилось --> выбрал другой поисковик из установленных и поиск начался автоматически (так было в Опере), а не как сейчас - нужно нажимать Enter или значок.
У bunda1 есть кнопка, но убрать очистку и прицепить код из расширения самостоятельно для меня нереально.
P.S. Ставить просто это расширение не особенно хочется, если не будет возвращаться поисковик по умолчанию.

Отсутствует

 

№789008-09-2014 18:17:59

rgdru
Участник
 
Группа: Members
Зарегистрирован: 07-04-2013
Сообщений: 36
UA: Firefox 24.0

Re: Custom Buttons

villa7
http://i68.fastpic.ru/thumb/2014/0908/48/3167b09259f9be5cc3cd1c8e4ff63448.jpeg
https://github.com/Infocatcher/Custom_Buttons/tree/master/Merge_Custom_Buttons

На форуме

 

№789108-09-2014 18:28:18

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

Re: Custom Buttons

villa7
Или где-то около такого минимума

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

Выделить код

Код:

var names = [

    "FireGestures",
    "DOM Inspector"
];

function addElement(name, attrs, parent) {
    var elm = document.createElement(name);
    for(var attr in attrs) elm.setAttribute(attr, attrs[attr]);
    return parent.appendChild(elm);
}
function isAddonDisabled(addon) {
    var ud = addon.userDisabled;
    var po = addon.pendingOperations;
    return Boolean(
        (ud && !(po & AddonManager.PENDING_DISABLE)) ||
        (!ud && po & AddonManager.PENDING_ENABLE)
    );
}
var popup = this.firstChild;
if (!popup) {
    popup = addElement("menupopup", {
        id: _id + "popup",
        position: "after_start",
        oncontextmenu: "return false",
        oncommand: "event.stopPropagation(); this.toggle(event);",
        onpopupshown: "this.decDisabled();"
    }, this);
    popup.toggle = function(e) {
        var node = e.target;
        if (node == popup) return;
        var addon = node.addon;
        var ud = addon.userDisabled;

        var po = addon.pendingOperations;
        var toggle = 
            (ud && !(po & AddonManager.PENDING_DISABLE)) ||
            (!ud && !(po & AddonManager.PENDING_ENABLE));
        if (toggle) ud = addon.userDisabled = !ud;

        var rr = addon.operationsRequiringRestart;
        var restart =
            (ud && rr & AddonManager.OP_NEEDS_RESTART_DISABLE) ||
            (!ud && rr & AddonManager.OP_NEEDS_RESTART_ENABLE);
        restart && Application.restart();
    }
    popup.decDisabled = function() {
        for(var menuitem of popup.childNodes) {
            if (menuitem.getAttribute("addondisabled") == "false") continue;
            var [imgBox, lab, accBox] = document.getAnonymousNodes(menuitem);
            imgBox.firstChild.style.cssText = '\
                filter: url("chrome://mozapps/skin/extensions/extensions.svg#greyscale");\
                opacity: 0.5;\
            ';
            lab.style.cssText = '\
                color: grey;\
                opacity: 0.7;\
            ';
        }
    }
}
popup.textContent = "";
AddonManager.getAddonsByTypes(["extension"], addons => {
    var data = {};
    for(var addon of addons) {
        var name = addon.name;
        if (name) data[name] = addon;
    }
    for(name of names) {
        if (!(name in data)) continue;
        var addon = data[name];
        var menuitem = addElement("menuitem", {
            label: name,
            id: _id + "-" + addon.id,
            class: "menuitem-iconic",
            addondisabled: isAddonDisabled(addon),
            image: addon.iconURL || addon.icon64URL || "chrome://mozapps/skin/extensions/extensionGeneric-16.png"
        }, popup);
        menuitem.addon = addon;
    }
    popup.openPopup(self);
});


W@ld_Lii
Для начала, нужно удалить из первой строки кода
location == "chrome://browser/content/browser.xul" &&

Отсутствует

 

№789208-09-2014 19:48:29

W@ld_Lii
Участник №315
 
Группа: Members
Зарегистрирован: 26-04-2009
Сообщений: 306
UA: Seamonkey 2.26
Веб-сайт

Re: Custom Buttons

Dumby пишет:

W@ld_Lii
Для начала, нужно удалить из первой строки кода
location == "chrome://browser/content/browser.xul" &&

Удалил, работает нормально до перезапуска браузера, после перезапуска отрабатывает дважды, т.е. при перетаскивании текста открывается 2 вкладки и картинки сохраняются дважды, причём игнорируется var path = "/home/wl/Загрузки/image"

Отредактировано W@ld_Lii (08-09-2014 19:58:50)


Браузер должен сам решать свои проблемы, а не возлагать их на пользователей. Minor

Отсутствует

 

№789308-09-2014 19:57:26

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

Re: Custom Buttons

villa7 пишет:

bunda1
Ты не представляешь от каких неудобств меня избавил, нет честно, каждый раз лазить на страницу аддонов, чтобы просто тупо включить-отключить, муторно. Спасибо тебе большое.
Подумалось, вот бы ещё их объединить в одну кнопку с выпадающим списком, наподобие "Переключателя Jetpack-ов", цены бы не было, для тех кто не хочет держать постоянно включенными расширения, а лазить каждый раз на страницу аддонов лень.

Сделать могу, но лучше попроси Infocatcher что бы он добавил такую возможность в Toggle Restartless Add-ons.

Отсутствует

 

№789408-09-2014 20:42:45

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

Re: Custom Buttons

W@ld_Lii пишет:

после перезапуска отрабатывает дважды

Тогда попробуй заменить первую строку кода на
self.hasAttribute("initialized") || (function(event) {

Отсутствует

 

№789508-09-2014 21:55:16

W@ld_Lii
Участник №315
 
Группа: Members
Зарегистрирован: 26-04-2009
Сообщений: 306
UA: Seamonkey 2.26
Веб-сайт

Re: Custom Buttons

Dumby, огромное Вам спасибо!!! Всё работает!!!:beer::rock::beer::rock:


Браузер должен сам решать свои проблемы, а не возлагать их на пользователей. Minor

Отсутствует

 

№789608-09-2014 22:30:30

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

Re: Custom Buttons

xrun1 пишет:

Может кто сможет сделать кнопку (инициализация), которая после поиска в searchbar вернёт поисковик по умолчанию и к этой кнопке прикрутить код из расширения Search on Engine Change? Т.е. идея такая: поискал, поисковик по умолчанию вернулся, но поле не очистилось --> выбрал другой поисковик из установленных и поиск начался автоматически (так было в Опере), а не как сейчас - нужно нажимать Enter или значок.
У bunda1 есть кнопка, но убрать очистку и прицепить код из расширения самостоятельно для меня нереально.
P.S. Ставить просто это расширение не особенно хочется, если не будет возвращаться поисковик по умолчанию.

Выделить код

Код:

(function () { 
   var searchbar = document.getElementById("searchbar");

   var getEngineModified = {
      observe: function(subject, topic, data) {
         if ( data == "engine-current" && searchbar.textbox.value.length && Services.search.currentEngine.name != "Яндекс" )
              searchbar.textbox.onTextEntered();            
      }
   };
   Services.obs.addObserver( getEngineModified, "browser-search-engine-modified", false );

   var src = "BrowserSearch.searchBar.handleSearchCommand = " + BrowserSearch.searchBar.handleSearchCommand.toString(),
       res = src.replace("{", '{\nsetTimeout(function() Services.search.currentEngine = Services.search.getEngineByName("Яндекс"), 500)');
   eval(res);
   
   addDestructor(function() {
      eval(src);
      Services.obs.removeObserver( getEngineModified, "browser-search-engine-modified", false );
   })   
})();

Отсутствует

 

№789708-09-2014 22:48:46

xrun1
Участник
 
Группа: Members
Зарегистрирован: 12-12-2013
Сообщений: 582
UA: Firefox 32.0

Re: Custom Buttons

bunda1
Спасибо, работает отлично! Это то, чего мне не хватало после перехода с [opera].
:offtopic: Поисковиков у меня много, например, несколько музыкальных. И было неудобно после каждого поиска заново вбивать название песни, а теперь раз вбил и сиди, выбирай поисковики! И поиск по умолчанию не слетает. :beer:

Отсутствует

 

№789808-09-2014 22:51:33

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

Re: Custom Buttons

bunda1
Отбой, Dumby уже подогнал то что нужно. Спасибо вам обоим!

Отредактировано villa7 (08-09-2014 23:07:26)


Лучше спросить у знающих - чем лезть не зная.

Отсутствует

 

№789908-09-2014 23:39:42

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

Re: Custom Buttons

Dumby
bunda1
Всё замечательно настроилось, есть один маленький нюанс, у меня все кнопки с меню раскрываются наведением, а на эту №8812 нужно нажимать, непривычно, можно что то сделать?

Отредактировано villa7 (08-09-2014 23:46:48)


Лучше спросить у знающих - чем лезть не зная.

Отсутствует

 

№790009-09-2014 03:20:37

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

Re: Custom Buttons

villa7 пишет:

у меня все кнопки с меню раскрываются наведением, а на эту №8812 нужно нажимать

В Инициализацию

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

Выделить код

Код:

this.onmouseenter = () => this.firstChild && this.firstChild.state == "open" || this.click();


скрытый текст
Только не говори, что у тебя еще и
все кнопки с меню закрываются отведением.
Тогда уж лучше бы её вообще небыло :/.

Выделить код

Код:

var delayOpen = 250;
var delayClose = 500;

var timeoutOpen, timeoutClose;
function isOpen(btn) btn.firstChild && btn.firstChild.state == "open";
function open(btn) isOpen(btn) || btn.click();
function close(btn) isOpen(btn) && btn.firstChild.hidePopup();
this.onmouseenter = () => timeoutOpen = clearTimeout(timeoutClose) || setTimeout(open, delayOpen, this);
this.onmouseleave = () => timeoutClose = clearTimeout(timeoutOpen) || setTimeout(close, delayClose, this);

Отредактировано Dumby (09-09-2014 05:40:43)

Отсутствует

 

Board footer

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