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

Юристы зарабатывают огромные деньги и славу, оперируя хорошим знанием законов. Правила форума — простой путь к успешному общению.

№772613-05-2014 23:35:03

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

Re: Custom Buttons

roadrunner пишет

bunda1
панель вверху окрывается  с этим кодом в firefox 28,можно оставить чтобы внизу открывалась?

Выделить код

Код:

const forceFind = false, forceFindCS = true;
if (gBrowser.currentURI.spec == "about:customizing") return;


// Приклеить элемент findbar к странице( #appcontent ) ................................
const fbID = "FindToolbar-m";
delete window.gFindBar;
window.gFindBar = document.getElementById(fbID);
if (!gFindBar) {
    //gFindBar = gBrowser.parentNode.insertBefore(document.createElement("findbar"), gBrowser);
    gFindBar = gBrowser.parentNode.appendChild( document.createElement("findbar") );
    gFindBar.id = fbID;
    gFindBar.setAttribute("browserid", "content");
    gFindBar.clientTop;
    delete window.gFindBarInitialized;
    window.gFindBarInitialized = true;
    gFindBar._selectionMaxLen = 1000;    // лимит символов для поиска
}
addEventListener("keypress", gFindBar );  // добавить поиск по мере набора текста


// Ctrl+F, показать - скрыть панель поиска ....................................
function toggleFindbar() gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close();
addEventListener("keydown", function(e)
    e.keyCode == e.DOM_VK_F && e.ctrlKey && !e.altKey && !e.shiftKey
    && !e.preventDefault() && toggleFindbar()
, false);
this.onclick = function(e) { if (!e.button) toggleFindbar() };


// Показать количество совпадений на панели поиска ................................
const textbox = gFindBar.getElement("findbar-textbox"),
nrm = Ci.nsISelectionController.SELECTION_NORMAL, labID = "hits-m";
var lab = document.getElementById(labID);
if (!lab) {
    lab = textbox.parentNode.insertBefore(document.createElement("label"), textbox);
    lab.id = labID;
}
var curHit, allHits;

function updateHits(arg) {
    if (gFindBar.hidden) return;
    var word = textbox.value;
    if (!word) {
        lab.value = "0/0";
        textbox.removeAttribute("status");
        return;
    }
    var win = arg instanceof Window && arg || content;
    if (win == content) curHit = allHits = 0;
    var findbarFinder = gFindBar._browser.finder;
    var controller = findbarFinder._getSelectionController(win);
    var doc = win.document;

    if (word && controller && doc && doc.documentElement) {
        var body = doc instanceof HTMLDocument && doc.body ? doc.body : doc.documentElement;

        var searchRange = doc.createRange();
        searchRange.selectNodeContents(body);
        var startPt = searchRange.cloneRange();
        startPt.collapse(true);
        var endPt = searchRange.cloneRange();
        endPt.collapse(false);

        var retRange = null;
        var finder = Cc["@mozilla.org/embedcomp/rangefind;1"].createInstance().QueryInterface(Ci.nsIFind);
        finder.caseSensitive = gFindBar._shouldBeCaseSensitive(word);

        while ((retRange = finder.Find(word, searchRange, startPt, endPt))) {
            allHits++;
            if (!curHit) {
                var sel = controller.getSelection(nrm), range;
                if (sel.toString()) range = sel.getRangeAt(0);
                else {
                    var editableNode = findbarFinder._getEditableNode(retRange.startContainer);
                    if (editableNode) sel = editableNode.editor.selectionController.getSelection(nrm);
                    if (sel.toString()) range = sel.getRangeAt(0);
                }
                var comp = range && ["startContainer", "endContainer", "startOffset", "endOffset"]
                    .every(function(prop) range[prop] == retRange[prop]);
                if (comp) curHit = allHits;
            }
            startPt = retRange.cloneRange();
            startPt.collapse(false);
        }
        Array.forEach(win.frames, function(frame) updateHits(frame));
    }
    if (win != content) return;
    allHits ? textbox.removeAttribute("status") : textbox.setAttribute("status", "notfound");
    forceFind && !curHit && allHits && gFindBar._find();
    lab.value = curHit + "/" + allHits;
}
updateHits();


