Автоматически перезагружать вкладку( Firefox 64+ )
Автор: Dumby, bunda1
Версия: от 09.11.2022.
Описание: Kод добавляет новый пункт Автоматически перезагружать в контекстное меню вкладки, который дает возможность автоматически перезагрузки вкладку 1 раз в минуту.

Для изменения интервала перезагрузки меняете в коде эту строку:

Выделить код

Код:

const reloadInterval = 60000; // интервал перезагрузки, 60 sek = 60000 ms


Использование: создайте новую Custom Buttons кнопку и положите код в инициализацию. Не обязательно создавать новую CB кнопку, можно использовать уже существующую.

Выделить код

Код:

// Автоматически перезагружать вкладку, от 09.11.2022. .................
((tabContextMenu, attr) => {
   var reloadInterval = 60000;  // интервал перезагрузки, 60 sek = 60000 ms

   // Создать новый пункт контекстного меню вкладки ....               
   var menuitem = document.createElementNS(xulns, "menuitem");
   menuitem.setAttribute("type", "checkbox");
   menuitem.setAttribute("label", "Автоматически перезагружать");
   tabContextMenu.insertBefore(menuitem, document.getElementById("context_closeTab")); // над каким пунктом меню показывать
   addDestructor(()=> menuitem.remove());


   // Устанавливаем где показывать пункт меню и чекбокс у пункта ....
   addEventListener("popupshowing", (e)=> {  
      var tab = e.target.triggerNode;
      tab.interval || tab.removeAttribute(attr);
      menuitem.setAttribute("checked", tab.hasAttribute(attr));
      menuitem.hidden = !tab.linkedBrowser.currentURI.scheme.startsWith("http");
   }, false, tabContextMenu); 
   

   // Функция перезагрузки ....
   menuitem.onclick =()=> {
      var tab = TabContextMenu.contextTab;

      if ( tab.hasAttribute(attr) ) { 
           clearInterval(tab.interval); 
           tab.removeAttribute(attr);
           return;
           }

      tab.interval = setInterval(()=> {
         if (tab.collapsed || !menuitem.parentNode) clearInterval(tab.interval);
         gBrowser.reloadTab(tab);
      }, reloadInterval);
      tab.setAttribute(attr, true);
   };
})(document.getElementById("tabContextMenu"), "autoReload");

Автоматически перезагружать вкладку+( Firefox 24 + )
Авторы: bunda1, Dumby
Версия: от 19.11.2015.
Описание: добавляет новый пункт Автоматически перезагружать в контекстное меню вкладки, который включает или выключает автоматическую перезагрузку вкладку 1 раз в минуту по умолчанию или в установленное вами время. Во время авто перезагрузки стандартный индикатор загрузки( троббер ) на вкладке не появляется, также прячется индикаторы которые добавляют расширения Progress Bar on Tab и Informational Tab, есть возможность прятать индикаторы загрузки которые на вкладку добавляют другие расширения.
Код также добавляет маленькую кнопку перезагрузки перед иконкой сайта на вкладке для которой включена авто перезагрузка, иконку в коде легко поменять на другую и изменить её положение относительно иконки сайта, можно выключить авто перезагрузку вкладки если кликнуть на эту кнопку.

Скриншот кнопки перезагрузки на вкладке:
RKfjZw.jpg

Для изменения стиля кнопки перезагрузки меняете в коде эти строки:

Выделить код

Код:

const reloadButtonStyle = '-moz-appearance: none !important; -moz-box-ordinal-group: 0 !important; margin-left: -1px !important; margin-right: -1px !important; padding: 0 !important; border: none !important;';
const reloadButtonIcon = "data:image/x-icon;base64,AAABAAEADAwAAAEAIACYAgAAFgAAACgAAAAMAAAAGAAAAAEAIAAAAAAAcAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAgIAAQECAAAAAAAAAAAAAAAAAAAAAAABAQIAAQICAAAAAAAAAAAAAAAAAAEBAQAAAAAEBggGDydSUhM6g40SOYONCyNRUgEDCAYAAAAAAAEBAQAAAAAAAQICAAAAAA4XIR4nXLvNJGnx/yNq9/0jaff9I2jx/x1Suc0FDh4eAAAAAAABAQIAAAAACAoGBDNluMopaOn/LWnf/jJnw90zacTdLmvf/Stq6v8jU7PJAQIEAwAAAAAAAAAAJDpVVTV27f8ta+H/Jkh9hAgJBAEGCAQAK09+gzJw4/8vb+v/ESdPVAAAAAAAAAAANFmJjDR7/P8tZcncBQcKCAAAAAAAAAAACQwLBzhyzNwyefv/HUKFjAAAAAAAAAAAOV+LjDyI//8wbc3bAgUJBgEBAAAAAAABCAsKBjx5z9s6hf//IkqIjAAAAAAAAAAAMEhcVk6c//8+ivH/J1GHigMEBAIBAAAALlV/f0SP8/9Flf//HDhZVgAAAAAAAAAACgoIBVqXzcpPqP//QHq5wBYgJR0/d7C0TJ/8/06j//9GiMzNBAYIBQAAAAABAQICAAAAABggIx5mqt/iOWiNiyAvNjBpv///Xbj//1KWz9ESHSUhAAAAAAEBAgIAAAAAAQEBAQAAAAAJCwoHOllqZRYgJR0mO0VANVVnZAcJCAYAAAAAAQEBAQAAAAAAAAAAAAAAAAECAgIBAQECAAAAAAEBAgEAAAEBAAAAAAABAQIBAQICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=";


