villa7,
и счетчик нормально считает? У меня так к примеру: на этой странице выделил " зн ". На панели мини значение счетчика 3/4(первое-номер позиции выделенного, второе - всего найденных на странице). Теперь жму "искать следующее" или "искать предыдущее" переход происходит, номер позиции выделенного не меняется.
Отсутствует
У меня счётчик полностью работоспособный.
Аналогично, счетчик работает, но bunda1 специльно для меня переделывал его как-то давно:
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());
Отсутствует
А код можно? Все функции работают без глюков?
Про все функции не скажу, давно не проверял, но тем что пользуюсь, всё работает.
Toggle Find.txt
ПС Только я в коде под себя стиль правил, точно не помню уже что.
Отсутствует
villa7
Странно, у меня выделяет. А в меню кнопки Автовыделение включено?
Добавлено 11-07-2015 00:40:33
Выделенное после нажатия Find - Найти на странице не копируется в финдбар-текстбокс
И эта функция у меня работает. Ребята похоже у вас какие-то проблемы. Тогда ждите bunda1, он вам скажет чё и как.
Отредактировано voqabuhe (11-07-2015 00:41:38)
Отсутствует
villa7, lokiju
Да есть глюк с счётчиком эсли нажимать на кнопку поиск на мини панели
вот исправил: Toggle Find для FF28+
Добавлено 11-07-2015 12:01:53
Пишите про другие глюки
Отредактировано bunda1 (11-07-2015 12:01:53)
Отсутствует
bunda1
Спасибо, счётчик работает. Раньше(других версиях , не Toggle Find для FF28+) после нажатия Find - Найти на странице подсвечивались все найденные позиции на странице. Сейчас только текущая позиция отмечается зелёным.
Добавлено 11-07-2015 14:04:16
И ещё при переходе на последнюю позицию(в конце страницы) текстовое поле мигало жёлтым , сейчас мигает жёлтым при переходе с последней позиции на первую(в начале страницы)
Отредактировано lokiju (11-07-2015 14:04:16)
Отсутствует
bunda1
Спасибо, счётчик работает. Раньше(других версиях , не Toggle Find для FF28+) после нажатия Find - Найти на странице подсвечивались все найденные позиции на странице. Сейчас только текущая позиция отмечается зелёным.
Не понял о чём речь , может включи Автовыделение.
Отсутствует
bunda1 автовыделение включено, но похоже оно не срабатывает.
Странно, мне на FF42 это работает, если текущая позиция отмечается зелёным то должно и подсвечиваться все найденные позиции на странице, потому что это запускает одна функция. Может какое расширение или кнопка конфликтует.
Отсутствует
У меня так к примеру: на этой странице выделил " зн ".
автовыделение включено, но похоже оно не срабатывает.
А ты учитываешь, что оно срабатывает начиная с трёх букв?
Отсутствует
Странно, мне на FF42 это работает, если текущая позиция отмечается зелёным то должно и подсвечиваться все найденные позиции на странице, потому что это запускает одна функция. Может какое расширение или кнопка конфликтует.
Выделение вручную работает по нажатию Find - Выделить текст на странице . Подождём , что напишет villa7. Потому что конфликтовать вроде как не с чем(нет ничего связаного с выделением, подсветкой и копированием)
Отсутствует
Даже не знаю исправимо сие или нет, но после обновления кода стало конфликтовать с этим
https://github.com/ardiman/userChrome.j … ontextmenu
и этим
https://forum.mozilla-russia.org/viewto … 28#p629428
Когда они оба включены, поиск осуществляется только после второго раза. Если отключить любое из них, то всё нормально. До этого всё работало с первого раза.
Отредактировано villa7 (12-07-2015 09:16:14)
Лучше спросить у знающих - чем лезть не зная.
Отсутствует
bunda1
Не выделяет весь абзац.
Отсутствует
villa7 пишет: bunda1Не выделяет весь абзац.Toggle Find для FF28+
Подсветка найденных позиций заработала. bunda1, спасибо . У меня работает всё, чем пользуюсь. Такой вопрос : хочу уменьшить размер иконки кнопки, не получается. Что неправильно?
this.Attribute("style","menupopup>.toolbarbutton-icon{ -moz-appearance: none !important; margin: 0 !important; padding: 2px !important;width: 16px !important;height: 20px !important;")
Отсутствует
lokiju
не this.Attribute а this.setAttribute и нужно без menupopup>.toolbarbutton-icon{ }. Лучше свой css код плюс \ положи в кнопке под:
// Стиль для панели поиска ................................ var uri = makeURI('data:text/css,'+ encodeURIComponent('\
Отредактировано bunda1 (21-07-2015 07:14:38)
Отсутствует
bunda1
Обрубыш который ты для меня делал, потерял функционал стандартный:
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());
1. Если слово на странице выделено и я нажимаю ctrl+f, то выделенное слово не ищется, а должно.
2. Если ничего не выделено на странице, то при нажатии ctrl+f, открывается панель с предыдущим поиском, но слово в панели не выделено, а должно быть, чтобы сразу можно было печатать новое слово.
Я не заметил когда все это пропало, начало надоедать недавно, можно с этим что-то сделать?
Отсутствует