>Форум Mozilla Россия http://forum.mozilla-russia.org/index.php >Сustom Buttons http://forum.mozilla-russia.org/viewforum.php?id=34 >[CB]Tab Clicking Options http://forum.mozilla-russia.org/viewtopic.php?id=52227 |
bunda1 > 04-11-2011 22:15:56 |
Двойной клик левой кнопкой на табе, закрыть страницу(Firefox 3.6 + ) Выделить код Код:// удаление обработчика, при открытии настройки панелей this.onDestroy = function() { removeEventListener("dblclick", TabClose, false, gBrowser.mTabContainer); }; // Двойной клик левой кнопкой на табе, закрыть страницу. // If double left click in Tab, remove Current Tab. function TabClose(event){ if (event.button != 0) return; event.preventDefault(); event.stopPropagation(); //закрыть страницу gBrowser.removeCurrentTab(); }; addEventListener("dblclick", TabClose, false, gBrowser.mTabContainer); Двойной клик левой кнопкой на табе, открыть домашнюю страницу(Firefox 3.6 + ) Выделить код Код:// удаление обработчика, при открытии настройки панелей this.onDestroy = function() { removeEventListener("dblclick", NewTabHome, false, gBrowser.mTabContainer) }; // Двойной клик левой кнопкой на табе, открыть домашнюю страницу. // If double left click in Tab, the Homepage open in New Tab. function NewTabHome(event){ if ( event.button == 0 && event.target.nodeName == 'tab') { event.preventDefault(); event.stopPropagation(); var HomeUrl = gPrefService.getCharPref("browser.startup.homepage"); gBrowser.selectedTab = gBrowser.addTab(HomeUrl); } }; addEventListener("dblclick", NewTabHome, false, gBrowser.mTabContainer); Клик средней кнопкой на табе, закрыть все вкладки кроме текущей.(Firefox 3.6 + ) Выделить код Код://Клик средней кнопкой на табе, закрыть все вкладки кроме текущей // midlle click tab - Close other Tabs.............................................. gBrowser.mTabContainer.addEventListener("mousedown", function (event){ if (event.button != 1) { return; } event.preventDefault(); event.stopPropagation(); if (event.target.localName != "tab") return; //закрыть все вкладки кроме текущей getBrowser().removeAllTabsBut(getBrowser().mCurrentTab); }, false); Двойной клик правой кнопкой на табе, добавить страницу в закладки(Firefox 3.6 +) Выделить код Код:// удаление обработчика, при открытии настройки панелей this.onDestroy = function() { removeEventListener("dblclick", TabAddBook, false, gBrowser.mTabContainer); }; // right dblclick tab - Add to Bookmarks.............................................. function TabAddBook(event){ if (event.button != 2) return; event.preventDefault(); event.stopPropagation(); if (event.target.localName != "tab") return; //зарыть контекстное меню таба document.getElementById("tabContextMenu").hidePopup(); //Добавить страницу в закладки PlacesCommandHook.bookmarkLink(PlacesUtils.bookmarksMenuFolderId, content.location.href, content.document.title); }; addEventListener("dblclick", TabAddBook, false, gBrowser.mTabContainer) |
bunda1 > 20-01-2012 19:57:46 |
Двойной клик левой кнопкой на табе - закрепить/открепить вкладку(Firefox 7 + ) Выделить код Код://удаление обработчика, при открытии настройки панелей this.onDestroy = function() { removeEventListener("dblclick", TabPin, false, gBrowser.mTabContainer); }; // двойной клик левой кнопкой на табе - закрепить/открепить вкладку. function TabPin(event){ if (event.button != 0) return; event.preventDefault(); event.stopPropagation(); //закрепить/открепить вкладку if(gBrowser.mCurrentTab.pinned) gBrowser.unpinTab(gBrowser.mCurrentTab); else gBrowser.pinTab(gBrowser.mCurrentTab); }; //добавляем обработчик для таба addEventListener("dblclick", TabPin, false, gBrowser.mTabContainer); |
iDev.Pi > 20-01-2012 22:31:29 |
bunda1 пишет
Есть джетпак Easy App Tabs делающий то же самое. |
bunda1 > 12-04-2012 18:09:48 |
Открыть новый таб двойным кликом левой кнопкой на титлебаре(Titlebar)(Firefox 7 + ) Выделить код Код:// Двойной клик левой кнопкой на на титлебаре открывает новый таб, от 25.08.2013. ................................ addEventListener("dblclick", function(e) { if ( e.button == 0 && document.getElementById('main-window').hasAttribute('tabsintitlebar') ) { e.preventDefault(); gBrowser.selectedTab = gBrowser.visibleTabs[gBrowser.visibleTabs.length - 1] gBrowser.selectedTab = gBrowser.addTab('about:newtab') } }, false, document.getElementById('TabsToolbar') ); |
Kamui > 12-04-2012 18:46:38 |
Глядишь разрастется до замены TU/TMP может стоит писать сюда фичреквесты аналогичных фич из TU? Будете добавлять? |
bunda1 > 12-04-2012 19:30:07 |
Kamui |
iDev.Pi > 12-04-2012 22:41:16 |
Kamui |
Kamui > 13-04-2012 00:29:06 |
iDev.Pi пишет
Да просто там TU/TMP действительно комбайны, а хотелось бы чего-то попроще, с возможностью настройки порядка открытия/закрытия вкладок, да несколько пунктов в контекстном меню вкладок |
bunda1 > 13-04-2012 08:08:30 |
Kamui пишет
Что конкретно нужно? |
Kamui > 13-04-2012 08:42:24 |
bunda1 пишет
Да ладно, все-таки многовато надо будет для CB думаю слишком будет |
bunda1 > 20-04-2012 18:42:08 |
Активизировать вкладку наведением курсора(Firefox 3.6 + ) Выделить код Код://Активизировать вкладку наведением курсора...................... var tab_hover={ event:null, tid:null, onLoad: function() { gBrowser.tabContainer.addEventListener("mouseout", tab_hover.onMouseOut, false); gBrowser.tabContainer.addEventListener("mouseover", tab_hover.onMouseOver, false); }, onUnload: function() { gBrowser.tabContainer.removeEventListener("mouseover", tab_hover.onMouseOver, false); gBrowser.tabContainer.removeEventListener("mouseout", tab_hover.onMouseOut, false); }, onMouseOver: function(event) { tab_hover.event=event.target; tab_hover.tid=setTimeout( function(){ gBrowser.selectedTab=tab_hover.event; } , 0); }, onMouseOut: function() { clearTimeout(tab_hover.tid); } }; if (!this.tab_hoverRun) tab_hover.onLoad(); this.tab_hoverRun = true; или Выделить код Код:gBrowser.tabContainer.addEventListener("mouseover", function(event) { gBrowser.selectedTab = event.target; }, false); Активизировать вкладку наведением курсора, если 'Панель меню' закрыт( Firefox 3.6 + ) Выделить код Код:// Активизировать вкладку наведением курсора, если 'Панель меню' закрыт ................................ (function () { var menubar = document.getElementById('toolbar-menubar'); addEventListener("mouseover", function(e) { if ( menubar.getAttribute("autohide") == 'true' && menubar.getAttribute("inactive") ) { gBrowser.selectedTab = e.target; } }, false, gBrowser.tabContainer ); })(); Переключаться на левую вкладку после закрытии текущей вкладки( Firefox 3.6 + ) Выделить код Код:// Переключаться на левую вкладку после закрытии текущей вкладки, от 22.08.2013. ................................ function tabCloseHandler(e) { var tab = e.target; if ( tab == gBrowser.mCurrentTab ) { if ( !gBrowser.visibleTabs.length ) gBrowser.addTab("about:blank"); else if ( !tab.hasAttribute('first-visible-tab') ) { gBrowser.mTabContainer.advanceSelectedTab(-1,true) }; } } addEventListener("TabClose", tabCloseHandler, true, gBrowser.tabContainer ); Открывать любую новую вкладку справа от текущей( Firefox 17 + ) Выделить код Код:// Открывать любую новую вкладку справа от текущей, от 08.04.2014. ................................ addEventListener("TabOpen", function(e) { var newTab = e.target; var lab = newTab.label; var tabpos = gBrowser.selectedTab._tPos; var newTabLab = gBrowser.mStringBundle.getString("tabs.emptyTabTitle"); if ( tabpos == 0 && lab == newTabLab ) return; // если восстановление сессии if ( new Error().stack.indexOf("openContainer") !== -1 ) return; // если открыть всё во вкладках из папки закладок lab == newTabLab ? setTimeout(function() gBrowser.moveTabTo( e.target, tabpos + 1 ), 50) // если восстановление вкладки : gBrowser.moveTabTo( e.target, tabpos + 1 ); // автоматически закрывать "custombutton" вкладку if ( lab.startsWith("custombutton://%") ) setTimeout(function() gBrowser.removeTab( newTab ), 0); }, false, gBrowser.tabContainer ); |
iDev.Pi > 20-04-2012 19:08:49 |
bunda1 пишет
курсором мыши -> наведением курсора bunda1 пишет
about:config -> browser.tabs.insertRelatedAfterCurrent ? 20-04-2012 19:11:46 bunda1 пишет
about:config -> browser.tabs.selectOwnerOnClose ? |
bunda1 > 20-04-2012 19:31:23 |
iDev.Pi пишет
Ok iDev.Pi пишет
А вот и нет! iDev.Pi пишет
А вот и нет! |
bunda1 > 20-04-2012 20:51:42 |
Дублировать таб( Firefox 3.6 + ) Выделить код Код:// Добавить новый пункт "Дублировать таб" в контекстном меню вкладки ................................... (function() { var node = document.getElementById("duplicateTab"); if ( node ) node.parentNode.removeChild( node ); var tabMenu = gBrowser.tabContainer.contextMenu || document.getAnonymousElementByAttribute(gBrowser, "anonid", "tabContextMenu"); var menuItem = document.createElement("menuitem"); menuItem.setAttribute("label", "Дублировать вкладку"); menuItem.setAttribute("id", "duplicateTab"); menuItem.setAttribute("oncommand", "gBrowser.selectedTab = gBrowser.duplicateTab( gBrowser.mCurrentTab )"); tabMenu.insertBefore( menuItem, tabMenu.firstChild.nextSibling ); })(); |
bunda1 > 23-04-2012 14:37:17 |
Копировать информацию о вкладках( Firefox 3.6 + ) Подменю содержит пункты: Копировать адрес Копировать название Копировать адрес иконки Копировать короткое название Копировать адрес и название Копировать адрес и название как BBCode Копировать адрес и название как HTML Копировать адреса всех табов Копировать название всех табов Копировать адреса и название всех табов Копировать адреса и название всех табов как BBCode Копировать адреса и название всех табов как HTML Лишние пункты в подменю можно просто удалить из кода: На пример если не нужен пункт Копировать адрес удалите: Использование: положите код в любую Custom Buttons кнопку, в инициализацию. Не обязательно создавать новую CB кнопку, можно использовать уже существующую. Выделить код Код:// Копировать информацию о вкладках, от 02.05.2013. .............. (function() { const id = "copyTabInfoMenu"; function n(id) document.getElementById(id); function c(name) document.createElement(name); const root = n("tabContextMenu"); var menu = n(id); if (menu) { root.removeChild(menu.previousSibling); root.removeChild(menu); } const ruCopy = "Копировать "; const tab = "document.popupNode."; const url = "linkedBrowser.currentURI.spec"; const copySingle = "gClipboard.write(document.popupNode."; const copyAll = "gClipboard.write(Array.slice(gBrowser.tabs).map(function(tab) "; const copyAllEnd = ').join("\\r\\n"));'; const data = [ ["адрес", copySingle + url + ");"], ["название", copySingle + "label);"], ["адрес иконки", copySingle + "image);"], ["короткое название", copySingle + "label.substring(0, 50) + (" + tab + 'label.length > 50 ? " ......" : ""));'], ["адрес и название", copySingle + "label" + ' + "\\r\\n" + ' + tab + url + ");"], ["адрес и название как BBCode", copySingle.replace("(", '(\'[url="\' + ') + url + ' + \'"]\' + ' + tab + 'label + "[/url]");'], ["адрес и название как HTML", copySingle.replace("(", '(\'<a href="\' + ') + url + ' + \'">\' + ' + tab + 'label + "</a>");'], ["адреса всех табов", copyAll + "tab." + url + copyAllEnd], ["название всех табов", copyAll + "tab.label" + copyAllEnd], ["адреса и название всех табов", copyAll + 'tab.label + "\\r\\n" + tab.' + url + copyAllEnd.replace('"))', '\\r\\n"))')], ["адреса и название всех табов как BBCode", copyAll + '\'[url="\' + tab.' + url + ' + \'"]\' + tab.label + "[/url]"' + copyAllEnd], ["адреса и название всех табов как HTML", copyAll + '\'<a href="\' + tab.' + url + ' + \'">\' + tab.label + "</a>"' + copyAllEnd] ]; var menu = c("menu"); var popup = c("menupopup"); var sep = c("menuseparator"); menu.id = id; menu.setAttribute("label", "Копировать информацию о вкладках"); popup.setAttribute( "onclick", '\ if (event.button != 2) return; event.preventDefault();\ eval(event.target.getAttribute("oncommand").replace("tabs", "visibleTabs"));\ this.parentNode.parentNode.hidePopup();' ); data.forEach(function(attrs) { var menuitem = c("menuitem"); menuitem.setAttribute("label", ruCopy + attrs[0]); menuitem.setAttribute("oncommand", attrs[1]); popup.appendChild(menuitem); }); menu.appendChild(popup); root.appendChild(sep); root.appendChild(menu); addDestructor(function(reason) { if (reason == "delete") { root.removeChild(sep); root.removeChild(menu); }}); })(); |
voqabuhe > 11-05-2012 14:28:41 |
bunda1 пишет
А можешь сделать, что бы ЛКМ открывал абсолютно всё в новых не активных вкладках, СКМ в текущей? |
bunda1 > 11-05-2012 23:55:10 |
voqabuhe пишет
Это сложно, надо подумать. |
bunda1 > 14-05-2012 01:31:13 |
voqabuhe пишет
Выделить код Код://ЛКМ откроет все ссылки в новых неактивных вкладках (function() { //Стоп, если функция уже выполнялась if (this.linkInTab) return; this.linkInTab = true; function OnClick(e) { var href, sURI, target; for(target=(e.button==0?e.target:null); target!=null; target=target.parentNode) { if (!target.localName || target.localName=='A' || target.localName=='a') break; } if (target!=null && target.href!=null) { href = target.href; sURI = gBrowser.currentURI.spec; gBrowser.loadOneTab(href, { referrerURI: document.documentURIObject, charset: target.charset, postData: null, inBackground: true}); e.preventDefault(); } } try { gBrowser.addEventListener('click', OnClick, false); }catch(e) {} })(); |
voqabuhe > 14-05-2012 11:53:09 |
bunda1 |
bunda1 > 14-05-2012 12:55:20 |
voqabuhe пишет
Я исправил: Сегодня 00:31:13 14-05-2012 13:12:16 voqabuhe пишет
Выделить код Код://Открывать закладки в новых фоновых вкладках...................................................................... var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService); prefs.setBoolPref("browser.tabs.loadBookmarksInBackground", true); // if (typeof PlacesUIUtils.__oretab_bload == 'undefined') { PlacesUIUtils.__oretab_bload = true; var __org_openNodeIn = PlacesUIUtils._openNodeIn; PlacesUIUtils._openNodeIn = function ORE_PU_openNodeIn(aNode, aWhere, aWindow) { var aWhere = 'tab'; if(/^javascript:/.test(aNode.uri)) aWhere = 'current'; return __org_openNodeIn.call(PlacesUIUtils, aNode, aWhere, aWindow); } }; |
voqabuhe > 14-05-2012 20:52:16 |
bunda1 пишет
У меня после исправления перестала работать. А из закладок открывает нормально. |
bunda1 > 14-05-2012 21:22:20 |
voqabuhe |
voqabuhe > 14-05-2012 22:39:37 |
bunda1 |
voqabuhe > 25-05-2012 21:49:40 |
bunda1 voqabuhe пишет
|
bunda1 > 26-05-2012 10:20:24 |
voqabuhe |
voqabuhe > 11-06-2012 11:41:48 |
bunda1 пишет
Вопрос снимается, уже привык к стандартной работе кнопок. |
bunda1 > 11-06-2012 19:06:53 |
voqabuhe |
villa7 > 25-07-2012 10:55:42 |
Кто нибудь может сделать что-бы новая вкладка открывалась по двойному клику ЛКМ по свободному месту на панели вкладок, как в ТabMixPlus, в Firefox 14.01. Не могу найти нормально работающее, либо через кнопку как здесь, либо через userchrome.css, или user.js, я в этом не разбираюсь. Держать целое расширение ради одной опции как-то не разумно. |
voqabuhe > 25-07-2012 11:38:11 |
okkamas_knife пишет
Есть на СКМ, а двойной ЛКМ меняет размер окна. |
iDev.Pi > 25-07-2012 12:48:16 |
voqabuhe |
voqabuhe > 25-07-2012 12:55:16 |
iDev.Pi пишет
А, точно, я уже и забыл, что они могут быть в другом месте. |
villa7 > 25-07-2012 13:43:11 |
iDev.Pi Точно, переключился работает, вопрос снимается, спасибо. 25-07-2012 13:55:32 Точно, переключился работает, вопрос снимается, спасибо. Поспешил, переключил вкладки вверх а TabMix забыл отключить, так что не открывает новые вкладки, вопрос остался. |
bunda1 > 25-07-2012 19:02:36 |
villa7 |
villa7 > 25-07-2012 20:26:12 |
bunda1 villa7 Я пробовал Ваши несколько вариантов, но у меня почему-то на титлебаре вообще не работает, а "Двойной клик левой кнопкой на табе, открыть домашнюю страницу" работает не совсем так как нужно, новую вкладку добавляет по щелчку по панели вкладок, но при этом вкладки двойным щелчком перестает закрывать. |
bunda1 > 25-07-2012 20:48:45 |
villa7 TabMix отключил ? |
bunda1 > 25-07-2012 21:19:16 |
villa7 пишет
Поправил код:04-11-2011 21:15:56 |
villa7 > 27-07-2012 00:52:56 |
bunda1 Что-то у меня не срабатывает, ладно, будем пользоваться по старинке. Спасибо за участие. |
bunda1 > 28-07-2012 12:56:07 |
Открывать всё в новых вкладках( Firefox 17 + ) Выделить код Код:// Открывать всё в новых вкладках, от 16.12.2013. ...................................... (function () { // открывать всё из ниже перечисленного в новых вкладках, если пустая страница открывать в текущей .... const where = whereToOpenLink; eval("whereToOpenLink = " + where.toString() .replace('return "current";\n}', (function() { switch ( e.originalTarget.id ) { case "bookmarksMenuPopup": case "goPopup": case "appmenu_bookmarksPopup": case "appmenu_historyMenupopup": case "personal-bookmarks": case "bookmarks-menu-button": case "historymenu_history": case "home-button": case "page-proxy-stack": case "go-button": case "urlbar-go-button": case "PopupAutoCompleteRichResult": case "searchbar": case "PopupAutoComplete": return "tab"; default: return "current"; } }).toString().replace(/^.*{|}$/g, "")+"}")); // открывать закладки и историю в новых вкладках, если букмарклети или пустая страница в текущей .... const openNode = PlacesUIUtils._openNodeIn; eval("PlacesUIUtils._openNodeIn = " + openNode.toString().replace(') {', '){\n if (["about:newtab", "about:blank"].indexOf(content.location.href)!= -1 ) aWhere = "current";\n aWhere = (aWhere == "tab" || aNode.uri.startsWith("javascript:") ) ? "current" : "tab";\n') ); // если JavaScript ссылка или пустая страница открывать в текущей .... const linkIn = openLinkIn; eval("openLinkIn = " + linkIn.toString().replace(';', ';;\n if ( url.startsWith("javascript:") ) where = "current";\n if (["about:newtab", "about:blank"].indexOf(content.location.href)!= -1 ) where = "current";') ); // команды адресной строки открывают всё связанное с адресной строкой в новых вкладках, если alt+ в текущей .... const handle = gURLBar.handleCommand; eval("gURLBar.handleCommand = " + handle.toString().replace('aTriggeringEvent.altKey;', 'aTriggeringEvent.altKey == false;')); // 'Вставить и перейти' из адресной строки открывает в новых вкладках .... addEventListener("popupshowing", function(e) { var menupopup = e.originalTarget; var pasteAndGo = menupopup.getElementsByAttribute("anonid", "paste-and-go")[0]; if ( !pasteAndGo ) return; pasteAndGo.setAttribute("oncommand", "event.preventDefault(); gURLBar.select(); goDoCommand('cmd_paste'); gURLBar.handleCommand(event);") }, false, document.getElementById("urlbar") ); // удалять изменения из внутренних функций Firefox .... addDestructor(function() { eval("whereToOpenLink = " + where); eval("PlacesUIUtils._openNodeIn = " + openNode); eval("openLinkIn = " + linkIn); eval("gURLBar.handleCommand = " + handle); }); })(); |
Крошка Ру > 28-07-2012 20:42:11 |
bunda1,Хорошая кнопка вышла , и в работает ... а можно добавить чтобы при клике на ссылку она открывалась в новой странице ? , потому что клик средней кнопкой теперь вообще не срабатывет |
bunda1 > 28-07-2012 20:56:16 |
Крошка Ру |
serg00700 > 04-02-2013 22:38:54 |
bunda1 пишет
кнопка глючит с расширением IE Tab |
vom > 25-02-2013 14:00:45 |
А возможно ли переназначит клик СКМ по панели вкладок, по умолчанию он открывает новую вкладку, а требуется закрытие активной вкладки. |
bunda1 > 25-02-2013 21:03:51 |
Закрывать активный таб средним кликом на панели вкладок( Firefox 10 + ) Выделить код Код:function closeWithMiddle(e) { if ( e.button !== 1 || e.target.nodeName !== "tabs" || e.originalTarget.localName !== "box" ) return; e.stopPropagation(); gBrowser.removeTab(gBrowser.selectedTab); } gBrowser.mTabContainer.addEventListener("click", closeWithMiddle, true); this.onDestroy = function() { gBrowser.mTabContainer.removeEventListener("click", closeWithMiddle, true); }; |
vom > 25-02-2013 21:20:01 |
bunda1 |
bunda1 > 25-02-2013 22:01:34 |
vom Выделить код Код:gBrowser.tabContainer.addEventListener("TabOpen", function(e) { gBrowser.removeTab( e.target ); setTimeout(function() { window.content.focus() }, 0) this.removeEventListener("TabOpen", arguments.callee, false) }, false); наверно новая вкладка не открывается до конца и потому так с анимацией. Kоманда закрытия тут ни при чем. Хотя можно закрывать новую вкладку после полной загрузки но тогда она будет появляться. |
vom > 25-02-2013 22:14:04 |
bunda1 |
Dumby > 25-02-2013 23:01:01 |
bunda1 пишет
Во, вроде блокируется скрытый текст Выделить код Код:function test(e) { if ( e.button != 1 || e.target.nodeName != "tabs" || e.originalTarget.localName != "box" ) return; e.stopPropagation(); gBrowser.removeTab(gBrowser.selectedTab); } addEventListener("click", test, true, gBrowser.mTabContainer); |
bunda1 > 26-02-2013 00:02:53 |
Dumby |
vom > 26-02-2013 15:07:08 |
Да, теперь вообще хорошо. Активизировать вкладку наведением курсора |
bunda1 > 26-02-2013 19:57:39 |
vom |
Dumby > 26-02-2013 20:17:21 |
bunda1 пишет
Хмм ? скрытый текст Выделить код Код:function test(e) { var node = e.target; if ( e.screenY > node.boxObject.screenY + 5 || node.nodeName != "tab" || node == gBrowser.selectedTab ) return; gBrowser.selectedTab = node; } addEventListener("mousemove", test, false, gBrowser.mTabContainer); |
bunda1 > 26-02-2013 23:23:24 |
Активировать вкладку наведением курсора немного над вкладкой(Firefox 3.6 + ) Выделить код Код:function tabHover(e) { var node = e.target; if ( e.screenY > node.boxObject.screenY + 5 || node.nodeName != "tab" || node == gBrowser.selectedTab ) return; gBrowser.selectedTab = node; } addEventListener("mousemove", tabHover, false, gBrowser.mTabContainer); |
vom > 26-02-2013 23:41:40 |
bunda1Dumby |
questman > 06-03-2013 09:39:05 |
vom пишет
Эта правда. |
Dumby > 06-03-2013 12:18:50 |
questman скрытый текст Выделить код Код:const reloadInterval = 5000; //ms const labelReload = "Перезагружать вкладку"; const labelStopReload = "Остановить перезагрузку вкладки"; const tabContextMenu = document.getElementById("tabContextMenu"); const insertPoint = document.getElementById("context_reloadTab"); const id = "context_reloadTab_interval"; const attr = "reload-interval-id"; var menuitem = document.createElement("menuitem"); menuitem.id = id; const command = '\ var tab = this.parentNode.triggerNode;\n\ var interval = tab.getAttribute("' + attr + '");\n\ if (interval) {\n\ clearInterval(interval);\n\ tab.removeAttribute("' + attr + '");\n\ }\n\ else {\n\ var interval = setInterval(function() {\n\ gBrowser.reloadTab(tab);\n\ }, ' + reloadInterval + ');\n\ tab.setAttribute("' + attr + '", interval);\n\ }'; menuitem.setAttribute("oncommand", command); function insertMenuitem(e) { if (e.target != tabContextMenu) return; var tab = tabContextMenu.triggerNode; var interval = tab.hasAttribute(attr); var label = interval ? labelStopReload : labelReload; menuitem.setAttribute("label", label); tabContextMenu.insertBefore(menuitem, insertPoint.nextSibling); } function removeMenuitem(e) { if (e.target != tabContextMenu) return; tabContextMenu.removeChild(menuitem); } addEventListener("popupshowing", insertMenuitem, false, tabContextMenu); addEventListener("popuphiding", removeMenuitem, false, tabContextMenu); |
questman > 06-03-2013 20:56:08 |
Dumby пишет
Ещё как пригодится.Спасибо огромное это больше на что я рассчитывал. |
bunda1 > 06-03-2013 22:48:35 |
questman пишет
about:config |
questman > 07-03-2013 08:29:42 |
bunda1 пишет
Спасибо! |
bunda1 > 07-03-2013 20:44:45 |
Dumby пишет
Полезная вещь, а можно сделать её более затейливой - чтобы проверяла страницу на изменения и обновляла только тогда если изменения обнаружены или хотя бы что бы обновления происходили не заметно без вращения индикатора на табе, а то напрягает. Если конечно это не слишком сложно |
vom > 08-03-2013 01:48:29 |
Dumby Пришла в голову идея, чтобы не было холостой перезагрузки и не раздражал throbber, возможно ли сделать кнопку, перезагружающую таб только при активации. Т.е. находясь в этой теме, я нажимаю одинарный ПКМ по соседней вкладке http://forum.mozilla-russia.org/search. … n=show_24h и всегда при ее активации, она со свежими непрочитанными темами. Отключается тоже по ПКМ. Плюс к релоаду, будет удобен автоматический Scroll to Top. |
Dumby > 08-03-2013 19:59:08 |
bunda1 скрытый текст Выделить код Код:const checkInterval = 1 * 60 * 1000; //ms const labelReload = "Перезагружать вкладку"; const labelStopReload = "Остановить перезагрузку вкладки"; const noThrob = true; const tabContextMenu = document.getElementById("tabContextMenu"); const insertPoint = document.getElementById("context_reloadTab"); var menuitem = document.createElement("menuitem"); menuitem.id = "context_reloadTab_interval"; function setThrobberState(tab, throb) { const on = "tab-throbber"; const off = "tab-throbber-off" var throbber = document.getAnonymousElementByAttribute(tab, "class", on) || document.getAnonymousElementByAttribute(tab, "class", off); throbber.className = throb ? on : off; } function tick(tab) { var oldDocs = tab.docs; if (!oldDocs) return; tab.docs = {}; function fillTabDocs(tab, win) { var frames = win.frames; var loc = frames.location; if (loc != "about:blank") { tab.docs[frames.location] = oldDocs[frames.location] || ""; } if (!frames.length) return; for(var i = 0; i < frames.length; i++) fillTabDocs(tab, frames[i]); } var br = tab.linkedBrowser; if (!br) return; fillTabDocs(tab, br.contentWindow); for(var loc in tab.docs) sendRequest(tab, loc); setTimeout(tick, checkInterval, tab); } function sendRequest(tab, loc) { var req = new XMLHttpRequest(); req.open("GET", loc, true); req.responseType = "text"; // reg.timeout = Math.round(checkInterval / 2); req.onloadend = function() { // if (req.status != 200) return; var res = req.responseText; var old = tab.docs[loc]; if (old && old != res) { var wn = tab.linkedBrowser.webNavigation; wn.reload(wn.LOAD_FLAGS_BYPASS_CACHE); } tab.docs[loc] = res; } req.channel.loadFlags |= req.channel.LOAD_BYPASS_CACHE; req.send(null); } function onCommand(e) { var tab = e.target.parentNode.triggerNode; if (tab.docs) { delete tab.docs; setThrobberState(tab, true); return; } if (noThrob) setThrobberState(tab, false); tab.docs = {}; tick(tab); } function insertMenuitem(e) { if (e.target != tabContextMenu) return; var tab = tabContextMenu.triggerNode; var protocol = tab.linkedBrowser.contentDocument.location.protocol; if (protocol != "http:" && protocol != "https:") return; var label = tab.docs ? labelStopReload : labelReload; menuitem.setAttribute("label", label); tabContextMenu.insertBefore(menuitem, insertPoint.nextSibling); } function removeMenuitem(e) { if (e.target != tabContextMenu) return; try { tabContextMenu.removeChild(menuitem); } catch(ex) {} } addEventListener("popupshowing", insertMenuitem, false, tabContextMenu); addEventListener("popuphiding", removeMenuitem, false, tabContextMenu); addEventListener("command", onCommand, false, menuitem); this.onDestroy = function(reason) { if (reason == "update" || reason == "delete") { Array.slice(gBrowser.tabs).forEach(function(tab) { delete tab.docs; setThrobberState(tab, true); }); } }; vom Так что-ли ? скрытый текст Выделить код Код:function reloader(e) { var tab = e.target; var br = tab.linkedBrowser; gBrowser.reloadTab(tab); br.addEventListener("DOMContentLoaded", function onLoad(e) { br.removeEventListener("DOMContentLoaded", onLoad, false); e.target.defaultView.scroll(0, 0); }, false); } function addListener(e) { if (e.button != 2 || e.target.nodeName != "tab") return; e.preventDefault(); var tab = e.target; if (!tab.reloader) { addEventListener("TabSelect", reloader, false, tab); tab.reloader = true; return; } removeEventListener("TabSelect", reloader, false, tab); delete tab.reloader; } addEventListener("click", addListener, false, gBrowser.mTabContainer); |
vom > 09-03-2013 01:00:20 |
Dumby пишет
В точку, спасибо большое. Опробовал, оказалось крайне удобно для многих сайтов, давно задумывался о подобном, т.к. простой перезагрузчик не рационален и не претенциозен. |
villa7 > 09-03-2013 11:20:36 |
Dumby скрытый текст function reloader(e) { var tab = e.target; var br = tab.linkedBrowser; gBrowser.reloadTab(tab); |
Dumby > 09-03-2013 14:44:35 |
villa7 скрытый текст Выделить код Код:function reloader(e) { gBrowser.reloadTab(e.target); } function onClick(e) { if ( e.button != 2 || e.ctrlKey || e.target.nodeName != "tab" ) return; e.preventDefault(); var tab = e.target; if (!tab.reloader) { addListener(tab, true); tab.reloader = true; return; } addListener(tab, false); delete tab.reloader; } function addListener(tab, add) { if (add) addEventListener("TabSelect", reloader, false, tab); else removeEventListener("TabSelect", reloader, false, tab); } for(var tab of gBrowser.tabs) if (tab.reloader) addListener(tab, true); addEventListener("click", onClick, false, gBrowser.mTabContainer); |
villa7 > 09-03-2013 15:15:05 |
Dumby |
bunda1 > 11-03-2013 19:48:33 |
Dumby пишет
Спасибо, спасибо |
questman > 18-03-2013 19:41:06 |
bunda1 пишет
Это очень полезный код.Но при "Открыть всё во вкладках" порядок вкладок меняется с ног на голову. У меня при различных манипуляциях с кодом получается что то одно.Либо новая вкладка открывается справа |
bunda1 > 19-03-2013 22:10:24 |
questman |
Infocatcher > 19-03-2013 23:33:45 |
questman пишет
Кривая распорка: Выделить код Код:var multiTabPos = 0; var lastMultiTab = 0; addEventListener("TabOpen", function(event) { if(new Error().stack.indexOf("\nPUIU_openContainerInTabs@") == -1) multiTabPos = 0; else { var now = Date.now(); if(now - lastMultiTab > 100) multiTabPos = 0; ++multiTabPos; lastMultiTab = now; } var tabpos = gBrowser.selectedTab._tPos + 1 + (multiTabPos && multiTabPos - 1); gBrowser.moveTabTo(event.target, tabpos); }, false, gBrowser.tabContainer); |
questman > 20-03-2013 09:00:00 |
Infocatcher пишет
Спасибо!!! |
questman > 20-03-2013 13:06:37 |
А нельзя добавить в код инструкцию которая бы позволяла открывать все всплывающие окна в новой вкладке справа от текущей? |
Infocatcher > 20-03-2013 14:47:52 |
browser.link.open_newwindow.restriction = 0 ? |
questman > 20-03-2013 16:04:29 |
Infocatcher пишет
Да,оно!Спасибо! |
MySh > 01-12-2013 01:20:59 |
К сожалению эта кнопка не работает в Seamonkey 2.22. |
bunda1 > 01-12-2013 02:01:22 |
MySh пишет
Код изменяет внутренние функции Firefox и если openNode is undefined то это значит что в Seamonkey такой функции нет. |
Maxut > 15-03-2014 19:19:42 |
bunda1 пишет
Удобный код .Спасибо. Выделить код Код:["адрес и название как BBCode", copySingle.replace("(", '(\'[url="\' + ') + url + ' + \'"]\' + ' + tab + 'label + "[/url]");'], а так работает (без кавычек) url="....+ \'"] Выделить код Код:["адрес и название как BBCode", copySingle.replace("(", '(\'[url=\' + ') + url + ' + \']\' + ' + tab + 'label + "[/url]");'], |
difabor > 20-04-2014 23:27:08 |
bunda1 пишет
Очень полезная кнопка, но не хватает одной важной составляющей - выделенного текста: "Копировать адрес, название и выделенный текст как BBCode". |
etoins srldu > 23-04-2014 22:52:14 |
difabor пишет
Нужный пункт Адрес и редактированное название как BBCode При клике ЛКМ копирует информацию всех вкладок Выделить код Код:// Добавить подменю "Копировать адрес и название как BBCode или" в контекстном меню вкладки, от 09.04.2014. ................................ (function() { const tabContextMenu = document.getElementById("tabContextMenu"); var separator = tabContextMenu.appendChild( document.createElement("menuseparator") ); var menu = tabContextMenu.appendChild( document.createElement("menu") ); menu.setAttribute("label", "Копировать адрес и название как BBCode или ...."); addDestructor(function() { tabContextMenu.removeChild( menu ) tabContextMenu.removeChild( separator ) }); var array = [ { label: "Адрес", arg: 'url'}, { label: "Название", arg: 'label'}, { label: "Адрес иконки", arg: 'image'}, { label: "Название коротко", arg: 'shortTitle'}, { label: "Адрес и название", arg: 'tabInfo'}, { label: "Адрес и название как HTML", arg: 'tabInfoHtml'}, { label: "Адрес и редактированное название как BBCode", arg: 'tabChangedInfoBbcode'}, { separator: '' }, { label: "Адреса всех табов", arg: 'allTabsURL'}, { label: "Название всех табов", arg: 'allTabsLabels'}, { label: "Адреса и название всех табов", arg: 'allTabsInfo'}, { label: "Адреса и название всех табов как HTML", arg: 'allTabsInfoHtml'}, { label: "Адреса и название всех табов как BBCode", arg: 'allTabsInfoBbcode'}, ]; var menuPopup = menu.appendChild( document.createElement("menupopup") ); array.forEach(function( m ) { if ( "separator" in m ) { menuPopup.appendChild( document.createElement("menuseparator") ); return }; var mItem = document.createElement("menuitem"); mItem.setAttribute("label", m.label); mItem.arg = m.arg; menuPopup.appendChild( mItem ); }); addEventListener("click", function(e) { var tab = document.popupNode; tabContextMenu.hidePopup(); var tabs = e.button ? gBrowser.visibleTabs : gBrowser.tabs; var arg = (e.target.nodeName == "menu") ? "tabInfoBbcode" : e.target.arg; switch(arg) { case "url": var info = tab.linkedBrowser.currentURI.spec; break; case "label": var info = tab.label; break; case "image": var info = tab.image; break; case "shortTitle": var info = tab.label.slice(0,50) + (tab.label.length > 50 ? ' ......' : ""); break; case "tabInfo": var info = buildTabInfo(tab,arg); break; case "tabInfoHtml": var info = buildTabInfo(tab,arg); break; case "tabInfoBbcode": var info = buildTabInfo(tab,arg); break; case "tabChangedInfoBbcode": var text = tab.label; tab.label = custombuttons.promptBox("Измените название вкладки:",null, tab.label)[1]; var info = buildTabInfo(tab,arg); tab.label = text; break; case "allTabsURL": var info = Array.map(tabs, function(node) { return node.linkedBrowser.currentURI.spec }).join("\n"); break; case "allTabsLabels": var info = Array.map(tabs, function(node) { return node.label }).join("\n"); break; case "allTabsInfo": var info = Array.map(tabs, function(node) { return buildTabInfo(node,arg) }).join("\n"); break; case "allTabsInfoHtml": var info = Array.map(tabs, function(node) { return buildTabInfo(node,arg) }).join("\n"); break; case "allTabsInfoBbcode": var info = Array.map(tabs, function(node) { return buildTabInfo(node,arg) }).join("\n"); break; } gClipboard.write( info ); }, false, menu ); function buildTabInfo( tab, arg ) { var url = tab.linkedBrowser.currentURI.spec; switch( arg.slice(-4) ) { case "code": var info = '[url="' + url + '"]' + tab.label + '[/url]'; break; case "Html": var info = '<a href="' + url + '">' + tab.label + '</a>'; break; default: var info = tab.label + "\n" + url; } return info; }; })();
Лень делать и не нужно это. |
difabor > 24-04-2014 05:37:08 |
Спасибо большое! Но насчёт ЛКМ/ПКМ - не понял - у меня работает одинаково, что ЛКМ, что ПКМ |
etoins srldu > 24-04-2014 09:54:38 |
difabor пишет
Значит ты не открываешь группы вкладок и речь идёт о пунктах которые которые информацию о всех вкладках. |
difabor > 24-04-2014 19:46:43 |
Да, не открываю. |
bunda1 > 11-08-2014 22:36:11 |
Копировать информацию о вкладках+( Firefox 64 + ) Лишние пункты в подменю можно просто удалить из кода: Пример, если не нужен пункт Адрес удалите: Использование: положите код в любую Custom Buttons кнопку, в инициализацию. Не обязательно создавать новую CB кнопку, можно использовать уже существующую. Выделить код Код:// Добавить подменю "Копировать адрес и название как BBCode или" в контекстном меню вкладки, от 07.11.2022. .............. (()=> { var tabContextMenu = document.getElementById("tabContextMenu"); var separator = tabContextMenu.appendChild(document.createElementNS(xulns, "menuseparator")); var menu = tabContextMenu.appendChild(document.createElementNS(xulns, "menu")); menu.setAttribute("label", "Копировать адрес и название как BBCode или:"); addDestructor(()=> { tabContextMenu.removeChild(menu); tabContextMenu.removeChild(separator); }); var data = { url: "Адрес", label: "Название", image: "Адрес иконки", shortUrl: "Адрес коротко", shortLabel: "Название коротко", tabInfo: "Адрес и название", tabInfoHtml: "Адрес и название как HTML", tabChangedInfoBbcode: "Адрес и редактированное название как BBCode", separator1: 0, allTabsURL: "Адреса всех вкладок", allTabsLabels: "Название всех вкладок", allTabsInfo: "Адреса и название всех вкладок", allTabsInfoHtml: "Адреса и название всех вкладок как HTML", allTabsInfoBbcode: "Адреса и название всех вкладок как BBCode" } var menuPopup = menu.appendChild(document.createElementNS(xulns, "menupopup")); for (var key in data) { if (key.startsWith("separator")) { menuPopup.appendChild(document.createElementNS(xulns, "menuseparator")); continue; }; var menuitem = menuPopup.appendChild(document.createElementNS(xulns, "menuitem")); menuitem.setAttribute("label", data[key]); menuitem.arg = key; }; addEventListener("click", e=> { var info, tab = TabContextMenu.contextTab, lab = tab.label; var tabs = e.button == 0 ? [...gBrowser.tabs] : gBrowser.visibleTabs; var arg = (e.target == menu) ? "tabInfoBbcode" : e.target.arg; switch(arg) { case "url": info = tab.linkedBrowser.currentURI.spec; break; case "label": info = lab; break; case "image": info = tab.image.replace("#-moz-resolution=16,16",""); break; case "shortUrl": copyShortUrl(tab); break; case "shortLabel": info = lab.slice(0,50) + (lab.length > 50 ? ' ......' : ""); break; case "tabInfo": info = getInfo(tab, arg); break; case "tabInfoHtml": info = getInfo(tab, arg); break; case "tabInfoBbcode": info = getInfo(tab, arg); break; case "tabChangedInfoBbcode": info = getInfo({__proto__: tab, label: custombuttons.promptBox("Измените название вкладки:", null, lab)[1]}, arg); break; case "allTabsURL": info = tabs.map(node=> node.linkedBrowser.currentURI.spec).join("\n"); break; case "allTabsLabels": info = tabs.map(node=> node.label).join("\n"); break; case "allTabsInfo": info = tabs.map(node=> getInfo(node, arg)).join("\n"); break; case "allTabsInfoHtml": info = tabs.map(node=> getInfo(node, arg)).join("\n"); break; case "allTabsInfoBbcode": info = tabs.map(node=> getInfo(node, arg)).join("\n"); break; } gClipboard.write(info); tabContextMenu.hidePopup(); }, false, menu); function copyShortUrl(tab) { fetch('https://is.gd/create.php?format=simple&url=' + encodeURIComponent(tab.linkedBrowser.currentURI.spec)) .then(response => response.text()) .then(shortUrl => gClipboard.write(shortUrl)) .catch(error => alert(error)); }; function getInfo(tab, arg) { var info, url = tab.linkedBrowser.currentURI.spec; switch(arg.slice(-4)) { case "code": info = '[url="' + url + '"]' + tab.label + '[/url]'; break; case "Html": info = '<a href="' + url + '">' + tab.label + '</a>'; break; case "Info": info = tab.label + "\n" + url; } return info; }; })(); |
HaGEN > 22-10-2014 09:12:29 |
Тоже хотелось бы избавиться от TU ибо почти ничего их того множества опций не нужно или могу обойтись, очень редко юзаецца. Но есть необходимые, мож уже есть кнопки для этого: |
bunda1 > 23-10-2014 19:58:01 |
HaGEN пишет
Выделить код Код:const tc = gBrowser.tabContainer; let tabs = []; function onTabSelect(e) { for (let i = 0; i < tabs.length; i++) { if (e.target.linkedPanel != tabs[i]) continue; tabs.splice(i, 1); break; } tabs.push(e.target.linkedPanel); } function onTabClose(e) { let allTabs = Array.slice(tc.childNodes); let allTabsLP = allTabs.map(function(tab) { return tab.linkedPanel; }); if (e.target == gBrowser.selectedTab && tabs.length >= 1) { let tab; let lp = tabs[tabs.length - (tabs.length == 1 ? 1 : 2)]; for (let i = 0; i < allTabsLP.length; i++) { if (lp != allTabsLP[i]) continue; tab = allTabs[i]; break; } if (tab) gBrowser.selectedTab = tab; } if (tabs.length != 0) { tabs = tabs.filter(function(tab) { return allTabsLP.indexOf(tab) != -1 ? true : false; }); tabs.splice(tabs.length - (tabs.length == 1 ? 1 : 2), 1); } } addEventListener("TabSelect", onTabSelect, false, tc); addEventListener("TabClose", onTabClose, false, tc); |
HaGEN > 22-11-2014 07:34:04 |
я чета запутался да запатятовал. Благодарю bunda1 , но одно без другого ... хехех. В общем нашел плуг мааахонький, именно для этого. Наз. FLST - FocusLastSelectedTab делает именно то что нужно. И "click-по-текущей-вкл-ке" и "закрытие-вкл-ки" - переход на посл. посещенную. |
Dexu > 23-04-2015 16:46:39 |
bunda1, Dumby
|
Dumby > 25-04-2015 00:40:59 |
Dexu скрытый текст Выделить код Код:(trg => { var left = 29; var attr = "reload-onselect-mode"; var url = "data:application/x-javascript," + encodeURIComponent("content.scrollTo(0, 0);"); function scroll(tab) tab.linkedBrowser.messageManager.loadFrameScript(url, true); addEventListener("TabSelect", e => { if (!e.target.hasAttribute(attr)) return; var tab = e.target; gBrowser.reloadTab(tab); tab.getAttribute(attr) == 1 && scroll(tab); }, false, trg); addEventListener("click", e => { if (e.button != 2 || e.target.nodeName != "tab") return; e.preventDefault(); var tab = e.target; if (tab.hasAttribute(attr)) tab.removeAttribute(attr); else { var mode = Number(e.clientX - tab.boxObject.x > left); tab.setAttribute(attr, mode); if (!tab.hasAttribute("pending") || !mode) return; var state = JSON.parse(SessionStore.getTabState(tab)); if (state.scroll) { delete state.scroll; SessionStore.setTabState(tab, JSON.stringify(state)); } } }, false, trg); })(gBrowser.tabContainer); |
Dexu > 25-04-2015 00:57:00 |
Dumby |
vitalii201 > 16-07-2015 22:39:28 |
Подскажите, пожалуйста. При выборе "Адрес" на неактивной вкладке копируется URL открытой, а при выборе "Название" или "Адрес иконки" всё нормально – информация с таба на который наведён курсор. Необходимо что-бы и URL копировался того таба который под курсором. |
bunda1 > 17-07-2015 23:32:37 |
vitalii201 пишет
Вот исправил: Копировать информацию о вкладках |
KOMMEHTATOP > 15-10-2015 18:04:53 |
Dexu Dumby пишет
Можно пожалуйста по подробнее как сделать Scroll to Top? P.S. скрытый текст (trg => { var left = 29; var attr = "reload-onselect-mode"; addEventListener("TabSelect", e => { addEventListener("click", e => { |
bunda1 > 17-10-2015 13:49:42 |
KOMMEHTATOP пишет
Код при переключении на вкладку делает Scroll to Top и обнавляет вкладку, код также должен обнавлять вкладку по ПКМ на вкладке но на FF41 это не работает. |
Nero Wolfe > 17-12-2015 17:58:21 |
Привет. bunda1 пишет
|
mahtanoronra > 01-03-2017 13:40:35 |
bunda1 пишет
кажется это кнопка работает не полностью на 45 мозиле. не все вкладки открываются справа от текущей. кажется это код работает Выделить код Код:// Открывать любую новую вкладку справа от текущей, от 25.11.2015. ................................ addEventListener("TabOpen", (e)=> { var newTab = e.target, tabpos = gBrowser.selectedTab._tPos, err = new Error().stack; // если восстановление сессии или открыть всё во вкладках из папки закладок if ( /ssi_restore|openContainer/.test(err) ) return; // if ( tabpos == 0 && lab == newTabLab ) return; // если восстановление сессии // if ( tabpos == 0 && lab == '' ) return; // если восстановление сессии с Bookmarks Tab // if ( new Error().stack.indexOf("openContainer") !== -1 ) return; // если открыть всё во вкладках из папки закладок // if ( /handleLinkClick/.test(new Error().stack) ) return; // если открыть ссылку по СКМ /undoCloseTab/.test(err) ? setTimeout(()=> gBrowser.moveTabTo(newTab, tabpos + 1), 50) // если восстановление вкладки : gBrowser.moveTabTo(newTab, tabpos + 1); // автоматически закрывать "custombutton" вкладку if ( lab.startsWith("custombutton://%") ) setTimeout(function() gBrowser.removeTab( newTab ), 0); }, false, gBrowser.tabContainer ); |
vitalii201 > 05-09-2019 18:15:33 |
Копировать адрес … в 69 "ломает" меню табов. Можно исправить? |
bunda1 > 08-11-2022 21:10:04 |
Исправил Копировать информацию о вкладках+ для FF64+ |