Для удаления индикаторов загрузки вкладки при авто перезагрузке:
Используйте кнопку Attributes Inspector и определите Css селектор индикатора загрузки и добавьте в кавычках и через запятую в:

Выделить код

Код:

const throbber = [".tab-progress-box", ".tab-progress"]; // индикаторы загрузки скрываемые при автоперегрузке


Для изменения интервала перезагрузки меняете в коде эту строку:

Выделить код

Код:

const reloadInterval = 60000;   // интервал перезагрузки, 60 sek = 60000 ms


Использование: создайте новую Custom Buttons кнопку и положите код в инициализацию. Не обязательно создавать новую CB кнопку, можно использовать уже существующую.

Выделить код

Код:

// "Автоматически перезагружать" в контекстном меню вкладки, от 19.11.2015. .................
((tabContextMenu, tabs, attr) => {
   const reloadInterval = 60000;                            // интервал перезагрузки, 60 sek = 60000 ms
   const throbber = [".tab-progress-box", ".tab-progress"]; // индикаторы загрузки скрываемые при автоперегрузке 
   
   const reloadButtonStyle = "pointer-events: auto !important; -moz-appearance: none !important; -moz-box-ordinal-group: 0 !important; margin-left: -1px !important; margin-right: -1px !important; padding: 0 !important; border: none !important;";
   const reloadButtonIcon = "data:image/x-icon;base64,AAABAAEADAwAAAEAIACYAgAAFgAAACgAAAAMAAAAGAAAAAEAIAAAAAAAcAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAgIAAQECAAAAAAAAAAAAAAAAAAAAAAABAQIAAQICAAAAAAAAAAAAAAAAAAEBAQAAAAAEBggGDydSUhM6g40SOYONCyNRUgEDCAYAAAAAAAEBAQAAAAAAAQICAAAAAA4XIR4nXLvNJGnx/yNq9/0jaff9I2jx/x1Suc0FDh4eAAAAAAABAQIAAAAACAoGBDNluMopaOn/LWnf/jJnw90zacTdLmvf/Stq6v8jU7PJAQIEAwAAAAAAAAAAJDpVVTV27f8ta+H/Jkh9hAgJBAEGCAQAK09+gzJw4/8vb+v/ESdPVAAAAAAAAAAANFmJjDR7/P8tZcncBQcKCAAAAAAAAAAACQwLBzhyzNwyefv/HUKFjAAAAAAAAAAAOV+LjDyI//8wbc3bAgUJBgEBAAAAAAABCAsKBjx5z9s6hf//IkqIjAAAAAAAAAAAMEhcVk6c//8+ivH/J1GHigMEBAIBAAAALlV/f0SP8/9Flf//HDhZVgAAAAAAAAAACgoIBVqXzcpPqP//QHq5wBYgJR0/d7C0TJ/8/06j//9GiMzNBAYIBQAAAAABAQICAAAAABggIx5mqt/iOWiNiyAvNjBpv///Xbj//1KWz9ESHSUhAAAAAAEBAgIAAAAAAQEBAQAAAAAJCwoHOllqZRYgJR0mO0VANVVnZAcJCAYAAAAAAQEBAQAAAAAAAAAAAAAAAAECAgIBAQECAAAAAAEBAgEAAAEBAAAAAAABAQIBAQICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=";
             
   
   // Создать новый пункт контекстного меню вкладки ....               
   const menuitem = document.createElement("menuitem");
   menuitem.setAttribute("type", "checkbox");
   menuitem.setAttribute("label", "Автоматически перезагружать");
   menuitem.onclick =()=> toggleAutoReload(document.popupNode);
   tabContextMenu.insertBefore(menuitem, document.getElementById("context_bookmarkAllTabs")); // над каким пунктом меню показывать

   
   // Устанавливаем где показывать пункт меню и чекбокс у пункта ....
   addEventListener("popupshowing", (e)=> {  
      var tab = e.target.triggerNode;
      menuitem.hidden = !tab.linkedBrowser.currentURI.scheme.startsWith("http")             
      menuitem.setAttribute("checked", tab.hasAttribute(attr));
   }, false, tabContextMenu); 
   
      
   // Добавлять или удалять кнопку и атрибут перегрузки на вкладку, добавлять обработчик на кнопку .... 
   function toggleIconAndAttribute(tab) {
      var hbox = document.getAnonymousElementByAttribute(tab, "class", "tab-content");

      if ( tab.hasAttribute(attr) ) {   // удалить кнопку и атрибут
           hbox.removeChild(tab.querySelector("#tabReloadButton"));
           tab.removeAttribute(attr); 
           return;
           }             

      var reloadButton = document.createElement("toolbarbutton"); // создать кнопку 
      reloadButton.setAttribute('image', reloadButtonIcon);
      reloadButton.setAttribute('style', reloadButtonStyle);
      reloadButton.setAttribute('id', 'tabReloadButton');      
      hbox.appendChild(reloadButton);
      
      tab.setAttribute(attr, 'true'); // добавить атрибут и обработчик
      reloadButton.onclick =()=> toggleAutoReload(tab);      
   };
     
      
   // Восстановить авто перегрузку табов и иконку после старта браузера и после перемещения вкладки ....
   function restoreAutoReload(e) {
      var tab = e.target;
      if ( !tab.hasAttribute(attr) || tab.querySelector("#tabReloadButton") ) return;

      tab.removeAttribute(attr); 
      toggleAutoReload(tab);
   };
   addEventListener('TabMove', restoreAutoReload, false, tabs);
   addEventListener('SSTabRestored', restoreAutoReload, false, tabs);
          

   // Стиль удаляет разные индикаторы загрузки вкладки при автоперегрузке ....
   throbber.forEach((m,i)=> throbber[i] = '.tabbrowser-tab[autoReload]:not([busy]) ' + m);               
   var str = throbber + '{-moz-appearance: none !important; display: none !important;}'; 

   const sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService);
   var uri = makeURI("data:text/css," + encodeURIComponent(str));
   sss.loadAndRegisterSheet(uri, 0);     
    
   
   // Переключать авто перегрузку таба ....   
   function toggleAutoReload(tab) {
      clearInterval(tab.interval), toggleIconAndAttribute(tab);

      if ( !tab.hasAttribute(attr) ) return;
            
      tab.interval = setInterval(()=> {
         if (tab.collapsed || !menuitem.parentNode) clearInterval(tab.interval);
         gBrowser.reloadTab(tab);
         tab.removeAttribute("busy");
      }, reloadInterval );
   };
   
   
   // Удалить изменения при удаления кода ....   
   addDestructor(()=> { menuitem.remove(); sss.unregisterSheet(uri, 0); try{ document.querySelector("#tabReloadButton").remove() } catch(e){} });
             
})(document.getElementById("tabContextMenu"), gBrowser.tabContainer, "autoReload");
bunda1 пишет