gFindBar.updateHits = updateHits;
function insUpd(methodName, code) {
    const method = gFindBar[methodName];
    gFindBar[methodName] = Function("arguments.callee.method.apply(this, arguments);" + (code || "") + " this.updateHits();");
    gFindBar[methodName].method = method;
    addDestructor(function() gFindBar[methodName] = method);
}
insUpd("_find"); insUpd("_findAgain");
insUpd("_setCaseSensitivity", forceFindCS && " this._find();");


const progressListener = {
    onStateChange: function(wpr, req, state)
        state & Ci.nsIWebProgressListener.STATE_STOP && setTimeout(updateHits, 320),
    onLocationChange: function(wpr, req) !req && updateHits()
};
addDestructor(function() gBrowser.removeProgressListener(progressListener));


function onFindbar() {
    gBrowser[(gFindBar.hidden ? "remove" : "add") + "ProgressListener"](progressListener);
    !gFindBar.hidden && updateHits();
}
onFindbar();
const observer = MutationObserver(onFindbar);
observer.observe(gFindBar, { attributes: true, attributesFilter: ["hidden"] });
addDestructor(function() observer.disconnect());

Отсутствует

 

№772714-05-2014 12:39:00

rbfyec
Участник
 
Группа: Members
Зарегистрирован: 07-07-2012
Сообщений: 365
UA: Firefox 29.0

Re: Custom Buttons

bunda1 спасибо!! :)

У меня ещё один вопрос. В стандартной панели поиска работали жесты FireGestures - копировать, вставить, удалить.
А в этой панельке не работают. Отчего это?
Можно как-то подружить FireGestures с этой панелькой?

Отсутствует

 

№772814-05-2014 22:06:18

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

Re: Custom Buttons

rbfyec пишет

bunda1 спасибо!! :)

У меня ещё один вопрос. В стандартной панели поиска работали жесты FireGestures - копировать, вставить, удалить.
А в этой панельке не работают. Отчего это?
Можно как-то подружить FireGestures с этой панелькой?

