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

Хотите узнать больше о расширениях? Посмотрите ролики, рассказывающие о работе с расширениями Firefox.

№1065116-09-2016 17:13:27

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

Re: Custom Buttons

turbot пишет

Это совсем не важно

Вот и хорошо.

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

Проблема - что все объекты только для текущей вкладки создаются.

Это потому, что у тебя там везде используется win.content.document. ... .
Но похоже, что win.content только в e10s вкладке на сам win ссылается.

А в нормальной вкладке ссылается на окно текущей вкладки,
или содержит null, если текущая вкладка электролизисная.

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

Выделить код

Код:

var s = loc => loc.href && loc.href.slice(0, 50);
var win = gBrowser.visibleTabs[0].linkedBrowser.contentWindow;
try {alert([

    "win.location:  " + s(win.location),
    "win.content.location:  " + s(win.content.location),
    "win.content == win is " + (win.content == win)

].join("\n"));} catch(ex) {alert(ex);}

И еще вопрос: ни /^(\w+)?:\/\//.test(link), ни !!link.match(/^(\w+)?:\/\//) в коде - упорно не хотят признавать ссылки вида ://example.com/, хотя в консоли работает.

Не понял. Где (простой) пример?

Ну и вообще, для этого самого развития: как тут красивее и правильнее сделать?

Ну, понятие о красоте у всех разное. А как тут сделать правильнее я, разумеется, не знаю.

Вот сделал себе кнопку, чтоб посмотреть что там под твой селектор попадает.
Жму, через некоторое время открывается вкладка с результатом, и даже что-то показывает.
Но это же не значит, что сделал правильнее.

Выделить код

Код:

(obj => this._handleClick = () => {
    (obj.gen = obj.gen()).next();
    this._handleClick = () => obj.busy ? alert("busy") : obj.gen.next();
})({
    get msg() {
        var msg = `CB${_id.slice(20)}-${Components.stack.lineNumber}:Links`;
        var code = `${this.getLinks}\nsendAsyncMessage("${msg}", getLinks(content));`;
        this.url = "data:," + encodeURIComponent(code);
        delete this.msg; return this.msg = msg;
    },
    busy: false,
    gen: function*() { while(true) {
        this.busy = true; var result = [], {gen} = this;

        for(var win of CustomizableUI.windows) for(var tab of [...win.gBrowser.tabs]) {
            if (tab.hasAttribute("pending") || ~~"something else") continue;
            var br = tab.linkedBrowser;
            if (br.isRemoteBrowser) {
                var mm = br.messageManager, {msg} = this;
                mm.addMessageListener(msg, function listener(message) {
                    mm.removeMessageListener(msg, listener);
                    result.push(message.data);
                    gen.next();
                });
                yield mm.loadFrameScript(this.url, false);
            } else {
                result.push(this.getLinks(br.contentWindow));
                yield setTimeout(() => gen.next(), 50);
            }
        }
        this.onResult(result); this.busy = false; yield 0;
    }},
    getLinks: function getLinks(win, res) {
        var doc = win.document;
        var obj = {title: doc.title, elements: [], frames: []};

        for (var elm of doc.querySelectorAll(":-moz-any([href], [src])")) {
            var node = elm.tagName;
            for(var v of ["src", "href", "type"])
                eval(`var ${v} = elm.${v} || elm.getAttribute("${v}") || elm.${v};`);
            // ...
            // ...
            // ...
            obj.elements.push({node, src, href, type});
        }
        res ? res.frames.push(obj) : res = obj;
        for (var ind = 0; ind < win.frames.length; ind++) getLinks(win.frames[ind], obj);
        return res;
    },
    //----------------------------------------------------------------------------------------------------
    onResult(result) {
        result = this.changeObj(result);

        var url = "chrome://inspector/content/object.xul";
        var pos = gBrowser.selectedTab._tPos;
        var tab = gBrowser.selectedTab = gBrowser.addTab(url, {forceNotRemote: true});
        gBrowser.moveTabTo(tab, pos + 1);
        tab.linkedBrowser.addEventListener("load", function load(e) {
            var doc = e.target, {href} = doc.location;
            
            if (href == "about:blank") return;
            else if (href == url) {
                doc.defaultView.arguments = [result];
                doc.title = "== Links ==";
                doc.querySelector("domi-panel").boxObject.firstChild.style.display = "none";
                return;
            }
            this.removeEventListener(e.type, load, true);
            
            var dwu = doc.defaultView.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIDOMWindowUtils);
            var css = `treechildren::-moz-tree-row {padding-top: 0; padding-bottom: 0;
                height: 17px; max-height: 17px; min-height: 17px;}`.replace(/;/g, " !important;");
            dwu.loadSheetUsingURIString("data:text/css," + encodeURIComponent(css), dwu.AGENT_SHEET);
            
            doc.addEventListener("TreeViewChanged", function tvc(e) {
                doc.removeEventListener(e.type, tvc, false);
                e.target.body.style.visibility = "visible";

                var {view} = e.target, col = e.target.treeBoxObject.columns.colProp;
                view.selection.toggleSelect(0);

                for(var ind = 1; ind < view.rowCount; ind++) {
                    view.isContainer(ind) && !view.isContainerEmpty(ind) && !view.isContainerOpen(ind) && view.toggleOpenState(ind);
                    /title/i.test(view.getCellText(ind, col)) && view.selection.rangedSelect(ind, ind, true);
                }
            }, false);
        }, true);
    },
    changeObj: function changeObj(obj) {
        if (!(obj instanceof Object)) return;
        if (Array.isArray(obj)) for(var item of obj) changeObj.call(this, item);
        else if (obj.__proto__.constructor.name == "Object") {
            Object.defineProperty(obj, "toString", {value: () => "\u25cc"}); // Dotted Circle
            var map = {title: "aTITLE", elements: "a\u3164ELEMENTS", frames: "a\u3164FRAMES", node: "_node"};
            for(var prop in obj) {
                var val = obj[prop], arr = Array.isArray(val);
                //if (arr && !val.length) {delete obj[prop]; continue;}
                if (prop in map) obj[
                    map[prop] + (arr && val.length ? this.p(val.length) : "")
                ] = val, delete obj[prop];
                changeObj.call(this, val);
            }
        }
        return obj;
    },
    p(num) {
        var res = `   ${num} штук`;
        var [last, penult] = [...String(num)].reverse();
        if (penult != 1) if (last == 1) res+= "а"; else if ("234".includes(last)) res+= "и"
        return res;
    }
});