Автоматически перезагружать вкладку+

Немножко поворчу :)

скрытый текст
Смотри, что происходит:

Допустим, клик ПКМ по неактивной вкладке и клик по «Автоматически перезагружать»,
тогда «маленькая иконка перезагрузки» появляется не в этой вкладке, а в активной.
Кстати, вроде не «перед иконкой сайта», а после неё.

Клик по menuitem «Автоматически перезагружать» записывает id интервала перезагрузки как своё свойство.
Если захотелось перезагружать более чем одну вкладку, интервал каждый раз будет переписан на новый,
а предыдущий пропадёт и отменить перезагрузку можно только у последней перезагружаемой.
При переинициализации кнопки интервал тоже пропадает вместе со старым menuitem.

А вот если закрыть перезагружаемую вкладку, то наоборот - интервал продолжает работать,
не находит linkedBrowser и ругается в консоль.

А стили да, стили хороши.

Подумал, что было бы хорошо, если бы «маленькая иконка перезагрузки» кликалась.
Вот, может доделаешь, если что не так...

Выделить код

Код:

(function() {
    const reloadInterval = 1 * 60 * 1000;

    const reloadButtonIcon = "data:image/x-icon;base64,AAABAAEADAwAAAEAIACYAgAAFgAAACgAAAAMAAAAGAAAAAEAIAAAAAAAcAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAgIAAQECAAAAAAAAAAAAAAAAAAAAAAABAQIAAQICAAAAAAAAAAAAAAAAAAEBAQAAAAAEBggGDydSUhM6g40SOYONCyNRUgEDCAYAAAAAAAEBAQAAAAAAAQICAAAAAA4XIR4nXLvNJGnx/yNq9/0jaff9I2jx/x1Suc0FDh4eAAAAAAABAQIAAAAACAoGBDNluMopaOn/LWnf/jJnw90zacTdLmvf/Stq6v8jU7PJAQIEAwAAAAAAAAAAJDpVVTV27f8ta+H/Jkh9hAgJBAEGCAQAK09+gzJw4/8vb+v/ESdPVAAAAAAAAAAANFmJjDR7/P8tZcncBQcKCAAAAAAAAAAACQwLBzhyzNwyefv/HUKFjAAAAAAAAAAAOV+LjDyI//8wbc3bAgUJBgEBAAAAAAABCAsKBjx5z9s6hf//IkqIjAAAAAAAAAAAMEhcVk6c//8+ivH/J1GHigMEBAIBAAAALlV/f0SP8/9Flf//HDhZVgAAAAAAAAAACgoIBVqXzcpPqP//QHq5wBYgJR0/d7C0TJ/8/06j//9GiMzNBAYIBQAAAAABAQICAAAAABggIx5mqt/iOWiNiyAvNjBpv///Xbj//1KWz9ESHSUhAAAAAAEBAgIAAAAAAQEBAQAAAAAJCwoHOllqZRYgJR0mO0VANVVnZAcJCAYAAAAAAQEBAQAAAAAAAAAAAAAAAAECAgIBAQECAAAAAAEBAgEAAAEBAAAAAAABAQIBAQICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=";
    const reloadButtonStyle = '-moz-appearance: none !important; margin-left: -1px !important; margin-right: -1px !important; padding: 0 !important; border: none !important;';
    const reloadButtonClass = "cb-reload-icon";

    const menuitemInsertPoint = document.getElementById("context_bookmarkAllTabs");
    const attr = "auto-reload-interval";
    const tabContextMenu = document.getElementById("tabContextMenu");
    const menuitemId = "tabAutoReload";
    const sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService);
    const type = sss.AGENT_SHEET;
    const css = '\
        .tabbrowser-tab[label="%label%"] .tab-throbber { -moz-appearance: none !important; display: none !important; }\
        .tabbrowser-tab[label="%label%"] .tab-icon-image { display: block !important; }\
    ';
    function createNode(nodeName, attrs) {
        var node = document.createElement(nodeName);
        for (var attr in attrs) node.setAttribute(attr, attrs[attr]);
        return node;
    }
    var menuitem = createNode("menuitem", {
        id: menuitemId,
        type: "checkbox",
        label: "Автоматически перезагружать"
    });
    function onPopupShowing(e) {
        var popup = e.target;
        popup.insertBefore(menuitem, menuitemInsertPoint);
        var tab = popup.triggerNode;
        menuitem.hidden = tab.linkedBrowser.currentURI.scheme.slice(0, 4) != "http";
        menuitem.setAttribute("checked", tab.hasAttribute(attr));
    }
    function onPopupHidden(e) {
        e.target.removeChild(menuitem);
    }
    function reload(tab) {
        var style = css.replace(/%label%/g, tab.label);
        var uri = makeURI("data:text/css," + encodeURIComponent(style));
        sss.loadAndRegisterSheet(uri, type);
        tab.linkedBrowser.addEventListener("pageshow", function(e) {
            this.removeEventListener(e.type, arguments.callee, false);
            if (sss.sheetRegistered(uri, type)) sss.unregisterSheet(uri, type);
        }, false);
        gBrowser.reloadTab(tab);
    }
    function toggleAutoReload(e) {
        var tab = e.target.parentNode.triggerNode;
        var interval = tab.getAttribute(attr);
        if (interval) {
            clearInterval(interval);
            tab.removeAttribute(attr);
            var btn = tab.reloadButton;
            btn.parentNode.removeChild(btn);
            delete tab.reloadButton;
        } else {
            interval = setInterval(reload, reloadInterval, tab);
            tab.setAttribute(attr, interval);
            var reloadButton = createNode("toolbarbutton", {
                class: reloadButtonClass,
                image: reloadButtonIcon,
                style: reloadButtonStyle
            });
            var tabIconImage = document.getAnonymousElementByAttribute(tab, "class", "tab-icon-image");
            tabIconImage.parentNode.insertBefore(reloadButton, tabIconImage);
            tab.reloadButton = reloadButton;
            addEventListener("mousedown", onReloadButtonClick, true, tab);
        }
    }
    function onReloadButtonClick(e) {
        var node = e.originalTarget;
        if (node.className != reloadButtonClass || e.button) return;
        e.stopPropagation();
        var parent = node.parentNode;
        if (!parent) return;
        var tab = parent.parentNode.parentNode;
        clearInterval(tab.getAttribute(attr));
        parent.removeChild(node);
        tab.removeAttribute(attr);
        delete tab.reloadButton;
        removeEventListener("mousedown", onReloadButtonClick, true, tab);
    }
    function onTabClose(e) {
        var tab = e.target;
        var interval = tab.getAttribute(attr);
        if (interval) clearInterval(interval);
        removeEventListener("mousedown", onReloadButtonClick, true, tab);
    }
    Array.slice(gBrowser.tabs).forEach(function(tab) {
        if (tab.reloadButton) addEventListener("mousedown", onReloadButtonClick, true, tab);
    });
    addEventListener("command", toggleAutoReload, false, menuitem);
    addEventListener("popupshowing", onPopupShowing, false, tabContextMenu);
    addEventListener("popuphidden", onPopupHidden, false, tabContextMenu);
    addEventListener("TabClose", onTabClose, false, gBrowser.tabContainer);
})();