Проблема в том что при жесте мышью панель поиска теряет фокус и я не знаю как это быстро исправить :(

Отсутствует

 

№772914-05-2014 22:41:13

rbfyec
Участник
 
Группа: Members
Зарегистрирован: 07-07-2012
Сообщений: 365
UA: Firefox 29.0

Re: Custom Buttons

bunda1 пишет

Проблема в том что при жесте мышью панель поиска теряет фокус и я не знаю как это быстро исправить :(

А стандартная панель поиска не теряла фокус?

Отсутствует

 

№773014-05-2014 23:04:51

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

Re: Custom Buttons

rbfyec пишет

bunda1 спасибо!! :)

У меня ещё один вопрос. В стандартной панели поиска работали жесты FireGestures - копировать, вставить, удалить.
А в этой панельке не работают. Отчего это?
Можно как-то подружить FireGestures с этой панелькой?

Ну тогда создай новые жесты для FireGestures с кодами:

Выделить код

Код:

// удалить
goDoCommand("cmd_delete");
try { gFindBar._findField.value = '' } catch(e) {};
Выделить код

Код:

// вставить
goDoCommand("cmd_paste");
try { gFindBar._findField.value = gClipboard.read() } catch(e) {};
Выделить код

Код:

// копировать
goDoCommand("cmd_copy");
try { gClipboard.write( gFindBar._findField.value ) } catch(e) {};

Отредактировано bunda1 (14-05-2014 23:06:45)

Отсутствует

 

№773115-05-2014 00:09:04

tuman18
Участник
 
Группа: Members
Зарегистрирован: 17-07-2008
Сообщений: 43
UA: Firefox 28.0

Re: Custom Buttons

Приветствую. Есть такая идея - по нажатию кнопки определенная ссылка в коде страницы изменяется, сменяя в итоге отображаемую на странице картинку на другую. Делал так в игровом клиенте когда-то, тот просто lua понимал - в фоксе это как-то возможно?

Отсутствует

 

№773215-05-2014 22:39:15

rbfyec
Участник
 
Группа: Members
Зарегистрирован: 07-07-2012
Сообщений: 365
UA: Firefox 29.0

Re: Custom Buttons

bunda1 пишет

Ну тогда создай новые жесты для FireGestures с кодами:

Нет, это совсем не то!
Мне не надо копировать/удалять/заменять содержимое FindBar-а целиком, а только выделение.
Плохо то, что на самом FindBar-е FireGestures не работает, а если делать жест на странице, то выделение сразу же сбрасывается.

Отсутствует

 

№773316-05-2014 15:18:24

parlament1
Участник
 
Группа: Members
Зарегистрирован: 17-03-2009
Сообщений: 91
UA: Firefox 29.0

Re: Custom Buttons

.

Помогите допилить кнопку Фиксированая страница

Есть инициализация кнопки, отключается скрол, но страница уходит влево и вверх от текущих координат.

Выделить код

Код:

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%3E%u0424%u0438%u043A%u0441%u0438%u0440%u043E%u0432%u0430%u043D%u043D%u0430%u044F%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0430%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAbpJREFUeNqcU81Kw0AQns3uJjYlpVUPhYK+gVCsh76HF+899VJ6UMQHEPFSeigFX8CL79GTD6GngkJb+pP/jTPbJsaiSLvwZRMy3zcz3+wyAHhCnMN+61Xg46Lb7Z5JKY1dmGEYql6vZ5CAEccxYdfslFAL8MVisWcHwP8UiKIIXNcD3w9AqQQYYyCECVJaYFkW7jwTEKvVKiPGsQLP8/XOuUQSEYhoagEhZAbiagHf9zVZKS0KpmlvglOi3IgRBBgGx4qMb4EkSTCAMtkZYS0gNJHzlMS2O9UCppTFxHEOWVrimsSRRFnYr+5FUZgQl/56GGgVi0UolUpQqVSgXC7r90KhoEWCIIDlcgnT6RQmkwnMZjOYz+dosO+zRqNxPRgMHimQsuaxrgCAWlRoEJ0Vmk4rbsFQDaHdbt+wer1+hQEn2yV2Op2H/He/37/djkFP3snAZ8qQLsqEWe4cx/kRjNVyNPU+rSpzcTweAyFddEjQB6tWq4Ft23oSrutS7xb1n46cVrVazSymaRwhjhEHaOhls9k8zWcajUZvaOQLvgaID8QnDYPlLoa9gfjn/NOtWyLo+KovAQYAowmjJubOgoMAAAAASUVORK5CYII%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*/%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bthis.checked%20%3D%20%21this.checked%3B%0A%0Aif%20%28%20this.%20checked%20%29%20%0A%20%20%20%20%20this.image%20%3D%20%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAbdJREFUeNqcUsFKAlEUve/Nc0ZHFKUWglR/EEi28D8iaBm4cuOqiD4gop0LCdq0DKL/cNVHVBuhQMXMxubNdO7TZ6MUoQ/OzHsz955z77lPENENsEfrrUeFx/7x/cuu8ny5SmYYfES3h1uSCaQmR+ogWFHcYUFD4IzH4zU7IOdPAq01BahqMpmQjqJZtCLluuQCqVRqTqCCRPkRgj9x1mFIwnFMkut5pJDAcPgNAjUlUIYgjuOpMVD9QqLE51QmM09aSLZ7kzojMMrsCH742ezviQjlt4OqWEAKMSdwY9JxOl8UtjQbbJVMEiDkz6TD8TuX7TLNp5TSy0I5n89TsVikQqFg9hm0gX/GyNFoRP1+n3q9Hg0GAxoOh2xyIKrV6km73b7iQFZKQs4U2SM2lycTwqO6rtN1dE2NRuNUVCqVIwRsL4+x2WxeJs+tVutsOUYI8cwTuLNTsGOEynkul1sIRrWwQ11IuXjjVbfbJYZdHmYOH7xyuUy+7xtD+aKhd4/7T96ZUqlEwhIBG8AmkIahB7VabSep1Ol0nmDkA7YT4BV442FYAq7Ln0H9c/81MAI+uONvAQYA1/Sld40oN/MAAAAASUVORK5CYII%3D%22%3B%0Aelse%20%0A%20%20%20%20%20this.image%20%3D%20%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAbpJREFUeNqcU81Kw0AQns3uJjYlpVUPhYK+gVCsh76HF+899VJ6UMQHEPFSeigFX8CL79GTD6GngkJb+pP/jTPbJsaiSLvwZRMy3zcz3+wyAHhCnMN+61Xg46Lb7Z5JKY1dmGEYql6vZ5CAEccxYdfslFAL8MVisWcHwP8UiKIIXNcD3w9AqQQYYyCECVJaYFkW7jwTEKvVKiPGsQLP8/XOuUQSEYhoagEhZAbiagHf9zVZKS0KpmlvglOi3IgRBBgGx4qMb4EkSTCAMtkZYS0gNJHzlMS2O9UCppTFxHEOWVrimsSRRFnYr+5FUZgQl/56GGgVi0UolUpQqVSgXC7r90KhoEWCIIDlcgnT6RQmkwnMZjOYz+dosO+zRqNxPRgMHimQsuaxrgCAWlRoEJ0Vmk4rbsFQDaHdbt+wer1+hQEn2yV2Op2H/He/37/djkFP3snAZ8qQLsqEWe4cx/kRjNVyNPU+rSpzcTweAyFddEjQB6tWq4Ft23oSrutS7xb1n46cVrVazSymaRwhjhEHaOhls9k8zWcajUZvaOQLvgaID8QnDYPlLoa9gfjn/NOtWyLo+KovAQYAowmjJubOgoMAAAAASUVORK5CYII%3D%22%3B%0A%0A%0Avar%20css%20%3D%20%27%5C%0A@-moz-document%20url-prefix%28%22http%22%29%2C%20url-prefix%28%22https%22%29%2C%20url-prefix%28%22ftp%22%29%2C%20url-prefix%28%22file%22%29%20%7B%5C%0Abody%20%7B%5C%0Aposition%3A%20fixed%20%21important%3B%5C%0A%7D%5C%0A%7D%27%3B%0A%0Aconst%20sss%20%3D%20Cc%5B%22@mozilla.org/content/style-sheet-service%3B1%22%5D.getService%28Ci.nsIStyleSheetService%29%3B%20%20%0Avar%20uri%20%3D%20makeURI%28%22data%3Atext/css%2C%22%20+%20encodeURIComponent%28css%29%29%3B%0A%0Aif%20%28%20sss.sheetRegistered%28uri%2C%20sss.AGENT_SHEET%29%20%29%20sss.unregisterSheet%28uri%2C%20sss.AGENT_SHEET%29%3B%0Aelse%20%0A%20%20%20%20sss.loadAndRegisterSheet%28uri%2C%20sss.AGENT_SHEET%29%3B%0A%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

С этим кодом (более удачное решение)фиксируются  вертикальные координаты, но по горизонтали станица тоже уходит влево.

Выделить код

Код:

var bd=window.content.document.getElementsByTagName("body")[0];
var ctab=getBrowser (). selectedTab;
var url=content.document.location;
var css;
function remstyle(){
var sss = Components.classes["@mozilla.org/content/style-sheet-service;1"].getService(Components.interfaces.nsIStyleSheetService);
var cssURI = makeURI("data:text/css," + encodeURIComponent(css));
if ( sss.sheetRegistered(cssURI, sss.AGENT_SHEET) ) sss.unregisterSheet(cssURI, sss.AGENT_SHEET); //сбросить стиль
};

if (ctab.hasAttribute('scrollfix')){
// page already fixed - delete css
ctab.removeAttribute('scrollfix');
var style = window.getComputedStyle(bd, null);

var sYp = style.top;
css = '@-moz-document url('+url+'){body{'
css=css+'top: '+sYp+' !important;position: fixed !important;}}';
setTimeout(remstyle, 300);//fix because window.getComputedStyle is slow, if need increase timeout
}else{
//page not fixed - add css
ctab.setAttribute('scrollfix','fixed');

var sYp=content.scrollY;
var css = '@-moz-document url('+url+'){body{'
css=css+'top: -'+sYp+'px !important;position: fixed !important;}}';
var sss = Components.classes["@mozilla.org/content/style-sheet-service;1"].getService(Components.interfaces.nsIStyleSheetService);
var cssURI = makeURI("data:text/css," + encodeURIComponent(css));
sss.loadAndRegisterSheet(cssURI, sss.AGENT_SHEET);//установить стиль
}

∎•★٩(̾●̮̮̃̾•̃̾)۶★•∎

Отсутствует

 

№773416-05-2014 23:41:51

Ferguss114
Участник
 
Группа: Members
Зарегистрирован: 31-03-2012
Сообщений: 207
UA: Firefox 29.0

Re: Custom Buttons

Вопрос: в [firefox] 29 кнопки, помещённые в меню (вверху справа), должны инициализироваться при запуске браузера?
Или они инициализируются только если это меню открыть?

Отсутствует

 

№773516-05-2014 23:49:12

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

Re: Custom Buttons

Ferguss114
Инициализируются только после первого открытия, так сделано это меню – пока оно закрыто, кнопок в нем нет, они в gNavToolbox.palette.
И да, это же легко проверяется.

Добавлено 16-05-2014 23:51:24

Infocatcher пишет

в gNavToolbox.palette

Проверить можно, например, так:

Выделить код

Код:

gNavToolbox.palette.getElementsByAttribute("id", "new-window-button")[0]

Отредактировано Infocatcher (16-05-2014 23:51:24)


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

Отсутствует

 

№773617-05-2014 01:32:56

Ferguss114
Участник
 
Группа: Members
Зарегистрирован: 31-03-2012
Сообщений: 207
UA: Firefox 29.0

Re: Custom Buttons

А где же теперь размещать кнопки, если я хочу, чтобы они работали сразу после запуска браузера?
Выходит кроме панели меню негде?

Отсутствует

 

№773717-05-2014 10:09:43

Mishania
Участник
 
Группа: Members
Зарегистрирован: 22-10-2011
Сообщений: 356
UA: Firefox 29.0

Re: Custom Buttons

Как-то по моей просьбе делали кнопку для поиска скрипта на сайте userscripts.org

Выделить код

Код:

url=getBrowser().currentURI.spec;
domen = url.split(/\/+/g)[1];
getBrowser ().  selectedTab = getBrowser (). addTab ("https://userscripts.org/scripts/search?q=" + domen +"&submit=Search");

А как-бы его переделать для поиска на http://bugmenot.com/?

Отсутствует

 

№773817-05-2014 11:34:12

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

Отсутствует

 

№773917-05-2014 12:30:04

Ferguss114
Участник
 
Группа: Members
Зарегистрирован: 31-03-2012
Сообщений: 207
UA: Firefox 29.0

Re: Custom Buttons

После обновления до 29 версии в консоли постоянно появляется ошибка

Выделить код

Код:

A promise chain failed to handle a rejection.

Full Message: 
Full Stack: JS frame :: resource://gre/components/nsLivemarkService.js :: LS_getLivemark/< :: line 405
native frame :: <unknown filename> :: <TOP_LEVEL> :: line 0

Ругается на эту строчку deferred.reject(Components.Exception("", Cr.NS_ERROR_INVALID_ARG));
Что это и откуда взялось?

Отсутствует

 

№774017-05-2014 12:33:09

Mishania
Участник
 
Группа: Members
Зарегистрирован: 22-10-2011
Сообщений: 356
UA: Firefox 29.0

Re: Custom Buttons

voqabuhe
Скрипты или не работают, или работают не так как надо. Поэтому и спрашиваю про кнопку.

Отсутствует

 

№774117-05-2014 12:53:32

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

Re: Custom Buttons

Mishania пишет

Скрипты или не работают, или работают не так как надо.

Действительно перестали работать, как я понял потому что сам BugMeNot стал требовать регистрации :sick:

Отсутствует

 

№774218-05-2014 13:49:00

Indomito
Участник
 
Группа: Members
Откуда: Москва-Север
Зарегистрирован: 27-08-2009
Сообщений: 426
UA: Firefox 29.0

Re: Custom Buttons

Вопрос к Infocatcher т.к. кнопка его или кто знает или делал аналогичное ;)