А если хочешь, чтобы я к чему-нибудь придрался, то возьмём что-нибудь попроще.

Выделить код

Код:

var sel = document.commandDispatcher.focusedWindow.getSelection();
        if (!!sel)
            return sel.toString().trim();

Правильнее не заниматься двойным отрицанием
объекта Selection, потому что всегда получишь true.

Выделить код

Код:

menu.addEventListener('popupshowing', function f() menuitem.hidden = !(gContextMenu.onLink || gContextMenu.isTextSelected));
    addDestructor(()=> {
        menu.removeChild(menuitem);
        menu.removeEventListener("popupshowing", f)
    })

Раз уж не хочешь пользоваться предопределённой в Custom Buttons
функцией addEventListener, добавляющей самоудаляющийся листенер,

то правильнее будет определить функцию f как-то иначе, а не как у тебя так,
что её нигде (кроме как внутри самой функции f) не видно.

Отредактировано Dumby (16-09-2016 17:15:11)

Отсутствует

 

№1065216-09-2016 18:18:56

turbot
Участник
 
Группа: Members
Зарегистрирован: 09-10-2011
Сообщений: 2529
UA: Firefox 51.0

Re: Custom Buttons

Dumby

скрытый текст
Спасибо.

Dumby пишет

Не понял. Где (простой) пример?

Живой не найду, но мне попадались такие ссылки в коде страниц, без указания протокола. Я проверял просто отредактировав в инспекторе на странице. И если в консоли

Выделить код

Код:

/^(\w+)?:\/\//.test('://example.com')

- true, то при запуске кода получается:
thumb_a4e2591c10ff9d12a8f472ccba477a2d.jpg 

что-нибудь попроще.

