Полезная информация

Список ответов на каверзные вопросы можно получить в FAQ-разделе форума.

№5126-02-2013 20:17:21

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2249
UA: Firefox 10.0

Re: [CB]Tab Clicking Options

bunda1 пишет

Насчет 5 пикселей сверху таба

Хмм ?

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

Выделить код

Код:

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);

Отсутствует

 

№5226-02-2013 23:23:24

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 3.6

Re: [CB]Tab Clicking Options

Активировать вкладку наведением курсора немного над вкладкой(Firefox 3.6 + )
Автор: Dumby
Описание: Kод даёт возможность активизировать вкладку наведением курсора немного над вкладкой( 5 пикселей сверху ), без клика. В коде можно изменить высоту наведения.
Использование: создайте новую Custom Buttons кнопку и положите код в инициализацию. Можно положить код в уже существующую кнопку.

Выделить код

Код:

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);

Отредактировано bunda1 (06-03-2013 19:05:43)

Отсутствует

 

№5326-02-2013 23:41:40

vom
Участник
 
Группа: Members
Зарегистрирован: 30-08-2011
Сообщений: 155
UA: Firefox 22.0

Re: [CB]Tab Clicking Options

bunda1Dumby
Не перестаете радовать, спасибо огромное. :) Кнопка вообще одна из must have получилась, мини-революция в эргономике. :cool:

Отсутствует

 

№5406-03-2013 09:39:05

questman
Участник
 
Группа: Members
Зарегистрирован: 05-11-2011
Сообщений: 241
UA: Firefox 19.0

Re: [CB]Tab Clicking Options

vom пишет

Кнопка вообще одна из must have получилась, мини-революция в эргономике.

Эта правда.
Из этой темы собрал для себя кнопку использование которой позволило мне полностью отказаться от расширения TabMixPluse
Собственно говоря мне  TabMixPluse нужен быль лишь для того чтобы упорядочить открытие и закрытие вкладок.
А именно открывать сразу после текущей а закрывать с фокусом на левую.Плюс контекстное меню вкладки с возможностью дублировать текущую.
Осталась мелочь(наверно мелочь).
В TabMixPluse есть настройка позволяющая открывать вкладки из панели закладок(открыть всё во вкладках) в том порядке в котором они размещены.То есть верхняя закладка будет первой
вкладкой и так далее сверху вниз.Без TabMixPluse вкладки открываются наоборот первой вкладкой будет самая нижняя закладка и далее снизу вверх.Очень не удобно.
Не подскажите есть ли решение?
***
Не подскажите как можно отобрать кнопку закрытия на вкладках?
Мне нужно её скрыть но лёгких путей не хочу(userChrome.css)
Хочу добавить контекстный пункт к вкладкам для скрытия/показа кнопки закрытия
Пробовал вот так:
document.getAnonymousElementByAttribute(gBrowser.selectedTab, "class", "tab-close-button");
Но это только для текущей
***
Ещё хотелось бы добавить в контекстное меню вкладок пункт позволяющий перезагружать вкладку по таймеру.
Как обычно знаю как но не до конца.Не могу понять как воздействовать только на нужную вкладку.У меня перезагружаются
либо все либо текущая.

Отредактировано questman (06-03-2013 09:40:14)

Отсутствует

 

№5506-03-2013 12:18:50

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2249
UA: Firefox 10.0

Re: [CB]Tab Clicking Options

questman
Нужная для твоих пунктов меню вкладка это   this.parentNode.triggerNode   или   TabContextMenu.contextTab
Вот, кстати, незатейливая «перезагружалка», может быть пригодится...

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

Выделить код

Код:

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);

Отредактировано Dumby (06-03-2013 19:53:06)

Отсутствует

 

№5606-03-2013 20:56:08

questman
Участник
 
Группа: Members
Зарегистрирован: 05-11-2011
Сообщений: 241
UA: Firefox 19.0

Re: [CB]Tab Clicking Options

Dumby пишет

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

Ещё как пригодится.Спасибо огромное это больше на что я рассчитывал.

Отсутствует

 

№5706-03-2013 22:48:35

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 3.6

Re: [CB]Tab Clicking Options

questman пишет

