>Форум 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 |
Есть джетпак 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 |
bunda1 > 12-04-2012 19:30:07 |
Kamui |
iDev.Pi > 12-04-2012 22:41:16 |
Kamui |
Kamui > 13-04-2012 00:29:06 |
Да просто там TU/TMP действительно комбайны, а хотелось бы чего-то попроще, с возможностью настройки порядка открытия/закрытия вкладок, да несколько пунктов в контекстном меню вкладок |
bunda1 > 13-04-2012 08:08:30 |
Что конкретно нужно? |
Kamui > 13-04-2012 08:42:24 |
Да ладно, все-таки многовато надо будет для 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 |
курсором мыши -> наведением курсора
about:config -> browser.tabs.insertRelatedAfterCurrent ?
about:config -> browser.tabs.selectOwnerOnClose ? |
bunda1 > 20-04-2012 19:31:23 |
Ok
А вот и нет!
А вот и нет! |
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 > 11-05-2012 23:55:10 |
Это сложно, надо подумать. |
bunda1 > 14-05-2012 01:31:13 |
Выделить код Код://ЛКМ откроет все ссылки в новых неактивных вкладках (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 |
Я исправил: Сегодня 00:31:13
Выделить код Код://Открывать закладки в новых фоновых вкладках...................................................................... 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 > 14-05-2012 21:22:20 |
voqabuhe |
voqabuhe > 14-05-2012 22:39:37 |
bunda1 |
voqabuhe > 25-05-2012 21:49:40 |
bunda1
|
bunda1 > 26-05-2012 10:20:24 |
voqabuhe |
voqabuhe > 11-06-2012 11:41:48 |
Вопрос снимается, уже привык к стандартной работе кнопок. |
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 |
Есть на СКМ, а двойной ЛКМ меняет размер окна. |
iDev.Pi > 25-07-2012 12:48:16 |
voqabuhe |
voqabuhe > 25-07-2012 12:55:16 |
А, точно, я уже и забыл, что они могут быть в другом месте. |
villa7 > 25-07-2012 13:43:11 |
iDev.Pi |
bunda1 > 25-07-2012 19:02:36 |
villa7 |
villa7 > 25-07-2012 20:26:12 |
bunda1 |
bunda1 > 25-07-2012 20:48:45 |
villa7 |
bunda1 > 25-07-2012 21:19:16 |
Поправил код: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 |
кнопка глючит с расширением 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 |
Во, вроде блокируется скрытый текст Выделить код Код: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 |
Хмм ? скрытый текст Выделить код Код: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 |
Эта правда. |
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 |
Ещё как пригодится.Спасибо огромное это больше на что я рассчитывал. |
bunda1 > 06-03-2013 22:48:35 |
about:config |
questman > 07-03-2013 08:29:42 |
Спасибо! |
bunda1 > 07-03-2013 20:44:45 |
Полезная вещь, а можно сделать её более затейливой - чтобы проверяла страницу на изменения и обновляла только тогда если изменения обнаружены или хотя бы что бы обновления происходили не заметно без вращения индикатора на табе, а то напрягает. Если конечно это не слишком сложно |
vom > 08-03-2013 01:48:29 |
Dumby |
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 |
В точку, спасибо большое. |
villa7 > 09-03-2013 11:20:36 |
Dumby скрытый текст 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); |
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 |
Спасибо, спасибо |
questman > 18-03-2013 19:41:06 |
Это очень полезный код.Но при "Открыть всё во вкладках" порядок вкладок меняется с ног на голову. |
bunda1 > 19-03-2013 22:10:24 |
questman |
Infocatcher > 19-03-2013 23:33:45 |
Кривая распорка: Выделить код Код: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 |
Спасибо!!! |
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 |
Да,оно!Спасибо! |
MySh > 01-12-2013 01:20:59 |
К сожалению эта кнопка не работает в Seamonkey 2.22. |
bunda1 > 01-12-2013 02:01:22 |
Код изменяет внутренние функции Firefox и если openNode is undefined то это значит что в Seamonkey такой функции нет. |
Maxut > 15-03-2014 19:19:42 |
Удобный код .Спасибо. Выделить код Код:["адрес и название как BBCode", copySingle.replace("(", '(\'[url="\' + ') + url + ' + \'"]\' + ' + tab + 'label + "[/url]");'], а так работает (без кавычек) url="....+ \'"] Выделить код Код:["адрес и название как BBCode", copySingle.replace("(", '(\'[url=\' + ') + url + ' + \']\' + ' + tab + 'label + "[/url]");'], |
difabor > 20-04-2014 23:27:08 |
Очень полезная кнопка, но не хватает одной важной составляющей - выделенного текста: "Копировать адрес, название и выделенный текст как BBCode". |
etoins srldu > 23-04-2014 22:52:14 |
Нужный пункт Адрес и редактированное название как 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 > 24-04-2014 19:46:43 |
Да, не открываю. |
bunda1 > 11-08-2014 22:36:11 |
Копировать информацию о вкладках+( Firefox 17 + ) Лишние пункты в подменю можно просто удалить из кода: Использование: положите код в любую Custom Buttons кнопку, в инициализацию. Не обязательно создавать новую CB кнопку, можно использовать уже существующую. Выделить код Код:// Добавить подменю "Копировать адрес и название как BBCode или" в контекстном меню вкладки, от 17.07.2015. ................................ (function( 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 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.createElement("menupopup") ); for ( var key in data ) { if ( key.startsWith("separator") ) { menuPopup.appendChild(document.createElement("menuseparator")); continue }; var menuitem = menuPopup.appendChild( document.createElement("menuitem") ); menuitem.setAttribute("label", data[key] ); menuitem.arg = key; }; addEventListener("click", function(e) { var info, tab = document.popupNode, 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(); break; case "shortLabel": info = lab.slice(0,50) + (lab.length > 50 ? ' ......' : ""); break; case "tabInfo": info = getBuildInfo(tab, arg); break; case "tabInfoHtml": info = getBuildInfo(tab, arg); break; case "tabInfoBbcode": info = getBuildInfo(tab, arg); break; case "tabChangedInfoBbcode": info = getBuildInfo({__proto__: tab, label: custombuttons.promptBox("Измените название вкладки:", null, lab)[1]}, arg); break; case "allTabsURL": info = tabs.map(function(node) node.linkedBrowser.currentURI.spec ).join("\n"); break; case "allTabsLabels": info = tabs.map(function(node) node.label ).join("\n"); break; case "allTabsInfo": info = tabs.map(function(node) getBuildInfo(node, arg) ).join("\n"); break; case "allTabsInfoHtml": info = tabs.map(function(node) getBuildInfo(node, arg) ).join("\n"); break; case "allTabsInfoBbcode": info = tabs.map(function(node) getBuildInfo(node, arg) ).join("\n"); break; } gClipboard.write( info ); tabContextMenu.hidePopup(); }, false, menu ); function copyShortUrl() { var xhr = new XMLHttpRequest(); xhr.open('POST', 'https://www.googleapis.com/urlshortener/v1/url?key=AIzaSyC7uWVak6m9AFIMORinK4gfNZZ5IrNPgKA', true); xhr.setRequestHeader("Content-type", "application/json"); var request = { longUrl:content.location.href, key:'{YOUR_API_KEY}' } xhr.onload = xhr.onerror = function() { try { gClipboard.write( JSON.parse(xhr.response).id ) } catch (e) { custombuttons.alertSlide("Ошибка, не удалось получить короткий адрес","") }; } xhr.send( JSON.stringify(request) ); }; function getBuildInfo( 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; }; })(document.getElementById("tabContextMenu")); |
HaGEN > 22-10-2014 09:12:29 |
Тоже хотелось бы избавиться от TU ибо почти ничего их того множества опций не нужно или могу обойтись, очень редко юзаецца. Но есть необходимые, мож уже есть кнопки для этого: |
bunda1 > 23-10-2014 19:58:01 |
Выделить код Код: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 |
Вот исправил: Копировать информацию о вкладках |
KOMMEHTATOP > 15-10-2015 18:04:53 |
Dexu
Можно пожалуйста по подробнее как сделать Scroll to Top? скрытый текст (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); |
bunda1 > 17-10-2015 13:49:42 |
Код при переключении на вкладку делает Scroll to Top и обнавляет вкладку, код также должен обнавлять вкладку по ПКМ на вкладке но на FF41 это не работает. |
Nero Wolfe > 17-12-2015 17:58:21 |
Привет.
|
mahtanoronra > 01-03-2017 13:40:35 |
кажется это кнопка работает не полностью на 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 |
Копировать адрес … в |