shadow_member
Platinum Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Кнопка для Custom Buttons, добавляет в меню "Закладки" на панели меню новый пункт "Восстановить иконки всех закладок" который восстанавливает иконки всех закладок у которых нет иконок. Код полезен в случаях если закладок очень много а иконки пропали и вручную их восстанавливать долго. Использование: положите код в любую Custom Buttons кнопку, в инициализацию. Не обязательно создавать новую CB кнопку, можно использовать любую уже существующую!!!, это очень здорово! Что интересно, для появления пункта в меню кнопку нужно вытащить на панель инструментов. При клике на самой кнопке будет выполняться ее основное действие, например, старт PingPlotter, а при клике на пункте меню обновляются иконки закладок. https://forum.mozilla-russia.org/viewtopic.php?id=64428 Код: -------------------------------------------------- // Добавить новый пункт "Восстановить иконки всех закладок" в меню "Закладки", от 02.08.2014. ................................ (function() { // Создать новый пункт в меню .... var menuitem = document.createElement("menuitem"); menuitem.setAttribute("label", "Восстановить иконки всех закладок"); var sep = document.getElementById("organizeBookmarksSeparator"); sep.parentNode.insertBefore( menuitem, sep ); addDestructor(function() { sep.parentNode.removeChild( menuitem ) }); addEventListener("click", function() chooseBookmarks(1), false, menuitem ); // если клик на пункте меню // Перебрать все http(s) закладки .... function chooseBookmarks( id ) { var folder = PlacesUtils.getFolderContents( id ).root; folder.QueryInterface(Ci.nsINavHistoryContainerResultNode); folder.containerOpen = true; for ( var i = 0; i < folder.childCount; i++ ) { var child = folder.getChild(i); PlacesUtils.nodeIsFolder( child ) ? chooseBookmarks( child.itemId ) : child.uri.startsWith("http") && child.icon == '' && getSiteFavicon( child.uri ); } folder.containerOpen = false; }; // Добавить иконки к закладкам с одинаковыми адресами .... function setBookFavicon( faviconURI, siteURI ) { var iconURI = Services.io.newURI( faviconURI, null, null); var bookmarkURI = Services.io.newURI( siteURI, null, null ); var faviconService = Cc["@mozilla.org/browser/favicon-service;1"].getService(Ci.mozIAsyncFavicons); faviconService.setAndFetchFaviconForPage( bookmarkURI, iconURI, false, faviconService.FAVICON_LOAD_NON_PRIVATE ) }; // Получить адрес иконки закладки и запустить установку иконки .... function getSiteFavicon( siteURI ) { var hostURI = "http://" + siteURI.split(/\/+/g)[1] + "/"; var faviconURI = hostURI + "favicon.ico"; // адрес иконки, если не получить адрес иконки из сайта if ( getSiteFavicon[siteURI] ) return; // стоп если закладка с таким адресом уже была getSiteFavicon[siteURI] = true; // получить адрес иконки из документа сайта закладки var xhr = new XMLHttpRequest(); xhr.open("GET", siteURI, true); xhr.responseType = "document"; xhr.onload = xhr.onerror = function() { var doc = xhr.responseXML; if ( doc !== null ) { var links = doc.getElementsByTagName("link"); [...links].forEach(function(link) { if ( /(?:^|\s)icon(?:\s|$)/.test(link.rel.toLowerCase()) ) faviconURI = link.href }); } setBookFavicon( faviconURI, siteURI ); // запустить установку иконки } xhr.send(); }; })(); -------------------------------------------------- |