Не подскажите как можно отобрать кнопку закрытия на вкладках?

about:config
browser.tabs.closeButtons - 2

Отсутствует

 

№5807-03-2013 08:29:42

questman
Участник
 
Группа: Members
Зарегистрирован: 05-11-2011
Сообщений: 241
UA: Firefox 19.0

Re: [CB]Tab Clicking Options

bunda1 пишет

browser.tabs.closeButtons - 2

Спасибо!
Переключение этого параметра реализовать в кнопке будет просто.

Отсутствует

 

№5907-03-2013 20:44:45

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 3.6

Re: [CB]Tab Clicking Options

Dumby пишет

Вот, кстати, незатейливая «перезагружалка», может быть пригодится

Полезная вещь, а можно сделать её более затейливой - чтобы проверяла страницу на изменения и обновляла только тогда если изменения обнаружены или хотя бы что бы обновления происходили не заметно без вращения индикатора на табе, а то напрягает. Если конечно это не слишком сложно :/

Отсутствует

 

№6008-03-2013 01:48:29

vom
Участник
 
Группа: Members
Зарегистрирован: 30-08-2011
Сообщений: 155
UA: Firefox 20.0

Re: [CB]Tab Clicking Options

Dumby
Присоединяюсь к bunda1, полезная вещь, а можно ли ее вкл/выкл повесить на ПКМ, а контекстное меню убрать?

Пришла в голову идея, чтобы не было холостой перезагрузки и не раздражал throbber, возможно ли сделать кнопку, перезагружающую таб только при активации. Т.е. находясь в этой теме, я нажимаю одинарный ПКМ по соседней вкладке http://forum.mozilla-russia.org/search. … n=show_24h и всегда при ее активации, она со свежими непрочитанными темами. Отключается тоже по ПКМ. Плюс к релоаду, будет удобен автоматический Scroll to Top.

Отредактировано vom (08-03-2013 02:24:46)

Отсутствует

 

№6108-03-2013 19:59:08

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2249
UA: Firefox 10.0

Re: [CB]Tab Clicking Options

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);

Отредактировано Dumby (09-03-2013 01:27:45)

Отсутствует

 

№6209-03-2013 01:00:20

vom
Участник
 
Группа: Members
Зарегистрирован: 30-08-2011
Сообщений: 155
UA: Firefox 20.0

Re: [CB]Tab Clicking Options

Dumby пишет

Так что-ли ?

В точку, спасибо большое. :) Опробовал, оказалось крайне удобно для многих сайтов, давно задумывался о подобном, т.к. простой перезагрузчик не рационален и не претенциозен.

Отредактировано vom (09-03-2013 06:02:06)

Отсутствует

 

№6309-03-2013 11:20:36

villa7
Участник
 
Группа: Members
Зарегистрирован: 21-07-2012
Сообщений: 2235
UA: unknown 0.0

Re: [CB]Tab Clicking Options

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);


Лучше спросить у знающих - чем лезть не зная.

Отсутствует

 

№6409-03-2013 14:44:35

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2249
UA: Firefox 10.0

Re: [CB]Tab Clicking Options

villa7
Ну, вроде, дело нехитрое. Только не пойму, что хорошего в том,
что у табов нет контекстного меню. Давай хоть с Ctrl будет как обычно, мало-ли понадобиться :)

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

Выделить код

Код:

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);

Отсутствует

 

№6509-03-2013 15:15:05

villa7
Участник
 
Группа: Members
Зарегистрирован: 21-07-2012
Сообщений: 2235
UA: unknown 0.0

Re: [CB]Tab Clicking Options

Dumby
Вот теперь то что нужно, спасибо. Почему нет контекстного меню у табов, у меня есть,  при двойном клике ПКМ все появляется, меня вполне устраивает.


Лучше спросить у знающих - чем лезть не зная.

Отсутствует

 

№6611-03-2013 19:48:33

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 3.6

Re: [CB]Tab Clicking Options

Dumby пишет

bunda1
Я не знаю как проверить произошли ли изменения на странице,
для некоторых страниц, неверное, хтмл-текст можно сравнить, а может и нет...
С индикатором на табе, вроде, справился

Спасибо, спасибо :)

