В режиме поиска Chrome он может выделить все совпадающие слова на странице
Может ли vimium это сделать?
Не в данный момент. Думаю, мы бы согласились с патчем, если бы он не вызывал заметных задержек.
Это будет довольно сложная задача - предполагая, что мы все еще используем window.find () для выполнения поиска, нам нужно будет вызывать его несколько раз, чтобы отображать все совпадения, а затем отображать наш собственный пользовательский интерфейс выделения.
Если мы в конечном итоге столкнемся с этой проблемой, мы должны избавиться от эстетики совпадений Safari, ИМО.
+1 за эту функцию.
+1
Вимиум потрясающий! Насколько я понимаю, это единственный недостающий элемент.
+1 за эту функцию. Я действительно хотел предложить это сам, но у меня было чувство «я не могу быть единственным».
Даааааааааааааааааааааааа!
+1
+1
Если / когда это будет реализовано, было бы неплохо видеть все совпадения, визуально отмеченные на полосе прокрутки, как это делает Chromium.
+1
Недавно узнал о vimium, не могу поверить, что не установил его раньше.
+1
+1
+1
+1
+1
и я думаю, это будет еще одна потрясающая функция
+1
пожалуйста, прекратите отвечать с бесполезными комментариями +1. это не добавляет ничего к обсуждению и будет тратить много времени людей, так как они будут получать уведомления о вашем бесполезном «вкладе». используйте функцию «смотреть», чтобы подписаться на билет.
+1
+1, хром по умолчанию подсвечивает все совпадения. Если реализация этого снова будет проблемой с производительностью, можно ли напрямую вызвать поиск Chrome?
можно ли напрямую вызвать поиск хрома?
Нет.
Чтобы реализовать что-то подобное, нужно что-то вроде (обновленного) # 1081, чтобы браузер не зависал при каждом поиске, что существенно увеличивает нагрузку на разработку / обслуживание.
Закрытие.
Каким бы популярным оно ни было, у нас нет способа реализовать это.
(В настоящее время Vimium вообще не выделяет подсветку. Мы просто вызываем window.find()
.)
4 года...
+1 Это действительно отличная функция, если ее можно реализовать.
Я провел небольшое исследование. Кажется, это делает это http://stackoverflow.com/a/5887719/96100 (решение включает IE, поэтому его можно еще больше упростить, удалив часть IE)
Но я думаю, что есть еще вопрос - когда и как убрать подсветку. Когда, я думаю, при запуске следующего поиска или при выполнении чего-то вроде :noh
; как я предполагаю, execCommand('undo')
сделает это.
Действительно с нетерпением жду возможности.
Это необходимо, и не уверен, что это должна быть особенность vimium, но другие расширения, подобные vim, делают это ( например, клавиши серфинга ). Прошло уже почти 5 лет, а этой функции еще нет. Что происходит в мире?
Я провел небольшое исследование. Кажется, это делает это http://stackoverflow.com/a/5887719/96100 (решение включает IE, поэтому его можно еще больше упростить, удалив часть IE)
Это решение, похоже, включает в себя встроенные модификации DOM страниц, что меня очень неудобно.
Что происходит в мире?
Это сложно сделать должным образом (или, по крайней мере, к моему удовлетворению).
Полная реализация должна
class SuppressPrintable
(или, что еще сложнее, выделить lass Supp
) на этой странице<span class="pl-k">class</span> <span class="pl-en" style="background-color: transparent;">SuppressPrintable</span> <span class="pl-k">extends</span> <span class="pl-e">Mode</span>
testtest
в test<img src="#">test
, как это делает собственный findtesttest
в test<input type="text">test
(например, Firefox) или не делайте этого (например, Chrome).white-space: normal
или nowrap
. test string
отображается как test string
, поэтому нам нужно это найти. (клавиши серфинга не могут этого сделать, так как он использует node.data
)white-space: pre
, pre-line
или pre-wrap
. test string
отображается как test string
, поэтому нам нужно найти это<br />
или <p></p>
). (клавиши серфинга не могут этого сделать)Test<br />Test
следует найти и выделить путем поиска Test\nTest
( или, возможно, Test\r\nTest
? )<p>Test</p><p>Test</p>
должен быть найден и выделен путем поиска Test\n\nTest
(или Test\r\n\r\nTest
)<input>
s, <textarea>
s, <button>
s и т. д. Это серьезная проблема, которую нужно сделать правильно.Мы можем использовать свойство innerText
чтобы получить текстовое представление страницы, которое сообщает нам о большинстве совпадений (кроме, в частности, упомянутых в последнем пункте маркера), и которые использует Vimium. Однако, чтобы выделить (или даже создать выделение без использования window.find
), мы должны сопоставить результаты текстового поиска (на innerText
) обратно в диапазоны в DOM.
Мой предложенный (ленивый) подход для этого будет включать в себя своего рода бинарный поиск для бедняков, создание Range
s и использование toString()
для отображения в innerText
. Сам я не особо заинтересован в реализации этого.
Похоже, это очень желанная функция, но, возможно, все требования, вместе взятые, слишком велики, чтобы их можно было удовлетворить. Возможно, меньший набор подэтапов сделает это более доступным.
+1
6 лет спустя я все еще надеюсь, что у меня будет эта функция
Расширение Chrome Regex Search
использует очень опасный способ реализации функции выделения и может нарушить работу некоторых обычных веб-страниц, поскольку может нарушить код JavaScript хоста и удалить некоторые действия щелчка.
Кажется, не только у меня есть эта проблема.
Я провел небольшое исследование. Кажется, это делает это http://stackoverflow.com/a/5887719/96100 (решение включает IE, поэтому его можно еще больше упростить, удалив часть IE)
Это решение, похоже, включает в себя встроенные модификации DOM страниц, что меня очень неудобно.
Что происходит в мире?
Это сложно сделать должным образом (или, по крайней мере, к моему удовлетворению).
Полная реализация должна
находить среди элементов (которые, похоже, не могут сделать клавиши серфинга; их код см. здесь и здесь )
- например. найти и выделить
class SuppressPrintable
(или, что еще сложнее, выделитьlass Supp
) на этой странице- обратите внимание, что в строке, которая нас интересует, есть HTML
<span class="pl-k">class</span> <span class="pl-en" style="background-color: transparent;">SuppressPrintable</span> <span class="pl-k">extends</span> <span class="pl-e">Mode</span>
- например. найти и выделить
testtest
вtest<img src="#">test
, как это делает собственный find- либо найдите и выделите
testtest
вtest<input type="text">test
(например, Firefox) или не делайте этого (например, Chrome).найти и выделить строку, скопированную прямо со страницы. Применяются два случая:
- у родителя есть
white-space: normal
илиnowrap
.test string
отображается какtest string
, поэтому нам нужно это найти. (клавиши серфинга не могут этого сделать, так как он используетnode.data
)- у родителя есть
white-space: pre
,pre-line
илиpre-wrap
.test string
отображается какtest string
, поэтому нам нужно найти этонайти среди элементов, представляющих пробелы (например,
<br />
или<p></p>
). (клавиши серфинга не могут этого сделать)
- например.
Test<br />Test
следует найти и выделить путем поискаTest\nTest
( или, возможно,Test\r\nTest
? )- например.
<p>Test</p><p>Test</p>
должен быть найден и выделен путем поискаTest\n\nTest
(илиTest\r\n\r\nTest
)- (необязательно) найти и выделить совпадения в
<input>
s,<textarea>
s,<button>
s и т. д. Это серьезная проблема, которую нужно сделать правильно.Мы можем использовать свойство
innerText
чтобы получить текстовое представление страницы, которое сообщает нам о большинстве совпадений (кроме, в частности, упомянутых в последнем пункте маркера), и которые использует Vimium. Однако, чтобы выделить (или даже создать выделение без использованияwindow.find
), мы должны сопоставить результаты текстового поиска (наinnerText
) обратно в диапазоны в DOM.Мой предложенный (ленивый) подход для этого будет включать в себя своего рода бинарный поиск для бедняков, создание
Range
s и использованиеtoString()
для отображения вinnerText
. Сам я не особо заинтересован в реализации этого.
Я также провожу небольшое исследование window.find (). Он только выделяет текущий результат в сети, но не выделяет весь результат. Может быть, вызвать метод несколько раз? Я думаю, что это не лучшая идея для этого вопроса.
как насчет этой рутины?
в режиме поиска, прежде чем пользователи нажмут клавишу ввода, вызовите window.find () только один раз для каждого обновленного ввода.
после использования нажмите клавишу ввода, вызовите window.find (), чтобы показать все вхождения.
[возможно, чтобы запомнить позицию результата поиска прямо перед вводом]
window.find()
всегда выделяет «текущую» выбранную область, в то время как нет идеального метода для имитации цветового блока фона (например, если линия имеет свой фоновый цвет / изображение, то имитированный цвет фона будет невидимым).
window.find()
всегда выделяет «текущую» выбранную область, в то время как нет идеального метода для имитации цветового блока фона (например, если линия имеет свой фоновый цвет / изображение, то имитированный цвет фона будет невидимым).
Привет, позвольте мне более четко рассказать о моем распорядке.
Пользователь вводит a
, вызывает window.find
пока он не вернет NULL. собрать все спички
Пользователь вводит ab
, вызывает window.find
пока он не вернет NULL. собрать все совпадения, отбросить предыдущие
При использовании hit enter
фактически используется массив результатов поиска.
@Piping window.find()
всегда удаляет все старые области выделения, а затем выделяет только одну новую, так что на самом деле нет API JavaScript для выделения списка областей.
Отказ от ответственности: я больше не работаю над расширениями браузера ни в какой форме, поэтому мои знания, вероятно, устарели.
Пользователь вводит
a
, вызываетwindow.find
пока он не вернетNULL
. собрать все спички
Пользователь вводитab
, вызываетwindow.find
пока он не вернетNULL
. собрать все совпадения, отбросить предыдущие
window.find
- это ужасно, и его следует по возможности избегать
<input>
/ <textarea>
трудно получить эти данные из колодца, даже до того, как нам придется беспокоиться о нетривиальной проблеме выделения в них текста.Когда я был соавтором, мы боролись за подсчет количества результатов поиска из-за того, насколько медленными они были на больших страницах. Использование window.find
было примерно на порядок медленнее и вообще не работало с поиском по регулярным выражениям. Я настоятельно не рекомендую использовать его больше, чем для выполнения одного поиска, и даже в этом случае это должно быть крайней мерой.
@ gdh1995 Я не собирался использовать windows.find()
таким образом, как вы сказали. Это просто find
текст.
@ mrmr1993 Я понимаю, что эта функция требует больше вычислительных мощностей или человеческих усилий. Но, по крайней мере, у пользователя должен быть выбор [опция в конфигурации], чтобы сделать это с помощью vimium, даже если это медленно с точки зрения пользователя. В любом случае, это немного раздражает, что иногда используется Ctrl-F, а иногда используется /, и /
не работает должным образом (даже в vim).
Есть ли какая-то другая причина, кроме философской, почему расширение не может просто разрешить этот тип функции и поместить ее в «экспериментальный» раздел настроек расширения с соответствующими предупреждениями о том, что это может сломать некоторые страницы? Это кажется достаточно популярным запросом, чтобы иметь смысл добавить его туда. Я был вполне доволен, например, расширением « Selection Highlighter », несмотря на то, что оно могло сломать страницы просто потому, что утилита перевешивает риск; Думаю, здесь то же самое.
+1 здесь. :)
Я разделяю мнение Макинтако.
Я использую поиск vimium как замену инструменту поиска, так что я могу сохранить единообразие сочетаний клавиш для разных установок (всегда используйте / для поиска).
+1
В Firefox есть browser.find.find
и browser.find.highlightResults
. Похоже, что он не поддерживает регулярное выражение, но в остальном выглядит именно так, как требуется для этой проблемы.
Я просто хотел бы отметить, что SurfingKeys выделяет совпадения на странице с помощью функции поиска. Я не знаю, как они это делают (похоже, это какой-то оверлей), но он «достаточно хорош» в том смысле, что сейчас я использую это расширение. YMMV.
+1 - хотелось бы, чтобы для этого было хотя бы обходное решение.
8 лет... :)
Недавно у меня возникла еще одна идея: рисовать цвет фона подсветки необязательно, можно использовать вместо этого прямоугольники маскировки. Поэтому я реализовал простую версию в моем настроенном Vimium, Vimium C , и она поддерживает Ctrl+J/K
для поиска следующего / предыдущего и Ctrl+Shift+J/K
для мигания прямоугольников для всех совпадений в текущей видимой области.
Самый полезный комментарий
6 лет спустя я все еще надеюсь, что у меня будет эта функция