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

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

№108-02-2016 14:05:54

pag77
Участник
 
Группа: Extensions
Зарегистрирован: 20-03-2012
Сообщений: 1657
UA: Firefox 44.0

[MenuWizard] Загрузить/Восстановить значки сайтов в закладках

Это готовое решение для аддона "Menu Wizard"
Только для Firefox 48 и ниже!

https://addons.mozilla.org/addon/s3menu-wizard/
https://forum.mozilla-russia.org/viewtopic.php?id=63252

Время от времени в закладках пропадают иконки для сайтов, например после синхронизации закладок через Firefox-синхронизация
Данное решение восстановит значки - при каждом открытии закладок будет проверятся наличие значка для того или иного сайта и тут же пытаться его восстановить.

Установка:

  1. Установите Menu Wizard, если его еще нет в вашем браузере
  2. Откройте настройки Menu Wizard: "Инструменты > Menu Wizard", "Дополнения > Menu Wizard > Настройки" или введите в строку адреса about:config-menu
  3. Раскройте меню "Панель меню"
  4. Откройте свойства у "Закладки"
    dfcdd24cd38b.png
  5. В поле "Команда > onPopupShowing" вставьте этот код:

    Выделить код

    Код:

    this.check_icons = function(event) {
        var menu_popup = event.target;
        var menu_items = menu_popup.childNodes;
        for (var i=0; i<menu_items.length; i++) {
            var menu = menu_items[i];
            if ((menu.localName == 'menuitem') && (menu._placesNode)) {
                var place = menu._placesNode;
                if ((place.icon == '') && (/^https?\:\/\//.test(place.uri))) {
                    this.get_icon_html(place.uri);
                }
            }
        }
    }
    this.get_icon = function(page_url) {
        var favicon_url = /^https?\:\/\/[^\/]+/i.exec(page_url);
        if (! favicon_url) { return; }
    
        favicon_url = favicon_url[0] + '/favicon.ico';
    
        var req = new XMLHttpRequest();
        var self = this;
        req.onreadystatechange = function () {
            if (req.readyState == 4) {
                if (req.status == 200) {
                    self.set_icon(page_url, favicon_url);
                }
            }
        };
    
        req.open("GET", favicon_url, true);
        req.send(null);
    }
    this.get_icon_html = function(page_url) {
        var req = new XMLHttpRequest();
        var self = this;
        req.onreadystatechange = function () {
            if (req.readyState == 4) {
                if (req.status == 200) {
                    var favicon_url = self.icon_parse_html(page_url, req.responseText);
                    if (favicon_url) {
                        self.set_icon(page_url, favicon_url);
                    } else {
                        self.get_icon(page_url);
                    }
                } else {
                    self.get_icon(page_url);
                }
            }
        };
    
        req.open("GET", page_url, true);
        req.send(null);
    }
    this.icon_parse_html = function(page_url, responseText) {
        responseText = responseText.replace(/<\!\-\-.*?\-\->/g, '');
        var RegEx_head = /<head.*>[\s\S]+<\/head>/i;
        var RegEx_base = /<base\s*href\s*=\s*"(.*)"\s*>/i;
        var RegEx_link = /<link[\s\S]+?>/gi;
        var RegEx_rel_sicon = /rel[\s]*?=[\s]*?["\'][\s]*?(?:shortcut)[\s]*?icon[\s]*?["\']/i;
        var RegEx_rel_icon = /rel[\s]*?=[\s]*?["\'][\s]*?icon[\s]*?["\']/i;
        var RegEx_href = /href[\s]*?=[\s]*?["\'](.+?)[\s]*?["\']/i;
    
        var head = RegEx_head.exec(responseText);
        var base = RegEx_base.exec(head);
        var link = '';
        var href = '';
    
        var nsIIOService = Components.classes["@mozilla.org/network/io-service;1"].getService(Components.interfaces.nsIIOService);
        var PageURI = nsIIOService.newURI(page_url, null, null);
    
        var resolvedPageURI = PageURI;
        var FavIconURL = "";
    
        if (base !== null) {
            resolvedPageURI = nsIIOService.newURI(PageURI.resolve(base[1]), null, null);
        }
        while ((link = RegEx_link.exec(head)) !== null) {
            if (RegEx_rel_sicon.test(link) === true) {
                href = RegEx_href.exec(link);
                if (href !== null) {
                    FavIconURL = href[1];
                    break;
                }
            }
            RegEx_link.lastIndex;
        }
    
        RegEx_link.lastIndex = 0;
        if (FavIconURL === "") {
            while ((link = RegEx_link.exec(head)) !== null) {
                if (RegEx_rel_icon.test(link) === true) {
                    href = RegEx_href.exec(link);
                    if (href !== null) {
                        FavIconURL = href[1];
                        break;
                    }
                }
                RegEx_link.lastIndex;
            }
        }
        RegEx_link.lastIndex = 0;
        if (FavIconURL) {
            FavIconURL = resolvedPageURI.resolve(FavIconURL);
        }
        return FavIconURL;
    }
    this.set_icon = function(page_url, favicon_url) {
        var faviconService = Components.classes["@mozilla.org/browser/favicon-service;1"].getService(Components.interfaces.nsIFaviconService);
    
        var nsIIOService = Components.classes["@mozilla.org/network/io-service;1"].getService(Components.interfaces.nsIIOService);
        faviconService.setAndFetchFaviconForPage(nsIIOService.newURI(page_url, null, null), nsIIOService.newURI(favicon_url, null, null), false, faviconService.FAVICON_LOAD_NON_PRIVATE);
    }
    this.setAttribute("onpopupshown", "this.check_icons(event)");

  6. Нажмите "Применить"

PS:
Что бы протестировать код, можно воспользоваться аддоном для удаления значков: Delete Bookmark Icons
Небольшой кусок кода заимствован из аддона: FavIcon Reloader

Отредактировано pag77 (19-10-2016 21:18:12)

Отсутствует

 

№209-02-2016 00:56:19

Sergeys
Administrator
 
Группа: Administrators
Откуда: Moscow, Russia
Зарегистрирован: 23-01-2005
Сообщений: 13927
UA: Firefox 44.0
Веб-сайт

Re: [MenuWizard] Загрузить/Восстановить значки сайтов в закладках

Достаточно одной темы
https://forum.mozilla-russia.org/viewtopic.php?id=63252


Через сомнения приходим к истине. Цицерон

Отсутствует

 

№319-10-2016 18:21:00

stvol
Участник
 
Группа: Members
Зарегистрирован: 17-09-2013
Сообщений: 377
UA: Firefox 49.0

Re: [MenuWizard] Загрузить/Восстановить значки сайтов в закладках

pag77 пишет

Данное решение восстановит значки

Что-то не восстанавливает! Или надо каждую вкладку отдельно открывать, тогда какой смысл?


Отсутствует

 

№419-10-2016 21:19:23

pag77
Участник
 
Группа: Extensions
Зарегистрирован: 20-03-2012
Сообщений: 1657
UA: Firefox 49.0

Re: [MenuWizard] Загрузить/Восстановить значки сайтов в закладках

stvol пишет
pag77 пишет

Данное решение восстановит значки

Что-то не восстанавливает! Или надо каждую вкладку отдельно открывать, тогда какой смысл?

к сожалению в 49 firefox что-то намудрили - методы существуют, но не работают.
поэтому данное решение на данный момент только для FF 48 и ниже.

Отсутствует

 

Board footer

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