Кнопка bookmarksFolder.js и я добавил такой код

Авто Открытие/Скрытие

Выделить код

Код:

this. onmouseover = function (event)
{
    this. open = true;
 };


this. onmouseout = function (event)
{
    this. open = false;
    //setTimeout(function() {this. open = false;},1250);
    
 };


Как бы сделать так, что-бы по ПКМ на пункте из списка не было автоскрытия... давно на JS не писал... забыл :(

Тайм-аут конечно не то... нужно просто временное отключение на этапе редактирования.


"Никогда не выявляйте в программе ошибки, если не знаете, что с ними дальше делать." Штейнбах

Отсутствует

 

№774319-05-2014 12:55:42

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

Re: Custom Buttons

Indomito пишет

Как бы сделать так, что-бы по ПКМ на пункте из списка не было автоскрытия...

Вот пример: code_snippets/autoOpenCloseMenu.js


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

Отсутствует

 

№774419-05-2014 18:25:46

toxa
Участник
 
Группа: Members
Зарегистрирован: 11-04-2012
Сообщений: 261
UA: Firefox 25.0

Re: Custom Buttons

Почему с этим кодом получается непонятное

Выделить код

Код:

sel = gURLBar.value.substring(gURLBar.selectionStart, gURLBar.selectionEnd);
alert(sel)

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

Отсутствует

 

№774519-05-2014 18:57:47

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

Re: Custom Buttons

toxa пишет

хотя сейчас выделения в адресной строке нет

Есть, но на адресной строке это не проверить из-за того, что при получении фокуса выделяется весь текст.
А вот тут в поле для ответа – можно. Если уйти Tab'ом, то выделение визуально пропадает, но если вернуться через Shift+Tab – восстанавливается.


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

Отсутствует

 

№774619-05-2014 19:23:13

toxa
Участник
 
Группа: Members
Зарегистрирован: 11-04-2012
Сообщений: 261
UA: Firefox 25.0

Re: Custom Buttons

Infocatcher пишет

Есть, но на адресной строке это не проверить из-за того, что при получении фокуса выделяется весь текст.
А вот тут в поле для ответа – можно. Если уйти Tab'ом, то выделение визуально пропадает, но если вернуться через Shift+Tab – восстанавливается.

А как сделать, чтобы выполнялось нужное мне действие, только если визуально что-то выделено?

Отсутствует

 

№774719-05-2014 20:11:14

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

Re: Custom Buttons

toxa
Можно проверять/использовать document.commandDispatcher.focusedElement.


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

Отсутствует

 

№774819-05-2014 21:11:26

toxa
Участник
 
Группа: Members
Зарегистрирован: 11-04-2012
Сообщений: 261
UA: Firefox 25.0

Re: Custom Buttons

Infocatcher пишет

Можно проверять/использовать document.commandDispatcher.focusedElement.

Сделал :)
Спасибо, Infocatcher!

