StrangewaysЦитата: почему иконка этого форума (ру борд) не отображается, просто квадратик.
Поможет ли, не знаю, но у меня это исправляет все невалидные иконки.
Должно быть установлено расширение Custom Buttons и в нем создана любая кнопка, лучше, конечно, полезная.
[more=А далее очень подробно:]Кнопка для 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();
};
})();
--------------------------------------------------[/more]
Очень быстро проверяет и восстанавливает иконки, работает превосходно!