Супер, что я без тебя делал. Отлично. А то у меня кроме как на FF17 иконка не хотела устанавливаться перед иконкой сайта, а это ни есть хорошо. А про таймер и закрытие таба я и вовсе не подумал, мда.

Только если переместить или закрепить вкладку пропадает иконка но это легко исправить:

Выделить код

Код:

// Восстанавливать иконку перезагрузки после перемещения вкладки ....
addEventListener('TabMove', function(e) { 
     var aTab = e.originalTarget;
     if ( aTab.hasAttribute("autoReload") ) ..........
}, false, gBrowser.tabContainer );

И код как то блокирует изменение иконки сайта при переходе на другой сайт в кладке, и я не  понимаю почему это происходит.

Вот если бы кто сделал так, чтобы включенность авто перезагрузки оставалась и после перезагрузки или выключения браузера. Хотя можно запомнить в about:config нужные табы но наверно есть более красивое решение, вот как тут https://github.com/alice0775/userChrome … mod1.uc.js

bunda1

ОК, вот, вроде немного получше...

скрытый текст

Выделить код

Код:

(function() {
    const reloadInterval = 1 * 60 * 1000;

    const reloadButtonIcon = "data:image/x-icon;base64,AAABAAEADAwAAAEAIACYAgAAFgAAACgAAAAMAAAAGAAAAAEAIAAAAAAAcAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAgIAAQECAAAAAAAAAAAAAAAAAAAAAAABAQIAAQICAAAAAAAAAAAAAAAAAAEBAQAAAAAEBggGDydSUhM6g40SOYONCyNRUgEDCAYAAAAAAAEBAQAAAAAAAQICAAAAAA4XIR4nXLvNJGnx/yNq9/0jaff9I2jx/x1Suc0FDh4eAAAAAAABAQIAAAAACAoGBDNluMopaOn/LWnf/jJnw90zacTdLmvf/Stq6v8jU7PJAQIEAwAAAAAAAAAAJDpVVTV27f8ta+H/Jkh9hAgJBAEGCAQAK09+gzJw4/8vb+v/ESdPVAAAAAAAAAAANFmJjDR7/P8tZcncBQcKCAAAAAAAAAAACQwLBzhyzNwyefv/HUKFjAAAAAAAAAAAOV+LjDyI//8wbc3bAgUJBgEBAAAAAAABCAsKBjx5z9s6hf//IkqIjAAAAAAAAAAAMEhcVk6c//8+ivH/J1GHigMEBAIBAAAALlV/f0SP8/9Flf//HDhZVgAAAAAAAAAACgoIBVqXzcpPqP//QHq5wBYgJR0/d7C0TJ/8/06j//9GiMzNBAYIBQAAAAABAQICAAAAABggIx5mqt/iOWiNiyAvNjBpv///Xbj//1KWz9ESHSUhAAAAAAEBAgIAAAAAAQEBAQAAAAAJCwoHOllqZRYgJR0mO0VANVVnZAcJCAYAAAAAAQEBAQAAAAAAAAAAAAAAAAECAgIBAQECAAAAAAEBAgEAAAEBAAAAAAABAQIBAQICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=";
    const reloadButtonStyle = '-moz-appearance: none !important; margin-left: -1px !important; margin-right: -1px !important; padding: 0 !important; border: none !important;';
    const reloadButtonClass = "cb-reload-icon";

    const tabContextMenu = document.getElementById("tabContextMenu");
    const menuitemInsertPoint = document.getElementById("context_bookmarkAllTabs");
    const menuitemId = "tabAutoReload";
    const attr = "auto-reload-interval";

    function createNode(nodeName, attrs) {
        var node = document.createElement(nodeName);
        for (var attr in attrs) node.setAttribute(attr, attrs[attr]);
        return node;
    }
    var menuitem = createNode("menuitem", {
        id: menuitemId,
        type: "checkbox",
        label: "Автоматически перезагружать"
    });
    function onPopupShowing(e) {
        var popup = e.target;
        if (popup != tabContextMenu) return;
        popup.insertBefore(menuitem, menuitemInsertPoint);
        var tab = popup.triggerNode;
        menuitem.hidden = tab.linkedBrowser.currentURI.scheme.slice(0, 4) != "http";
        menuitem.setAttribute("checked", tab.hasAttribute(attr));
    }
    function onPopupHidden(e) {
        var popup = e.target;
        if (popup == tabContextMenu) popup.removeChild(menuitem);
    }
    function reload(tab) {
        gBrowser.reloadTab(tab);
    }
    function toggleAutoReload(e) {
        var tab = e.target.parentNode.triggerNode;
        var interval = tab.getAttribute(attr);
        interval ? clearTab(tab) : initTab(tab);
    }
    function initTab(tab, noInt) {
        if (!noInt) {
            var interval = setInterval(reload, reloadInterval, tab);
            tab.setAttribute(attr, interval);
        }
        var n = tab.tcn = {};
        var nodes = {
            parent: "tab-content",
            throbber: "tab-throbber",
            image: "tab-icon-image",
        }
        for (var prop in nodes)
            n[prop] = document.getAnonymousElementByAttribute(tab, "class", nodes[prop]);
        n.button = createNode("toolbarbutton", {
            class: reloadButtonClass,
            image: reloadButtonIcon,
            style: reloadButtonStyle
        });
        n.parent.removeChild(n.throbber)
        n.parent.insertBefore(n.button, n.image);
        addEventListener("mousedown", onReloadButtonClick, true, tab);
    }
    function clearTab(tab, noInt) {
        if (!noInt) {
            clearInterval(tab.getAttribute(attr));
            tab.removeAttribute(attr);
        }
        removeEventListener("mousedown", onReloadButtonClick, true, tab);
        var n = tab.tcn;
        if (!n) return;
        n.parent.removeChild(n.button);
        n.throbber.removeAttribute("busy");
        n.parent.insertBefore(n.throbber, n.image);
        delete tab.tcn;
    }
    function onTabMove(e) {
        var tab = e.target;
        if (!tab.hasAttribute(attr)) return;
        clearTab(tab, true);
        initTab(tab, true);
    }
    function onReloadButtonClick(e) {
        var node = e.originalTarget;
        if (node.className != reloadButtonClass || e.button) return;
        e.stopPropagation();
        clearTab(e.target);
    }
    function onTabClose(e) {
        var tab = e.target;
        var interval = tab.getAttribute(attr);
        if (!interval) return;
        clearInterval(interval);
        removeEventListener("mousedown", onReloadButtonClick, true, tab);
    }
    function onTabRestored(e) {
        var tab = e.target;
        if (tab.hasAttribute("last-tab") && tab.hasAttribute(attr) && !tab.tcn)
            initTab(tab);
    }

    Cc["@mozilla.org/browser/sessionstore;1"]
        .getService(Ci.nsISessionStore)
        .persistTabAttribute(attr);

    setTimeout(function() {
        Array.slice(gBrowser.tabs).forEach(function(tab) {
            if (tab.hasAttribute(attr))
                tab.tcn ?
                addEventListener("mousedown", onReloadButtonClick, true, tab) :
                initTab(tab);
        });
    }, 500);
    [
        ["command", toggleAutoReload, false, menuitem],
        ["popupshowing", onPopupShowing, false, tabContextMenu],
        ["popuphidden", onPopupHidden, false, tabContextMenu],
        ["TabClose", onTabClose, false, gBrowser.tabContainer],
        ["TabMove", onTabMove, false, gBrowser.tabContainer],
        ["SSTabRestored", onTabRestored, false, gBrowser.tabContainer]

    ].forEach(function(args) { addEventListener.apply(this, args) });
})();

