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

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

№780128-05-2014 22:04:12

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

Re: Custom Buttons

rbfyec
А, я что-то подумал, нужно сделать задержку перед началом прокрутки.

rbfyec пишет

Вроде работает. Или не то?

А какой тогда еще критерий применять? :D Раз работает, значит то.
Ну, и смотря чей это документ. Если чужой, то лучше через addEventListener/removeEventListener:

Выделить код

Код:

window.addEventListener("wheel", function onWheel(e) {
    // ...
    setTimeout(function() {
        window.removeEventListener("wheel", onWheel, false);
    }, 1000);
}, false);

И, по идее, для удаления лучше делать document.onwheel = null (я, впрочем, не уверен, есть ли на это дело документация).


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

Отсутствует

 

№780228-05-2014 23:34:52

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

Re: Custom Buttons

Infocatcher пишет

смотря чей это документ. Если , то лучше через addEventListener/removeEventListener

А что значит "чужой" документ? В каком смысле он может быть чужим?

Отсутствует

 

№780306-06-2014 11:42:45

Inko7
Участник
 
Группа: Members
Зарегистрирован: 09-11-2009
Сообщений: 1008
UA: Firefox 24.0

Re: Custom Buttons

Люди, помогите решить такую задачу (если возможно). Просто достало уже дальше некуда...
После январского обновления AdBlock Plus регулярно начала пропадать его иконка (кнопка) с панели дополнений. С чем связано, выяснить не удалось. Такая проблема встречается и у других людей. Ответа по данному вопросу в теме адблока я не получил. Возвращаться на последнюю рабочую версию 2.4 не вариант. Решил побороть эту напасть кардинально.

заметил, что слетает вот эта галка в настройках AdBlock
52e590f7a8ef.jpg

Этой требуемой настройки в about:config нет...
Поэтому, помогите реализовать следующую задумку: после старта браузера, можно даже не проверяя текущее состояние этой галки, устанавливать ее в состояние "включено".
Custom Buttons моя последняя надежда :)

Отсутствует

 

№780406-06-2014 11:58:49

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

Re: Custom Buttons

Inko7 пишет

После январского обновления AdBlock Plus регулярно начала пропадать его иконка (кнопка) с панели дополнений.

А ты AdBlock Plus обновил до версии 2.6.3?

Отсутствует

 

№780506-06-2014 12:44:20

Inko7
Участник
 
Группа: Members
Зарегистрирован: 09-11-2009
Сообщений: 1008
UA: Firefox 24.0

Re: Custom Buttons

voqabuhe
да, слетать стало еще чаще :|

Отсутствует

 

№780606-06-2014 13:08:38

Inko7
Участник
 
Группа: Members
Зарегистрирован: 09-11-2009
Сообщений: 1008
UA: Firefox 24.0

Re: Custom Buttons

okkamas_knife
я ж говорю, там нет явного параметра в about:config отвечающего за это...

Отсутствует

 

№780706-06-2014 14:48:03

Inko7
Участник
 
Группа: Members
Зарегистрирован: 09-11-2009
Сообщений: 1008
UA: Firefox 24.0

Re: Custom Buttons

Это не тот параметр.
Или он не работает:
хоть true, хоть false пофиг иконка не появляется
и если самому переключать галку, то значение этого параметра не меняется

Отсутствует

 

№780806-06-2014 15:17:24

Inko7
Участник
 
Группа: Members
Зарегистрирован: 09-11-2009
Сообщений: 1008
UA: Firefox 24.0

Re: Custom Buttons

именно так по аналогии и смотрел!
я не настолько глуп, чтобы вначале не пересмотреть все похожие настройки...
за 4 года на форуме чему-то смог научится, тем более как использовать CB для работы с about:config
здесь же нужно копнуть поглубже, может как-то отследить эту галку через dom inspector
так что теоретические усилия я прикладываю, а вот в практических прошу помощи

Отсутствует

 

№780906-06-2014 16:15:36

Inko7
Участник
 
Группа: Members
Зарегистрирован: 09-11-2009
Сообщений: 1008
UA: Firefox 24.0

Re: Custom Buttons