Фух, спасибо. А то, то что выше я еще долго буду пытаться понять. '>_>

Правильнее не заниматься двойным отрицанием
объекта Selection, потому что всегда получишь true.

Ум, из-за лени сократил. Правильно будет sel && !!sel.length? Или если сделать

Выделить код

Код:

var sel = document.commandDispatcher.focusedWindow.getSelection().toString().trim()

то ведь можно и if (!!sel) оставить?

Раз уж не хочешь пользоваться предопределённой в Custom Buttons
функцией addEventListener, добавляющей самоудаляющийся листенер,

Ммм? А разве самоудаляющийся? Я несколько раз замечал, что после редактирования/удаления кнопки листенер остается. Или я не так готовлю?

то правильнее будет определить функцию f как-то иначе, а не как у тебя так,
что её нигде (кроме как внутри самой функции f) не видно.

Чорд, опять по старым граблям. Новое выучу - старое забуду. :sick:

Спасибо тебе еще раз, за терпение к моей тупости. Буду тыкать и думать. :)

Отредактировано turbot (16-09-2016 18:23:48)

Отсутствует

 

№1065316-09-2016 22:18:30

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

Re: Custom Buttons

turbot

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

проверял просто отредактировав в инспекторе на странице. И если в консоли - true, то при запуске кода получается

Ну-ка понажимай и доложись.

Выделить код

Код:

var doc = content.document;
if (!(doc instanceof HTMLDocument)) {
    alert("doc is NOT instanceof HTMLDocument"); return;
}

var element = doc.createElement("script");
element.setAttribute("src", "://example.com/");
element.setAttribute("id", "turbot-script-777");
doc.head.appendChild(element);


var script = doc.getElementById("turbot-script-777");
alert([

    "ATTRIBUTE «src» is\n" + script.getAttribute("src"),
    "PROPERTY «src» is\n"  + script.src

].join("\n\n\n"));

script.remove();

Правильно будет sel && !!sel.length?

Нет.

Или если сделать
var sel = document.commandDispatcher.focusedWindow.getSelection().toString().trim()
то ведь можно и if (!!sel) оставить?

Почему бы и нет. (см. также). Насчёт необходимости «!!» (Флэнаган).

Я несколько раз замечал, что после редактирования/удаления кнопки листенер остается. Или я не так готовлю?

Не понял. Где (простой) пример? :)

Отредактировано Dumby (16-09-2016 22:20:18)

Отсутствует

 

№1065416-09-2016 22:36:35

turbot
Участник
 
Группа: Members
Зарегистрирован: 09-10-2011
Сообщений: 2529
UA: Firefox 51.0

Re: Custom Buttons

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

Dumby пишет

Ну-ка понажимай и доложись.

О как... Понятно. Как все непросто-то... :dumb:

Почему бы и нет. (см. также). Насчёт необходимости «!!» (Флэнаган).

Ясно, спасибо.

Не понял. Где (простой) пример? :)

Ну, просто были такие случаи. В консоль еще что-то ругалось на что-то с originalListener.

Отсутствует

 

№1065519-09-2016 19:52:18

Stkvsky
Участник
 
Группа: Members
Зарегистрирован: 26-06-2012
Сообщений: 1700
UA: Firefox 38.0

Re: Custom Buttons

Подскажите пожалуйста, можно ли сделать так чтобы когда появляется окно сохранения файла текст из буфера вставлялся автоматически в поле названия, то есть чтобы срабатывало ctrl+V при появлении окна сохранения?
Можно ли как то отследить его открытие?

Отсутствует

 

№1065621-09-2016 15:48:00

Tungen
Участник
 
Группа: Members
Зарегистрирован: 10-06-2014
Сообщений: 47
UA: Firefox 48.0

Re: Custom Buttons

Всем привет.
Скажите, пожалуйста, можно сделать кнопку по нажатию которой будет запускаться .js скрипт в дополнении imacros?
Есть скрипт которым пользуюсь очень часто и приходится открывать панель, затем дерево папок, выбирать скрипт и нажимать "воспроизвести". Было б круто если можно было сделать кнопку на панели.

Отсутствует

 