Отлично и вроде все работает :)
Кстати остроумный способ добавить обработчики, в общем в коде для меня много полезного.
Непонятно почему нужно удалять пункт меню когда происходит popuphidden ?

Как изменить код если я использую расширение Progress Bar on Tab :: Дополнения Firefox которое добавляет свой индикатор загрузки на вкладке ?  :(

bunda1

Ага, забрал аддон. Вот так, похоже, помогает.

скрытый текст

Выделить код

Код:

function initTab(tab, noInt) {
        if (!noInt) {
            var interval = setInterval(reload, reloadInterval, tab);
            tab.setAttribute(attr, interval);
        }
        var n = tab.tcn = {};
        var nodes = {
            parent: "tab-content",
            throbber: "tab-throbber",
            image: "tab-icon-image",
            label: "tab-text tab-label"
        }
        for (var prop in nodes)
            n[prop] = document.getAnonymousElementByAttribute(tab, "class", nodes[prop]);

        setTimeout(function() {
            n.clonedLabel = n.label.cloneNode(false);
            n.label.hidden = true;
            n.parent.insertBefore(n.clonedLabel, n.label);
        }, 500);

        n.button = createNode("toolbarbutton", {
            class: reloadButtonClass,
            image: reloadButtonIcon,
            style: reloadButtonStyle
        });

        n.parent.removeChild(n.throbber)
        n.parent.insertBefore(n.button, n.image);
        addEventListener("mousedown", onReloadButtonClick, true, tab);
    }
    function clearTab(tab, noInt) {
        if (!noInt) {
            clearInterval(tab.getAttribute(attr));
            tab.removeAttribute(attr);
        }
        removeEventListener("mousedown", onReloadButtonClick, true, tab);
        var n = tab.tcn;
        if (!n) return;

        n.parent.removeChild(n.clonedLabel);
        n.label.hidden = false;

        n.parent.removeChild(n.button);
        n.throbber.removeAttribute("busy");
        n.parent.insertBefore(n.throbber, n.image);
        delete tab.tcn;
    }

Dumby
То что нужно, спасибо :)