okkamas_knife
а откуда ж он будет брать гет.элемент.байИД ??
для этого ж должна быть открыта страница настроек

Отсутствует

 

№781006-06-2014 17:14:17

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

Re: Custom Buttons

Inko7 пишет

Поэтому, помогите реализовать следующую задумку: после старта браузера, можно даже не проверяя текущее состояние этой галки, устанавливать ее в состояние "включено".

Для этого придется открывать страницу настроек, потому что это не настройка, а состояние панели инструментов.

Можно вот такое попробовать:

Выделить код

Код:

setTimeout(function() {
    var abpURL = Components.classes["@adblockplus.org/abp/public;1"]
        .getService(Components.interfaces.nsIURI);
    var global = Components.utils.import(abpURL.spec, {});
    var UI = global.require("ui").UI;
    if(!UI.isToolbarIconVisible())
        UI.toggleToolbarIcon();
}, 0);

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

Отсутствует

 

№781106-06-2014 17:46:56

Inko7
Участник
 
Группа: Members
Зарегистрирован: 09-11-2009
Сообщений: 1008
UA: Firefox 24.0

Re: Custom Buttons

Infocatcher
РАБОТАЕТ!!!!
Спасибо :beer:

Отсутствует

 

№781207-06-2014 21:33:23

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

Re: Custom Buttons

Вопрос знающим людям как получить адрес иконки сайта через new XMLHttpRequest()

Выделить код

Код:

var xhr = new XMLHttpRequest();
xhr.open("GET", "http://forum.mozilla-russia.org/", true);
xhr.onreadystatechange = function() {
    var data = xhr.responseText;
    LOG(data)
};
xhr.send();

Отсутствует

 

№781307-06-2014 23:10:08

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

Re: Custom Buttons

Спасибо. Да LINK и shortcut icon указывают на иконку сайа но почему на https://forum.mozilla-russia.org/ я их не нахожу. Мистика :/

Отредактировано bunda1 (07-06-2014 23:10:34)

Отсутствует

 

№781407-06-2014 23:32:23

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

Re: Custom Buttons

okkamas_knife пишет

ну он обычно стандартный http://site.ru/favicon.ico
если в ответ прилетает 404 то придется загрузить страницу и посмотреть там

Так не пойдет, в корне сайта может лежать что угодно, тогда как браузер покажет иконку из <link rel="icon" ...
И сперва есть смысл проверить, нет ли иконки в кэше (но если страница не была открыта ранее, то иконки не будет :():
https://developer.mozilla.org/en-US/doc … Page%28%29

Выделить код

Код:

//var faviconService = Components.classes["@mozilla.org/browser/favicon-service;1"]
//    .getService(Components.interfaces.mozIAsyncFavicons);
var faviconService = PlacesUtils.favicons;
var pageURI = content.document.documentURIObject;
faviconService.getFaviconURLForPage(pageURI, {
    onComplete: function(uri, dataLen, data, mimeType) {
        alert(uri && uri.spec);
    }
});

(это для текущей вкладки; для приватных окон, кстати, не работает, хотя в атрибуте image вкладки все есть)

И вот какой-то пример с загрузкой страницы:

Выделить код

Код:

var xhr = new XMLHttpRequest();
xhr.open("GET", "https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest", true);
xhr.responseType = "document";
xhr.onload = xhr.onerror = function() {
    var doc = xhr.responseXML;
    if(!doc) {
        alert("Error!\nStatus: " + xhr.status + " " + xhr.statusText);
        return;
    }
    var links = doc.getElementsByTagName("link");
    for(var i = 0, l = links.length; i < l; ++i) {
        var link = links[i];
        if(/(?:^|\s)icon(?:\s|$)/.test(link.getAttribute("rel"))) {
            alert(link.href);
            return;
        }
    }
    alert("<link> not found, /favicon.ico ?");
};
xhr.send();

Но иконку можно еще скриптом задавать (вот пример)...


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

Отсутствует

 

№781507-06-2014 23:48:12

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

Re: Custom Buttons

Infocatcher
Вот спасибо, это то что нужно, хочу сделать код который восстанавливает иконки у закладок без загрузки вкладок. Там где new XMLHttpRequest(); не сработает буду использовать как адрес иконки "http://www.google.com/s2/u/0/favicons?domain=" + domain; или 'http://favicon.yandex.net/favicon/' + domain; хотя тут могут быть проблемы, я не знаю как браузер к этому отнесётся :/

Отредактировано bunda1 (07-06-2014 23:56:44)

Отсутствует

 

№781608-06-2014 03:03:04

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

Re: Custom Buttons

И есть готовое решение FavIcon Reloader. Можно в нём посмотреть, как реализовано.

Отсутствует

 

№781708-06-2014 03:38:03

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

Re: Custom Buttons

okkamas_knife пишет

1 достаточно открыть одну страницу с домена чтоб все остальные иконки с того же домена восстановились

Интересно, на FF24 такое не наблюдаю. Конечно особого смысла в таком коде мало но иногда он нужен.

xrun1 пишет

И есть готовое решение FavIcon Reloader. Можно в нём посмотреть, как реализовано.

Спасибо :)