Отсутствует

 

№774919-05-2014 21:40:35

rbfyec
Участник
 
Группа: Members
Зарегистрирован: 07-07-2012
Сообщений: 365
UA: Firefox 29.0

Re: Custom Buttons

bunda1 пишет
rbfyec пишет

Помогите, пожалуйста, приделать счётчик количества совпадений к панели поиска. К стандартной панели, не кнопке.

Выделить код

Код:

const forceFind = false, forceFindCS = true;

// Приклеить элемент findbar к странице( #appcontent ) ................................
const fbID = "FindToolbar-m";
delete window.gFindBar;
window.gFindBar = document.getElementById(fbID);
if (!gFindBar) {
    gFindBar = gBrowser.parentNode.insertBefore(document.createElement("findbar"), gBrowser);
    gFindBar.id = fbID;
    gFindBar.setAttribute("browserid", "content");
    gFindBar.clientTop;
    delete window.gFindBarInitialized;
    window.gFindBarInitialized = true;
    gFindBar._selectionMaxLen = 1000;    // лимит символов для поиска
}


// Ctrl+F, показать - скрыть панель поиска ....................................
function toggleFindbar() gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close();
addEventListener("keydown", function(e)
    e.keyCode == e.DOM_VK_F && e.ctrlKey && !e.altKey && !e.shiftKey
    && !e.preventDefault() && toggleFindbar()
, false);
this.onclick = function(e) { if (!e.button) toggleFindbar() };