bunda1
Dumby
Спасибо за кнопку!

Доброго времени.
Создал кнопку,но не чего не обновляется.(может что то не так делаю.)
http://ipic.su/img/img7/fs/1.1444729423.gif

KOMMEHTATOP пишет

Доброго времени.
Создал кнопку,но не чего не обновляется.(может что то не так делаю.)

А на пункт Автоматически перезагружать в контекстном меню вкладки нажимал.

bunda1 пишет

А на пункт Автоматически перезагружать в контекстном меню вкладки нажимал.

Респект.(я думал что нужно нажимать на кнопку)

У меня после перезапуска браузера пропадает пункт меню... а после входа -выхона в настойки кнопки пункт появляется, ставлю галку - страничка автоматически не перезагружается((( Может можно его как-то под симанку адаптировать?

посоветуйте пожалуйста аналогичное расширение... а - то очень нужен данный функционал, а кнопка не работает(

привет. вот посоветовали мне скриптик для автообновления https://forum.mozilla-russia.org/viewtopic.php?pid=706838#p706838 и у меня не получается его заставить работать после добавления в инициализацию. не появлятся пункт меню вкладки и всё тут. подскажите почему? (а если в код вставить - работает, причём почти как мне надо... )

shinji2009 пишет

не появлятся пункт меню вкладки и всё тут. подскажите почему?

Потому что ты установил старую версию от 14.05.2013., во новая:
Автоматически перезагружать вкладку+

это я ему дал старый код. премного извиняюсь :blush:

неа, тоже не появляется(

shinji2009 пишет

неа, тоже не появляется(

Наверно очередной конфликт с другими расширениями или кодами.

Доброго Времени !
Использую ESR [?] 38.6.0  portable.

Dumby пишет

bunda1
ОК, вот, вроде немного получше...

скрытый текст

Выделить код

Код:

(function() {
    const reloadInterval = 1 * 60 * 1000;

    const reloadButtonIcon = "data:image/x-icon;base64,AAABAAEADAwAAAEAIACYAgAAFgAAACgAAAAMAAAAGAAAAAEAIAAAAAAAcAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAgIAAQECAAAAAAAAAAAAAAAAAAAAAAABAQIAAQICAAAAAAAAAAAAAAAAAAEBAQAAAAAEBggGDydSUhM6g40SOYONCyNRUgEDCAYAAAAAAAEBAQAAAAAAAQICAAAAAA4XIR4nXLvNJGnx/yNq9/0jaff9I2jx/x1Suc0FDh4eAAAAAAABAQIAAAAACAoGBDNluMopaOn/LWnf/jJnw90zacTdLmvf/Stq6v8jU7PJAQIEAwAAAAAAAAAAJDpVVTV27f8ta+H/Jkh9hAgJBAEGCAQAK09+gzJw4/8vb+v/ESdPVAAAAAAAAAAANFmJjDR7/P8tZcncBQcKCAAAAAAAAAAACQwLBzhyzNwyefv/HUKFjAAAAAAAAAAAOV+LjDyI//8wbc3bAgUJBgEBAAAAAAABCAsKBjx5z9s6hf//IkqIjAAAAAAAAAAAMEhcVk6c//8+ivH/J1GHigMEBAIBAAAALlV/f0SP8/9Flf//HDhZVgAAAAAAAAAACgoIBVqXzcpPqP//QHq5wBYgJR0/d7C0TJ/8/06j//9GiMzNBAYIBQAAAAABAQICAAAAABggIx5mqt/iOWiNiyAvNjBpv///Xbj//1KWz9ESHSUhAAAAAAEBAgIAAAAAAQEBAQAAAAAJCwoHOllqZRYgJR0mO0VANVVnZAcJCAYAAAAAAQEBAQAAAAAAAAAAAAAAAAECAgIBAQECAAAAAAEBAgEAAAEBAAAAAAABAQIBAQICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=";
    const reloadButtonStyle = '-moz-appearance: none !important; margin-left: -1px !important; margin-right: -1px !important; padding: 0 !important; border: none !important;';
    const reloadButtonClass = "cb-reload-icon";

    const tabContextMenu = document.getElementById("tabContextMenu");
    const menuitemInsertPoint = document.getElementById("context_bookmarkAllTabs");
    const menuitemId = "tabAutoReload";
    const attr = "auto-reload-interval";

    function createNode(nodeName, attrs) {
        var node = document.createElement(nodeName);
        for (var attr in attrs) node.setAttribute(attr, attrs[attr]);
        return node;
    }
    var menuitem = createNode("menuitem", {
        id: menuitemId,
        type: "checkbox",
        label: "Автоматически перезагружать"
    });
    function onPopupShowing(e) {
        var popup = e.target;
        if (popup != tabContextMenu) return;
        popup.insertBefore(menuitem, menuitemInsertPoint);
        var tab = popup.triggerNode;
        menuitem.hidden = tab.linkedBrowser.currentURI.scheme.slice(0, 4) != "http";
        menuitem.setAttribute("checked", tab.hasAttribute(attr));
    }
    function onPopupHidden(e) {
        var popup = e.target;
        if (popup == tabContextMenu) popup.removeChild(menuitem);
    }
    function reload(tab) {
        gBrowser.reloadTab(tab);
    }
    function toggleAutoReload(e) {
        var tab = e.target.parentNode.triggerNode;
        var interval = tab.getAttribute(attr);
        interval ? clearTab(tab) : initTab(tab);
    }
    function initTab(tab, noInt) {
        if (!noInt) {
            var interval = setInterval(reload, reloadInterval, tab);
            tab.setAttribute(attr, interval);
        }
        var n = tab.tcn = {};
        var nodes = {
            parent: "tab-content",
            throbber: "tab-throbber",
            image: "tab-icon-image",
        }
        for (var prop in nodes)
            n[prop] = document.getAnonymousElementByAttribute(tab, "class", nodes[prop]);
        n.button = createNode("toolbarbutton", {
            class: reloadButtonClass,
            image: reloadButtonIcon,
            style: reloadButtonStyle
        });
        n.parent.removeChild(n.throbber)
        n.parent.insertBefore(n.button, n.image);
        addEventListener("mousedown", onReloadButtonClick, true, tab);
    }
    function clearTab(tab, noInt) {
        if (!noInt) {
            clearInterval(tab.getAttribute(attr));
            tab.removeAttribute(attr);
        }
        removeEventListener("mousedown", onReloadButtonClick, true, tab);
        var n = tab.tcn;
        if (!n) return;
        n.parent.removeChild(n.button);
        n.throbber.removeAttribute("busy");
        n.parent.insertBefore(n.throbber, n.image);
        delete tab.tcn;
    }
    function onTabMove(e) {
        var tab = e.target;
        if (!tab.hasAttribute(attr)) return;
        clearTab(tab, true);
        initTab(tab, true);
    }
    function onReloadButtonClick(e) {
        var node = e.originalTarget;
        if (node.className != reloadButtonClass || e.button) return;
        e.stopPropagation();
        clearTab(e.target);
    }
    function onTabClose(e) {
        var tab = e.target;
        var interval = tab.getAttribute(attr);
        if (!interval) return;
        clearInterval(interval);
        removeEventListener("mousedown", onReloadButtonClick, true, tab);
    }
    function onTabRestored(e) {
        var tab = e.target;
        if (tab.hasAttribute("last-tab") && tab.hasAttribute(attr) && !tab.tcn)
            initTab(tab);
    }

    Cc["@mozilla.org/browser/sessionstore;1"]
        .getService(Ci.nsISessionStore)
        .persistTabAttribute(attr);

    setTimeout(function() {
        Array.slice(gBrowser.tabs).forEach(function(tab) {
            if (tab.hasAttribute(attr))
                tab.tcn ?
                addEventListener("mousedown", onReloadButtonClick, true, tab) :
                initTab(tab);
        });
    }, 500);
    [
        ["command", toggleAutoReload, false, menuitem],
        ["popupshowing", onPopupShowing, false, tabContextMenu],
        ["popuphidden", onPopupHidden, false, tabContextMenu],
        ["TabClose", onTabClose, false, gBrowser.tabContainer],
        ["TabMove", onTabMove, false, gBrowser.tabContainer],
        ["SSTabRestored", onTabRestored, false, gBrowser.tabContainer]

    ].forEach(function(args) { addEventListener.apply(this, args) });
})();

То есть старый код срабатывает на ура.
Решил использовать новый код из темы

bunda1 пишет

Автоматически перезагружать вкладку+( Firefox 24 + )
Авторы: bunda1, Dumby
Версия: от 19.11.2015.

1 Открываю две вкладки.
2 Включаю  в одной вкладке "Автоматически перезагружать",во второй нет.
3 Работает только когда нахожусь в другой вкладке,то есть захожу в ту вкладку где включено "Автоматически перезагружать"  -НЕ ЧЕГО НЕ ПРОИСХОДИТ!
ПерехожУ в другую где не не включено -смотрю там все перезагружается(по индикатору.)
Что не так?

KOMMEHTATOP пишет

2 Включаю  в одной вкладке "Автоматически перезагружать",во второй нет.
3 Работает только когда нахожусь в другой вкладке,то есть захожу в ту вкладку где включено "Автоматически перезагружать"  -НЕ ЧЕГО НЕ ПРОИСХОДИТ!

Я подправил: Автоматически перезагружать вкладку+

bunda1

bunda1 пишет

Я подправил: Автоматически перезагружать вкладку+

Полет нормальный!:beer:

Вроде работает:cool:

Доброго времени.

bunda1 пишет

Я подправил: Автоматически перезагружать вкладку+

Может кто подправить под Firefox 81.0 ?