№1065722-09-2016 02:51:36

difabor
Участник
 
Группа: Members
Зарегистрирован: 21-09-2013
Сообщений: 539
UA: Firefox 28.0
Веб-сайт

Re: Custom Buttons

Tungen пишет

Всем привет.
Скажите, пожалуйста, можно сделать кнопку по нажатию которой будет запускаться .js скрипт в дополнении imacros?
Есть скрипт которым пользуюсь очень часто и приходится открывать панель, затем дерево папок, выбирать скрипт и нажимать "воспроизвести". Было б круто если можно было сделать кнопку на панели.

Есть кнопка Bookmarks Folder
На такую кнопку можно посадить любую папку закладок, в том числе и с  imacrosами. При этом можно сделать, чтоб меню открывалось по наведению курсора.
Навели курсор на кнопку - открылась папка с imacrosами. Остаётся кликнуть на нужный.

Отредактировано difabor (22-09-2016 02:55:05)


Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©

Отсутствует

 

№1065822-09-2016 05:57:46

fokanik
Участник
 
Группа: Members
Зарегистрирован: 05-02-2014
Сообщений: 268
UA: Seamonkey 2.40

Re: Custom Buttons

А такое можно сделать - зависаем мышкой над кнопкой, крутим колесико и кнопка подхватывает команды от него?
Хочу к Page Navigation прикрутить эту штуку, для вертикального скроллирования страницы.

Отредактировано fokanik (22-09-2016 05:59:22)

Отсутствует

 

№1065922-09-2016 19:43:01

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

Re: Custom Buttons

fokanik пишет

А такое можно сделать - зависаем мышкой над кнопкой, крутим колесико и кнопка подхватывает команды от него? Хочу к Page Navigation прикрутить эту штуку, для вертикального скроллирования страницы.

В инициализацию:

Выделить код

Код:

this.onwheel =e=> content.scrollByPages(e.deltaY/4);

Отсутствует

 

№1066023-09-2016 11:58:58

fokanik
Участник
 
Группа: Members
Зарегистрирован: 05-02-2014
Сообщений: 268
UA: Seamonkey 2.40

Re: Custom Buttons

bunda1 пишет

В инициализацию:

Выделить код

Код:

this.onwheel =e=> content.scrollByPages(e.deltaY/4);

Работает, но только пока страница обновляется/загружается, а как загрузится - перестает работать.
В панели управления -> свойства мыши -> колесико: вертикальная прокрутка - поставил значение 4 строки и заработало (было 3 строки).

Но оно мотается помногу - получился аналог нажатия кнопки Page Navigation - Вверх/Вниз по странице, а мне нужна коротенькая подмотка - аналог прокрутки страницы колесиком?

Отредактировано fokanik (23-09-2016 13:18:59)

Отсутствует

 

№1066123-09-2016 12:52:57

SOTVM
Участник
 
Группа: Members
Зарегистрирован: 30-01-2012
Сообщений: 112
UA: Firefox 45.0

Re: Custom Buttons

подскажите пожалуйста,нужен простой пример,как в CB добавить свой код?
хочу чтобы::angel: допустим так:  :lol:
задать иконку кнопки в зависимости от состояния ключа в  about:config
user_pref("dom.event.contextmenu.enabled");
если true тогда  > icotrue.gif
если false тогда  > icofalse.gif
иначе > icodefault.gif

LMB Click  (1клик ЛКМ)
выполнить скрипт на текущей странице
javascript:void(document.oncontextmenu=null);
+изменить иконку кнопки  на icodefault.gif
RMB Click (1клик ПКМ)
прописать в about:config  prefs.js
user_pref("dom.event.contextmenu.enabled", false);
+ изменить иконку кнопки  на icofalse.gif
RMB DoubleClick (даблклик правой)
user_pref("dom.event.contextmenu.enabled", true);
+изменить иконку кнопки  на icotrue.gif


Никто не знает столько,сколько не знаю Я.

Отсутствует

 

№1066223-09-2016 13:34:20

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

Re: Custom Buttons

fokanik пишет

Но оно мотается помногу - получился аналог нажатия кнопки Page Navigation - Вверх/Вниз по странице, а мне нужна коротенькая подмотка - аналог прокрутки страницы колесиком?