Отсутствует

 

№6718-03-2013 19:41:06

questman
Участник
 
Группа: Members
Зарегистрирован: 05-11-2011
Сообщений: 241
UA: Firefox 19.0

Re: [CB]Tab Clicking Options

bunda1 пишет
Открывать любую новую вкладку справа от текущей

(Firefox 3.6 + )
Автор: bunda1
Описание: Kод дает возможность открывать любую новую вкладку справа от текущей.

Это очень полезный код.Но при "Открыть всё во вкладках" порядок вкладок меняется с ног на голову.
Нельзя ли сделать так чтобы этот код давал  возможность открывать всё во вкладках по порядку.

У меня при различных манипуляциях с кодом получается что то одно.Либо новая вкладка открывается справа
от текущей либо все вкладки открываются по порядку.Как это объединить не могу приложить ума.

Отсутствует

 

№6819-03-2013 22:10:24

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 3.6

Re: [CB]Tab Clicking Options

questman
Да есть такой глюк, но я не знаю как с ним справиться.

Отсутствует

 

№6919-03-2013 23:33:45

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 20.0

Re: [CB]Tab Clicking Options

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);

Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№7020-03-2013 09:00:00

questman
Участник
 
Группа: Members
Зарегистрирован: 05-11-2011
Сообщений: 241
UA: Firefox 19.0

Re: [CB]Tab Clicking Options

Infocatcher пишет

Кривая распорка:

Спасибо!!!
Это то что надо!
Теперь кнопочка собранная из этой темы полностью заменяет TabMixPlus вплоть до перезагрузки странички по таймеру.
Помню было лёгкое расширение для упорядочивания открытия и закрытия вкладок Tabberwocky но оно уже давно не работает.
Так не хотелось в своё время ставить TabMixPlus из за пары нужных функций.
А сейчас ещё лучше стало,нужные функции в одной махонькой кнопке.
Спасибо ещё раз.

Отредактировано questman (20-03-2013 12:12:52)

Отсутствует

 

№7120-03-2013 13:06:37

questman
Участник
 
Группа: Members
Зарегистрирован: 05-11-2011
Сообщений: 241
UA: Firefox 19.0

Re: [CB]Tab Clicking Options

А нельзя добавить в код инструкцию которая бы позволяла открывать все всплывающие окна в новой вкладке справа от текущей?

Отсутствует

 

№7220-03-2013 14:47:52

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 20.0

Re: [CB]Tab Clicking Options

browser.link.open_newwindow.restriction = 0 ?


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№7320-03-2013 16:04:29

questman
Участник
 
Группа: Members
Зарегистрирован: 05-11-2011
Сообщений: 241
UA: Firefox 19.0

Re: [CB]Tab Clicking Options

Infocatcher пишет

browser.link.open_newwindow.restriction = 0 ?

Да,оно!Спасибо!
Но тогда в код добавлять не нужно,раз в about:config можно изменить.
***
А есть где почитать информацию о документированных настройках about:config?

Отсутствует

 

№7401-12-2013 01:20:59

MySh
Кактусогрыз
 
Группа: Extensions
Зарегистрирован: 17-12-2006
Сообщений: 4623
UA: Seamonkey 2.22

Re: [CB]Tab Clicking Options

К сожалению эта кнопка не работает в Seamonkey 2.22. С этим можно что-нибудь сделать? Очень уж нужная кнопочка (хотя бы чтоб результат поиска в новой вкладке открывало, мне, собственно, только это и нужно).
Нашёл нужные настройки для поиска в самом Seamonkey.
А кнопка, кстати, ругается на то, что "openNode is undefined". Понятия не имею, что это значит, но на текущий момент моя проблема, кажется, решена.

Отредактировано MySh (01-12-2013 01:46:37)

Отсутствует

 

№7501-12-2013 02:01:22

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 3.6

Re: [CB]Tab Clicking Options

MySh пишет

А кнопка, кстати, ругается на то, что "openNode is undefined". Понятия не имею, что это значит, но на текущий момент моя проблема, кажется, решена.

Код изменяет внутренние функции Firefox и если openNode is undefined то это значит что в Seamonkey такой функции нет.

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]