// Показать количество совпадений на панели поиска ................................
const textbox = gFindBar.getElement("findbar-textbox"),
nrm = Ci.nsISelectionController.SELECTION_NORMAL, labID = "hits-m";
var lab = document.getElementById(labID);
if (!lab) {
    lab = textbox.parentNode.insertBefore(document.createElement("label"), textbox);
    lab.id = labID;
}
var curHit, allHits;

function updateHits(arg) {
    if (gFindBar.hidden) return;
    var word = textbox.value;
    if (!word) {
        lab.value = "0/0";
        textbox.removeAttribute("status");
        return;
    }
    var win = arg instanceof Window && arg || content;
    if (win == content) curHit = allHits = 0;
    var findbarFinder = gFindBar._browser.finder;
    var controller = findbarFinder._getSelectionController(win);
    var doc = win.document;

    if (word && controller && doc && doc.documentElement) {
        var body = doc instanceof HTMLDocument && doc.body ? doc.body : doc.documentElement;

        var searchRange = doc.createRange();
        searchRange.selectNodeContents(body);
        var startPt = searchRange.cloneRange();
        startPt.collapse(true);
        var endPt = searchRange.cloneRange();
        endPt.collapse(false);

        var retRange = null;
        var finder = Cc["@mozilla.org/embedcomp/rangefind;1"].createInstance().QueryInterface(Ci.nsIFind);
        finder.caseSensitive = gFindBar._shouldBeCaseSensitive(word);

        while ((retRange = finder.Find(word, searchRange, startPt, endPt))) {
            allHits++;
            if (!curHit) {
                var sel = controller.getSelection(nrm), range;
                if (sel.toString()) range = sel.getRangeAt(0);
                else {
                    var editableNode = findbarFinder._getEditableNode(retRange.startContainer);
                    if (editableNode) sel = editableNode.editor.selectionController.getSelection(nrm);
                    if (sel.toString()) range = sel.getRangeAt(0);
                }
                var comp = range && ["startContainer", "endContainer", "startOffset", "endOffset"]
                    .every(function(prop) range[prop] == retRange[prop]);
                if (comp) curHit = allHits;
            }
            startPt = retRange.cloneRange();
            startPt.collapse(false);
        }
        Array.forEach(win.frames, function(frame) updateHits(frame));
    }
    if (win != content) return;
    allHits ? textbox.removeAttribute("status") : textbox.setAttribute("status", "notfound");
    forceFind && !curHit && allHits && gFindBar._find();
    lab.value = curHit + "/" + allHits;
}
updateHits();