:/

Выделить код

Код:

this.onwheel =e=> e.deltaY > 0 ? content.scrollByPages(1) : content.scrollByPages(-1);

Отсутствует

 

№1066323-09-2016 15:02:21

fokanik
Участник
 
Группа: Members
Зарегистрирован: 05-02-2014
Сообщений: 268
UA: Seamonkey 2.40

Re: Custom Buttons

bunda1 пишет

this.onwheel =e=> e.deltaY > 0 ? content.scrollByPages(1) : content.scrollByPages(-1);

Так тоже перепрыгивает сильно, а нажатия кнопок скролл бара можно имитировать - у них маленькая прокрутака:

Выделить код

Код:

sbattr = scrollbar-up-top
sbattr = scrollbar-down-bottom

namespaceURI: XUL
sborient = vertical
type = decrement
xbl:inherits = curpos,maxpos,disabled,sborient=orient

Отсутствует

 

№1066423-09-2016 20:26:47

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

Re: Custom Buttons

fokanik пишет

Так тоже перепрыгивает сильно, а нажатия кнопок скролл бара можно имитировать - у них маленькая прокрутака:

Выделить код

Код:

var speed = 14; // скорость прокрутки
this.onwheel =e=> e.deltaY < 0 ? content.scrollBy(0, -speed) : content.scrollBy(0, speed);

Отсутствует

 

№1066523-09-2016 23:07:22

fokanik
Участник
 
Группа: Members
Зарегистрирован: 05-02-2014
Сообщений: 268
UA: Seamonkey 2.40

Re: Custom Buttons

bunda1 пишет

var speed = 14; // скорость прокрутки

bunda1, спасибо большое, то что нужно! Очень удобная кнопка получилась, тест:

