>Форум Mozilla Россия http://forum.mozilla-russia.org/index.php >Сustom Buttons http://forum.mozilla-russia.org/viewforum.php?id=34 >[CB]Открыть все закладки из одного сайта http://forum.mozilla-russia.org/viewtopic.php?id=70362 |
bunda1 > 08-08-2016 20:50:48 |
Открыть все закладки из одного сайта( Firefox 24 + ) Выделить код Код:// Открыть все закладки из одного сайта, от 03.08.2016. .................. (()=> { var deletePlaces = false; // удалять закладки var notLoading = true; // открывать закладки не загружая страниц var showAlert = false; // показать в сообщение количество открытых закладок var maxOpenBook = 30; // максимальное количество одновременно открываемых закладок var library = "chrome://browser/content/places/places.xul"; var alertsService = Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService); // Создать новый пункт в контекстном меню закладок .... function setMenuitem(doc) { var sep = doc.getElementById("placesContext_openSeparator"); var con = doc.getElementById('placesContext'); var mItem = con.insertBefore(document.createElement("menuitem"), sep); mItem.setAttribute("label", "Открыть все закладки из одного сайта"); //mItem.setAttribute("class", "menuitem-iconic"); //mItem.setAttribute("src", "chrome://custombuttons/skin/stdicons/rbutton.png"); mItem.setAttribute("selectiontype", "any"); mItem.setAttribute("hideifnoinsertionpoint", "true"); mItem.onclick =()=> openPlaces(doc, mItem); addDestructor(()=> mItem.remove()); }; setMenuitem(document); // Открыть все закладки домен которых совпадает с доменом выделенный закладки .... function openPlaces(doc, mItem) { var node = PlacesUIUtils.getViewForNode(doc.popupNode).selectedNode; var domain = getDomain(node.uri); var array = []; // получить массив с данными о закладках домен которых совпадает с доменом выделенный закладки function chooseBookmarks(id = 1) { 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), uri = child.uri; PlacesUtils.nodeIsFolder(child) ? chooseBookmarks(child.itemId) : uri.startsWith("http") && getDomain(uri) == domain && array.push(child); } folder.containerOpen = false; } chooseBookmarks(); // через подтверждение удалить все закладки id которых находится в массиве deletePlaces && alertsService.showAlertNotification(mItem.getAttribute('src') || self.image, "Кликни чтобы удалить все " + array.length + " закладки сайта закладки!", domain, true, "", (s, t)=> { t == 'alertclickcallback' && array.forEach(m=> PlacesUtils.bookmarks.removeItem(m.itemId)); }, ""); // открыть закладки из массива в вкладках, с паузами если закладок очень много function f() { for ( var i = 0; i < array.length; ++i ) { var {uri, title, icon} = array[i]; // добавить вкладку с указанными данными не загружая страницу if ( notLoading ) { var tab = gBrowser.addTab(); var ss = Cc["@mozilla.org/browser/sessionstore;1"].getService(Ci.nsISessionStore); ss.setTabState(tab, JSON.stringify({entries: [{ url: uri, title: (!title ? uri : title)}], lastAccessed: 0, index: 1, hidden: false, attributes: {} })); icon && tab.setAttribute("image", icon); } else gBrowser.addTab(uri); // добавить вкладку загружая страницу // пауза в цикле через установленное количество циклов if ( i && i % maxOpenBook == 0 ) { setTimeout(()=> gen.next(), 150); yield 0; } // всплывающая подсказка показывает количество открытых закладок if ( showAlert && !deletePlaces && array.length == i+1 && i > maxOpenBook ) alertsService.showAlertNotification(mItem.getAttribute('src') || self.image, "Открыл " + array.length + " закладки", null); } yield 0; } var gen = f(); gen.next(); }; // Получить домен из адреса .... function getDomain(uri) { try { return Services.eTLD.getBaseDomain(Services.io.newURI(uri, null, null)) } catch(e) { return "" }; }; // Наблюдатель следит за открытием библиотеки в окне и добавляет там новый пункт в контекстном меню закладок .... function observer(subject) { subject.addEventListener("load", (e, doc = e.target)=> { doc.URL == library && setMenuitem(doc); }); }; Services.ww.registerNotification(observer); addDestructor(()=> Services.ww.unregisterNotification(observer) ); // Обработчик следит за открытием библиотеки в вкладке и добавляет там новый пункт в контекстном меню закладок .... addEventListener("DOMContentLoaded", (e, doc = e.target)=> { doc.location == library && !doc.hidden && setMenuitem(doc); }, false, gBrowser); })(); |
Duche > 10-08-2016 09:25:44 |
bunda1 пишет
Добрый день. Установил кнопку всё работает корректно , открывает все закладки из одного сайта. Но есть небольшая проблема , закладки вызывает но не загружает, пока не откроешь вкладку. Очень похоже на режим " Не загружать без запроса ". Как сделать загрузку открываемых закладок сразу после команды "Открыть все закладки из одного сайта". Заранее спасибо. |
bunda1 > 10-08-2016 10:48:50 |
Duche пишет
В вначале кода в: Измени true на false |
Duche > 10-08-2016 11:14:49 |
bunda1 пишет
Отлично . Спасибо за работу! |