gFindBar.updateHits = updateHits;
function insUpd(methodName, code) {
    const method = gFindBar[methodName];
    gFindBar[methodName] = Function("arguments.callee.method.apply(this, arguments);" + (code || "") + " this.updateHits();");
    gFindBar[methodName].method = method;
    addDestructor(function() gFindBar[methodName] = method);
}
insUpd("_find"); insUpd("_findAgain");
insUpd("_setCaseSensitivity", forceFindCS && " this._find();");


const progressListener = {
    onStateChange: function(wpr, req, state)
        state & Ci.nsIWebProgressListener.STATE_STOP && setTimeout(updateHits, 320),
    onLocationChange: function(wpr, req) !req && updateHits()
};
addDestructor(function() gBrowser.removeProgressListener(progressListener));


function onFindbar() {
    gBrowser[(gFindBar.hidden ? "remove" : "add") + "ProgressListener"](progressListener);
    !gFindBar.hidden && updateHits();
}
onFindbar();
const observer = MutationObserver(onFindbar);
observer.observe(gFindBar, { attributes: true, attributesFilter: ["hidden"] });
addDestructor(function() observer.disconnect());

Я попробовал использовать весь код, но без этого куска:

Выделить код

Код:

// Приклеить элемент findbar к странице( #appcontent ) ................................
const fbID = "FindToolbar-m";
delete window.gFindBar;
window.gFindBar = document.getElementById(fbID);
if (!gFindBar) {
    gFindBar = gBrowser.parentNode.insertBefore(document.createElement("findbar"), gBrowser);
    gFindBar.id = fbID;
    gFindBar.setAttribute("browserid", "content");
    gFindBar.clientTop;
    delete window.gFindBarInitialized;
    window.gFindBarInitialized = true;
    gFindBar._selectionMaxLen = 1000;    // лимит символов для поиска
}

Тогда используется "родная" панель поиска и мышиные жесты в ней работают.
Вроде хорошо, но счётчик совпадений появляется только на первой вкладке. Как бы это пофиксить, оставивши "родную" панель поиска?

Отсутствует

 

№775019-05-2014 23:17:08

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

Re: Custom Buttons

rbfyec пишет

Тогда используется "родная" панель поиска и мышиные жесты в ней работают.
Вроде хорошо, но счётчик совпадений появляется только на первой вкладке. Как бы это пофиксить, оставивши "родную" панель поиска?

Не знаю, наверно я такое не сделаю :/

Отсутствует

 

Board footer

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