скрытый текст
Page Navigator + VScroll:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EPage%20Navigation%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%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%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B/*Initialization%20code*/%0A%0Athis.tooltipText%20%3D%20%0A%22Left/Right%20%20%u2015%20%20%u0412%u043D%u0438%u0437/%u0412%u0432%u0435%u0440%u0445%20%u043F%u043E%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0435%5Cn%22%20+%20%0A%22DLeft%20%20%20%20%u2015%20%20%20%20%u0412%20%u043D%u0430%u0447%u0430%u043B%u043E/%u043A%u043E%u043D%u0435%u0446%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%5Cn%22%20+%0A%22%u041A%u043E%u043B%u0435%u0441%u0438%u043A%u043E%20%20%20%20%20%u2015%20%20%20%20%20%u041F%u0440%u043E%u043A%u0440%u0443%u0442%u043A%u0430%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%5Cn%22%20+%0A%22DRight%20%20%20%20%u2015%20%20%20%u0426%u0435%u043D%u0442%u0440%u0438%u0440%u043E%u0432%u0430%u043D%u0438%u0435%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%22%3B%0A%0Avar%20speed%20%3D%2075%3B%20//%20%u0441%u043A%u043E%u0440%u043E%u0441%u0442%u044C%20%u043F%u0440%u043E%u043A%u0440%u0443%u0442%u043A%u0438%0Athis.onwheel%20%3De%3D%3E%20e.deltaY%20%3C%200%20%3F%20content.scrollBy%280%2C%20-speed%29%20%3A%20content.scrollBy%280%2C%20speed%29%3B%0A%0Athis.__defineGetter__%28%22scroller%22%2C%20function%28%29%20%7B%0A%20%20%20%20var%20doc%20%3D%20content.document%3B%0A%20%20%20%20var%20root%20%3D%20doc.documentElement%3B%0A%20%20%20%20var%20body%20%3D%20doc.body%20%7C%7C%20root%3B%0A%20%20%20%20return%20body.scrollHeight%20%3E%20root.scrollHeight%20%3F%20body%20%3A%20root%3B%0A%7D%29%3B%0A%0A//%u0412%u043D%u0438%u0437%20%u043F%u043E%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0435%0Athis.leftclick%20%3D%20function%28event%29%20%7B%0A%20%20%20%20var%20scroller%20%3D%20this.scroller%3B%0A%20%20%20%20content.scrollByPages%281%29%20%20%20%0A%7D%3B%0A%0A%0A//%u0412%u0432%u0435%u0440%u0445%20%u043F%u043E%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0435%0Athis.rightclick%20%3D%20function%28event%29%20%7B%0A%20%20var%20scroller%20%3D%20this.scroller%3B%0A%20%20if%28%21event.ctrlKey%20%26%26%20%21event.shiftKey%20%26%26%20%21event.altKey%20%26%26%20%21event.metaKey%29%20%7B%0A%09event.preventDefault%28%29%3B%0A%20%20%20%20%20%20%20%20event.stopPropagation%28%29%3B%0A%20%20%20%20%20%20%20%20content.scrollByPages%28-1%29%3B%0A%20%20%20%20%09%7D%0A%7D%3B%0A%0A//%u0426%u0435%u043D%u0442%u0440%u0438%u0440%u043E%u0432%u0430%u043D%u0438%u0435%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%0Athis.rightDclick%20%3D%20function%28event%29%20%7B%0A%20%20%20%20var%20scroller%20%3D%20this.scroller%3B%0A%20%20%20%20content.scrollTo%280%2C%20%28scroller.scrollHeight%20-%20scroller.clientHeight%29/2%29%3B%0A%7D%3B%0A%0A//%u0412%20%u043D%u0430%u0447%u0430%u043B%u043E/%u043A%u043E%u043D%u0435%u0446%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%0Athis.leftDclick%20%3D%20function%28event%29%20%7B%0A%20%20%20%20var%20scroller%20%3D%20this.scroller%3B%0A%20%20%20%20if%28scroller.scrollTop%20%3E%20%28scroller.scrollHeight%20-%20scroller.clientHeight%29/2%29%0A%09%20%20content.scrollTo%28scroller.scrollHeight%2C%20%200%29%3B%0A%20%20%20%20else%0A%20%20%20%20%20%20%20%20content.scrollTo%280%2C%20scroller.scrollHeight%29%3B%0A%7D%3B%0A%0Athis.setAttribute%28%27onclick%27%2C%20%27custombuttons.gQuot.mHandler%28event%2C%20this%29%27%29%3B%0Athis.setAttribute%28%27ondblclick%27%2C%20%27custombuttons.gQuot.mHandler%28event%2C%20this%29%27%29%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E
Выделить код

Код:

this.tooltipText = 
"Left/Right  ―  Вниз/Вверх по странице\n" + 
"DLeft    ―    В начало/конец страницы\n" +
"Колесико     ―     Прокрутка страницы\n" +
"DRight    ―   Центрирование страницы";

var speed = 75; // скорость прокрутки
this.onwheel =e=> e.deltaY < 0 ? content.scrollBy(0, -speed) : content.scrollBy(0, speed);

this.__defineGetter__("scroller", function() {
    var doc = content.document;
    var root = doc.documentElement;
    var body = doc.body || root;
    return body.scrollHeight > root.scrollHeight ? body : root;
});

//Вниз по странице
this.leftclick = function(event) {
    var scroller = this.scroller;
    content.scrollByPages(1)   
};


//Вверх по странице
this.rightclick = function(event) {
  var scroller = this.scroller;
  if(!event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey) {
    event.preventDefault();
        event.stopPropagation();
        content.scrollByPages(-1);
        }
};

//Центрирование страницы
this.rightDclick = function(event) {
    var scroller = this.scroller;
    content.scrollTo(0, (scroller.scrollHeight - scroller.clientHeight)/2);
};

//В начало/конец страницы
this.leftDclick = function(event) {
    var scroller = this.scroller;
    if(scroller.scrollTop > (scroller.scrollHeight - scroller.clientHeight)/2)
      content.scrollTo(scroller.scrollHeight,  0);
    else
        content.scrollTo(0, scroller.scrollHeight);
};

this.setAttribute('onclick', 'custombuttons.gQuot.mHandler(event, this)');
this.setAttribute('ondblclick', 'custombuttons.gQuot.mHandler(event, this)');

Отсутствует

 