Отсутствует

 

№781808-06-2014 12:01:55

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

Re: Custom Buttons

Вопрос знающим людям :blush:
Как отсортировать массив объектов placesList по свойству uri так что бы объекты с одинаковыми доменами uri.split(/\/+/g)[1] были по группам в массиве, а эти группы были отсортированы по свойству title в алфавитном порядке placesList.sort(function(a, b) a.title.localeCompare(b.title, {sensitivity: "base"}));

Мучаюсь с этим уже который час и не могу придумать решение :(

Отсутствует

 

№781908-06-2014 13:16:22

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

Re: Custom Buttons

okkamas_knife
Вот это да, даже рисунок. Мысль понял, теперь буду думать как сделать это технически:

Отсутствует

 

№782008-06-2014 14:24:47

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

Re: Custom Buttons

okkamas_knife пишет

да там нюанс есть если ты удаляешь элемент z то в следующей итерации i должно остаться темже т.к. элементы сдвинутся и z = z[i+1] из прошлой итерации вобщем увеличивай счетчик только когда не удаляешь элемент.

Странно, но почему:     

Выделить код

Код:

placesList.forEach(function(node, i) { if (PlacesUtils.nodeIsFolder(node)) { placesList.splice(i,1) } });

удаляет не все папки из массива. Проблема в .splice(i,1)

Отредактировано bunda1 (08-06-2014 14:26:46)

Отсутствует

 

№782108-06-2014 15:29:07

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

Re: Custom Buttons

Упс, проблема в том при вызове splice массив уменьшается и удаляется текущий, i-й элемент, и на место сдвигаюется новый, непроверенный элемент, которого цикл уже не проверит. Надо уменшить i после вызова splice

Выделить код

Код:

for ( i = 0; i < placesList.length; ++i ) {
            if ( PlacesUtils.nodeIsFolder(placesList[i]) ) {
                 placesList.splice(i, 1);
                 i--;
                 }
            } 
      alert(placesList.length);

Добавлено 08-06-2014 15:31:44

именно поэтому я и написал про while тк со слайсом forEach будет некорректен.

да while но for привычней.

Добавлено 08-06-2014 15:42:27
Ну а далше:

Выделить код

Код:

var item = placesList[0];      
      for ( var array = [], i = 0; i < placesList.length; i++ ) { 
            if ( item.uri.split(/\/+/g)[1] == placesList[i].uri.split(/\/+/g)[1] ) {
                 array.push( placesList[i] );
                 placesList.splice(i, 1);
                 i--;
                 }
            }
      alert(array.map(function(item) item.uri ).join("\n")); // проверка

Теперь надо придумать как заново вызвать цикл и объединить массивы.

Отредактировано bunda1 (08-06-2014 15:42:27)

Отсутствует

 

№782208-06-2014 18:18:29

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

Re: Custom Buttons

Может кому надо:

Выделить код

Код:

// Добавить новый пункт "Сортировать по домену и названию" в меню папок закладок, от 08.06.2014. ................................
(function() {
   var menuitem = document.createElement("menuitem");
   menuitem.id = "placesContext_sortBy:locationAndName";
   menuitem.setAttribute("label", "Сортировать по домену и названию");
   menuitem.setAttribute("selection", "folder");
   menuitem.setAttribute("closemenu", "single");   
  
   menuitem.setAttribute("oncommand", "this.run(document);"); // если клик или команда на пункте меню
   menuitem.run = function(doc) {
      // создать массив с пунктами меню папки закладок
      var view = PlacesUIUtils.getViewForNode( doc.popupNode );
      var folderId = view.selectedNode.itemId;           
      var contents = PlacesUtils.getFolderContents( folderId, false, false ).root;
      for ( var placesList = [], i = 0; i < contents.childCount; ++i ) { 
            placesList.push( contents.getChild(i) );
            }

      // удалить разделители из меню закладок и массива
      for ( i = 0; i < placesList.length; i++ ) {
            if ( PlacesUtils.nodeIsSeparator(placesList[i]) ) {
                 PlacesUtils.bookmarks.removeItem( placesList[i].itemId );
                 placesList.splice(i, 1);
                 i--;
                 }
            }  

      // создать новый массив, добавить туда отсортированные по алфавиту папки и удалить папки из массива
      var newPlacesList = placesList.filter(function(node) { return PlacesUtils.nodeIsFolder(node) });
      newPlacesList.sort(function(a, b) a.title.localeCompare(b.title, {sensitivity: "base"}));      
      for ( i = 0; i < placesList.length; i++ ) {
            if ( PlacesUtils.nodeIsFolder( placesList[i] ) ) {
                 placesList.splice(i, 1);
                 i--;
                 }
            } 
      
      // добавить в новый массив отсортированные по алфавиту группы закладок по доменами и удалить всё из массива
      function sortForDomain() {
         try { var host = placesList[0].uri.split(/\/+/g)[1] } catch(e) { return; };

         for ( var array = [], i = 0; i < placesList.length; i++ ) { 
               if ( placesList[i].uri.split(/\/+/g)[1] == host ) {
                    array.push( placesList[i] );
                    placesList.splice(i, 1);
                    i--;
                    }
               }
         array.sort(function(a, b) a.title.localeCompare(b.title, {sensitivity: "base"}));
         newPlacesList = newPlacesList.concat( array );         
         
         if ( placesList.length > 0 ) sortForDomain();         
      };
      sortForDomain();
       
      // изменить меню закладок в соответствии с новым отсортированным массивом 
      let callback = {
             runBatched: function() {
                for( let i = 0; i < newPlacesList.length; ++i) {
                     PlacesUtils.bookmarks.setItemIndex( newPlacesList[i].itemId, i );
                     }
             }
      };
      PlacesUtils.bookmarks.runInBatchMode( callback, null ); 
   };
   
  
   // добавлять новый пункт в меню во все меню папок закладок ....
   addEventListener("popupshowing", function(e) {    
      var node = e.target;
      if ( node.id !== 'placesContext' ) return;
      
      var sortByName = node.getElementsByAttribute("id", "placesContext_sortBy:name")[0];    
      setTimeout(function() { menuitem.setAttribute("disabled", sortByName.disabled ) }, 0)
      
      node.insertBefore( menuitem, sortByName );            
      addDestructor(function() { node.removeChild( menuitem ) });      
   }, true, window );  
   
})();

Отредактировано bunda1 (08-06-2014 18:22:38)

Отсутствует

 

№782308-06-2014 22:39:02

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

Re: Custom Buttons

Как называется функция которая вызывается по ПКМ на кнопке - я попробывал поискать и не смог найти ни её ни передаваемых параметров.

Мне нужно её именно вызывать на прямую, а не просто по ПКМ.

Отредактировано Indomito (11-06-2014 08:50:17)


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

Отсутствует

 

№782408-06-2014 23:10:19

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

Re: Custom Buttons

Обычное ПКМ по кнопке Выдаёт меню(выпадающее). Как его вызвать принудительно без нажатия ПКМ по кнопке.


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

Отсутствует

 

№782508-06-2014 23:24:57

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

Re: Custom Buttons

Indomito пишет

Обычное ПКМ по кнопке Выдаёт меню(выпадающее). Как его вызвать принудительно без нажатия ПКМ по кнопке.

Выделить код

Код:

gShowPopup(this);

:)

Отсутствует

 

Board footer

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