前往
大廳
主題

火狐UC腳本:恢復已關閉分頁de可移動按鈕

—— | 2015-09-13 15:27:03 | 巴幣 0 | 人氣 314

打開記事本,檔名:UndoCloseTabBtn,附檔名:.uc.js

// ==UserScript==
// @namespace            
UndoCloseTabBtn.uc.js
// @description          恢復已關閉分頁de可移動按鈕
// @charset              UTF-8
// @Compatibility        FF29+
// ==/UserScript==
(function() {
    var buttonAttrs = {
        id: "undoclosetab-button",
        label: "恢復已關閉的分頁",
        tooltiptext: "\u64A4\u9500\u5173\u95ED\u6807\u7B7E\u9875",
        class: "toolbarbutton-1 chromeclass-toolbar-additional",
        removable: "true",
        type: "menu-button", /
/點擊按鈕恢復最後一次關閉的分頁,如果想左鍵恢復最後一次關閉的分頁,右鍵打開已關閉分頁列表,
                                /
/ 那麼改為(context: "_child",)
        image: "data:image/png
;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAatJREFUeNpi/P//PwMlgImBQsACIrRNbMHOuHb2CCNMQsvYxgFIJQCxPRALAPFBIJ4AVHMApgbkerALWFhYwBgG9Mwd5gP5+4E4HogVgFgAiP1BYiA5ZBcwgkwxtnGFBYQgEK8HYgcCLl9w7uieRJBesLVMUNsZGZkP/v//Vw+mSkFZ7VWQv99NEHvHrj2K165ckIFKJZjYe2wE0hvAOpmZWeGuh4WrnYPTza7agiVA5nYQP9LP2T6roi373OkTSiA+v6BgPtwAFlYWFPclJCSdSInwmcbIyLgYSfjsyUs3OS5dONMK4vz6+cscHo0gFyDjxYsXW9h7hy+y8wpDSSQ37jxYCVPDw8v3Fx6NyDGAD6xevdYJplZJWeUx3IC9G5cux6WJkXEZnP3v378mZhZmMNvSzHg73ACgX6MI2e4ZljgfGEMSIBeoqmk+ifB1mgM3gBDwiUybD02VDHz8fF+r8lOmAy29Dk8H+EBgbOZ+WMLi5eP/mp2euFFcRHACA3J6xgeOnr06JbOs+R0Iv/vwaTpQvTyKXkIGgDS8+fCpD4SBbC40OQaAAAMAZs+cq1JeSBMAAAAASUVORK5CYII=",
        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(/._rootElt.*/, "") + ")");
     
    // 來自 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) el.setAttribute(n, attr[n]));
        return el;
    }
})();

創作回應

更多創作