阅读:5792回复:15
【已解决】UndoCloseTabBtn.uc脚本在65Nightly下不能运行,请大家帮忙,谢谢// ==UserScript== // @Name UndoCloseTabBtn.uc.js // @namespace UndoCloseTab@gmail.com // @description 可移动恢复已关闭标签按钮 // @author defpt // @charset UTF-8 // @Compatibility FF57+ // @version v2018.04.04 更新兼容57+ by runningcheese // @version v2014.09.15 // ==/UserScript== (function() { var buttonAttrs = { id: "undoclosetab-button", label: "恢复最后关闭的标签", tooltiptext: "左键:恢复最后关闭的标签\n右键:显示关闭标签菜单", class: "toolbarbutton-1 chromeclass-toolbar-additional", removable: "true", context: "_child", //点击按钮恢复最后一次关闭的标签 //如果想左键恢复最后一次关闭的标签,右键打开已关闭标签列表,那么改为(context: "_child",) //如果想改成菜单形式的,那么改为(type: "menu-button",) image: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAABuUlEQVRIib2VL08DQRDFKxANqahErijJte/N5pI2oQlNuA+AqEBUkHAJAkMIAhJERYNBICr4ABUIFKlEIBA4DAJRgUBUIJpgKioqitkry8H9CxcmmeQutzu/eTO5mULhP4xkA0Ar6ruIOCR3SZ4A6JrnRhaAR3JqQ5RSRQDHJMckFxE+JtlzXbccCwDQMRemAFpaa5J8jQkc9ncRaccBfOvw1HjwPhORvjnTAFAB0BGRfkjdXEQOo2rs/5YZgIGIbEUlJiKOAc3MnQ8Ae0kKlvUFsBZb2y9Qm+Tc3Jv86AnJo4ja3lar1fU0EJKXlvLz8MdeTAOHnuetJAFc1y1bPZlkASwAXKVU0bPuuN/ojuOoOE+jAsCOBfDTJJXJarXahqX8NHeA+UEDBd3cASJyYCnYzx0AYBAAtNbNvINvknwxgKd6vb6aK4DkfZB95EyysimJyBmAUprgZkcEwe+SDq8FUgG8kfSizppF9Gg1dpI4vwBUSI7sMUzy2YzsjvELkkNrwAVjfjuN4mCu3GRYOCOtNVMFD6lpkbwOLaDlIiL5AMBPM0ZiTSlVNPX2SHpa66ZSqvinoHnZJ3jLDwknYoRNAAAAAElFTkSuQmCC", command: "History:UndoCloseTab" }; var uCTBtn = $C('toolbarbutton', buttonAttrs); var popup = uCTBtn.appendChild($C("menupopup", { oncommand: "event.stopPropagation();", onpopupshowing: "this.parentNode.populateUndoSubmenu();", context: "", tooltip: "bhTooltip", popupsinherittooltip: "true" })); uCTBtn._getClosedTabCount = HistoryMenu.prototype._getClosedTabCount; uCTBtn.populateUndoSubmenu = eval("(" + HistoryMenu.prototype.populateUndoSubmenu.toString().replace(/\.undoTabMenu/g, "") + ")"); // 来自 User Agent Overrider 扩展 const log = function() { dump(Array.slice(arguments).join(' ') + '\n'); }; const trace = function(error) { log(error); log(error.stack); }; const ToolbarManager = (function() { /** * Remember the button position. * This function Modity from addon-sdk file lib/sdk/widget.js, and * function BrowserWindow.prototype._insertNodeInToolbar */ let layoutWidget = function(document, button, isFirstRun) { // Add to the customization palette let toolbox = document.getElementById('navigator-toolbox'); toolbox.palette.appendChild(button); // Search for widget toolbar by reading toolbar's currentset attribute let container = null; let toolbars = document.getElementsByTagName('toolbar'); let id = button.getAttribute('id'); for (let i = 0; i < toolbars.length; i += 1) { let toolbar = toolbars<i>; if (toolbar.getAttribute('currentset').indexOf(id) !== -1) { container = toolbar; } } // if widget isn't in any toolbar, default add it next to searchbar if (!container) { if (isFirstRun) { container = document.getElementById('nav-bar'); } else { return; } } // Now retrieve a reference to the next toolbar item // by reading currentset attribute on the toolbar let nextNode = null; let currentSet = container.getAttribute('currentset'); let ids = (currentSet === '__empty') ? [] : currentSet.split(','); let idx = ids.indexOf(id); if (idx !== -1) { for (let i = idx; i < ids.length; i += 1) { nextNode = document.getElementById(ids<i>); if (nextNode) { break; } } } // Finally insert our widget in the right toolbar and in the right position container.insertItem(id, nextNode, null, false); // Update DOM in order to save position // in this toolbar. But only do this the first time we add it to the toolbar if (ids.indexOf(id) === -1) { container.setAttribute('currentset', container.currentSet); document.persist(container.id, 'currentset'); } }; let addWidget = function(window, widget, isFirstRun) { try { layoutWidget(window.document, widget, isFirstRun); } catch(error) { trace(error); } }; let removeWidget = function(window, widgetId) { try { let widget = window.document.getElementById(widgetId); widget.parentNode.removeChild(widget); } catch (error) { trace(error); } }; let exports = { addWidget: addWidget, removeWidget: removeWidget, }; return exports; })(); ToolbarManager.addWidget(window, uCTBtn, false); document.insertBefore(document.createProcessingInstruction('xml-stylesheet', 'type="text/css" href="data:text/css;utf-8,' + encodeURIComponent('\ #undoclosetab-button menuitem {max-width: 240px;}\ ') + '"'), document.documentElement); function $C(name, attr) { var el = document.createElement(name); if (attr) Object.keys(attr).forEach(function(n) { return el.setAttribute(n, attr[n]);}); return el; } })();</i></i> |
|
1楼#
发布于:2019-07-10 22:52
68需要把1楼33行
uCTBtn.populateUndoSubmenu = eval('(' + HistoryMenu.prototype.populateUndoSubmenu.toString().replace(/\.undoTabMenu/g, '') + ')');改成 uCTBtn.populateUndoSubmenu = eval('(' + HistoryMenu.prototype.populateUndoSubmenu.toString().replace(/\.undoTabMenu/g, '').replace(/\.menupopup/g, '.firstChild') + ')');才能右键弹出列表 |
|
2楼#
发布于:2019-05-25 19:08
|
|
3楼#
发布于:2019-05-25 18:27
|
|
4楼#
发布于:2019-05-25 18:26
|
|
5楼#
发布于:2019-05-25 18:12
|
|
6楼#
发布于:2019-05-25 15:24
|
|
7楼#
发布于:2019-05-25 15:23
|
|
8楼#
发布于:2019-05-25 15:06
|
|
9楼#
发布于:2019-05-25 14:36
|
|
10楼#
发布于:2019-05-25 13:05
kidzgy:67下profiles文件夹里没有这个文件夹了,藏在\LocalAppData里,也被我删除了,没有效果回到原帖 这个可以用,我的67版本正常使用 // ==UserScript== // @Name UndoCloseTabBtn.uc.js // @namespace UndoCloseTab@gmail.com // @description 可移动恢复已关闭标签按钮 // @author defpt // @charset UTF-8 // @Compatibility FF57+ // @version v2018.04.04 更新兼容57+ by runningcheese // @version v2014.09.15 // ==/UserScript== (function() { if(document.getElementById('undoclosetab-button')) return; CustomizableUI.createWidget({ id: 'undoclosetab-button', label: '恢复最后关闭的标签', tooltiptext: '左键:恢复最后关闭的标签\n右键:显示关闭标签菜单', defaultArea : CustomizableUI.AREA_NAVBAR, onCreated: (uCTBtn) => { uCTBtn.setAttribute('context', '_child'); //点击按钮恢复最后一次关闭的标签 //如果想左键恢复最后一次关闭的标签,右键打开已关闭标签列表,那么改为(context: "_child",) //如果想改成菜单形式的,那么改为(type: "menu-button",) uCTBtn.setAttribute('command', 'History:UndoCloseTab'); uCTBtn.appendChild($C('menupopup', { oncommand: 'event.stopPropagation();', onpopupshowing: 'this.parentNode.populateUndoSubmenu();', context: '', tooltip: 'bhTooltip', popupsinherittooltip: 'true' })); uCTBtn._getClosedTabCount = HistoryMenu.prototype._getClosedTabCount; uCTBtn.populateUndoSubmenu = eval('(' + HistoryMenu.prototype.populateUndoSubmenu.toString().replace(/\.undoTabMenu/g, '') + ')'); } }); document.insertBefore(document.createProcessingInstruction( 'xml-stylesheet', 'type="text/css" href="data:text/css;utf-8,' + encodeURIComponent('\ #undoclosetab-button menuitem {max-width: 240px;}\ #undoclosetab-button .toolbarbutton-icon {list-style-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAABuUlEQVRIib2VL08DQRDFKxANqahErijJte/N5pI2oQlNuA+AqEBUkHAJAkMIAhJERYNBICr4ABUIFKlEIBA4DAJRgUBUIJpgKioqitkry8H9CxcmmeQutzu/eTO5mULhP4xkA0Ar6ruIOCR3SZ4A6JrnRhaAR3JqQ5RSRQDHJMckFxE+JtlzXbccCwDQMRemAFpaa5J8jQkc9ncRaccBfOvw1HjwPhORvjnTAFAB0BGRfkjdXEQOo2rs/5YZgIGIbEUlJiKOAc3MnQ8Ae0kKlvUFsBZb2y9Qm+Tc3Jv86AnJo4ja3lar1fU0EJKXlvLz8MdeTAOHnuetJAFc1y1bPZlkASwAXKVU0bPuuN/ojuOoOE+jAsCOBfDTJJXJarXahqX8NHeA+UEDBd3cASJyYCnYzx0AYBAAtNbNvINvknwxgKd6vb6aK4DkfZB95EyysimJyBmAUprgZkcEwe+SDq8FUgG8kfSizppF9Gg1dpI4vwBUSI7sMUzy2YzsjvELkkNrwAVjfjuN4mCu3GRYOCOtNVMFD6lpkbwOLaDlIiL5AMBPM0ZiTSlVNPX2SHpa66ZSqvinoHnZJ3jLDwknYoRNAAAAAElFTkSuQmCC")}\ ') + '"'), document.documentElement); function $C(name, attr) { var el = document.createElement(name); if (attr) Object.keys(attr).forEach(function(n) { return el.setAttribute(n, attr[n]);}); return el; } })(); |
|
11楼#
发布于:2019-05-25 00:46
|
|
12楼#
发布于:2019-05-24 23:43
|
|
13楼#
发布于:2019-05-24 22:39
|
|
14楼#
发布于:2018-12-05 14:24
|
|
上一页
下一页