№1066625-09-2016 17:39:40

Black_Monk
Участник
 
Группа: Members
Зарегистрирован: 18-02-2012
Сообщений: 195
UA: Firefox 49.0

Re: Custom Buttons

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

Выделить код

Код:

// Автоматически очистить панель поиска после запуска поиска, от 08.09.2014. ..............
var src = "BrowserSearch.searchBar.handleSearchCommand = " + BrowserSearch.searchBar.handleSearchCommand.toString(),
     res = src.replace("{", '{\nsetTimeout(function(t) t._textbox.value = "", 50, this)');
eval(res);
addDestructor(function() eval(src) );

Windows 10 LTSC

Отсутствует

 

№1066725-09-2016 19:52:19

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

Re: Custom Buttons

Black_Monk пишет

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

У меня код работает на FF49. Может в строчке:

Выделить код

Код:

res = src.replace("{", '{\nsetTimeout(function(t) t._textbox.value = "", 50, this)');

измени 50 на 150 или больше.

Отсутствует

 

№1066825-09-2016 20:08:13

voqabuhe
Участник
 
Группа: Members
Зарегистрирован: 06-12-2011
Сообщений: 3231
UA: Firefox 52.0

Re: Custom Buttons

Black_Monk
У меня  вот эта работает №1017

Отсутствует

 

№1066925-09-2016 22:44:08

Black_Monk
Участник
 
Группа: Members
Зарегистрирован: 18-02-2012
Сообщений: 195
UA: Firefox 49.0

Re: Custom Buttons

bunda1 пишет

измени 50 на 150 или больше.

Нет, не помогает... :/

voqabuhe пишет

У меня  вот эта работает №1017

Это же не то, что мне надо...


Windows 10 LTSC

Отсутствует

 

№1067025-09-2016 22:52:14

voqabuhe
Участник
 
Группа: Members
Зарегистрирован: 06-12-2011
Сообщений: 3231
UA: Firefox 52.0

Re: Custom Buttons

Black_Monk пишет

Это же не то, что мне надо...

А ну да, ну извени, просто не дочитал фразу до конца, что в новых вкладках. :)

Отсутствует

 

№1067125-09-2016 23:04:28

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

Re: Custom Buttons

Black_Monk пишет
bunda1 пишет

измени 50 на 150 или больше.

Нет, не помогает... :/

А как ты используешь поле поиска?

Отсутствует

 

№1067225-09-2016 23:12:12

Black_Monk
Участник
 
Группа: Members
Зарегистрирован: 18-02-2012
Сообщений: 195
UA: Firefox 49.0

Re: Custom Buttons

bunda1 пишет

А как ты используешь поле поиска?

Ну раньше действие кнопки проверялось просто: я писал в поле ввода поискового запроса пару слов и открывал новую вкладку. Сразу после этого во всех вкладках все поля ввода очищались. Не помню уже с какой версии Мозиллы такой вариант уже не срабатывает. :(


Windows 10 LTSC

Отсутствует

 

№1067325-09-2016 23:15:41

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

Re: Custom Buttons

Black_Monk пишет
bunda1 пишет

А как ты используешь поле поиска?

я писал в поле ввода поискового запроса пару слов

Как ты запускаешь поиск?

Отсутствует

 

№1067426-09-2016 09:08:54

Black_Monk
Участник
 
Группа: Members
Зарегистрирован: 18-02-2012
Сообщений: 195
UA: Firefox 49.0

Re: Custom Buttons

bunda1 пишет

Как ты запускаешь поиск?

Поиск по-умолчанию - Enter'ом. А остальные - мышкой по иконке.


Windows 10 LTSC

Отсутствует

 

№1067526-09-2016 15:26:52

hartumov
Участник
 
Группа: Members
Зарегистрирован: 17-11-2013
Сообщений: 136
UA: Firefox 33.0

Re: Custom Buttons

Как можно отследить событие, когда закрывается выпадающий список подсказок в строке поиска браузера?
Это панель с id = PopupAutoComplete

Я прочитал что есть атрибут  onpopuphiding. Но как его использовать для этой задачи, не знаю.

Отсутствует

 

Board footer

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