Вернуться к НЕ выбирая весь URL, когда я нажимаю на адресную строку

Недавно каждый браузер изменил это поведение. Вы щелкаете в любом месте адресной строки, и он выбирает весь URL.

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

Есть ли способ отменить это в более распространенных браузерах? - опера - firefox - хром

3 ответа

Решение

Я не знаю, что такое Opera или Chrome, но в Firefox достаточно просто открыть about:config и при необходимости изменить следующие логические значения:

browser.urlbar.clickSelectsAll
browser.urlbar.doubleClickSelectsAll

Firefox, март 2020 г. и более поздние версии

Примерно в марте 2020 г. browser.urlbar.clickSelectsAllпредпочтения удалены . С тех пор эта ошибка обсуждалась , где был предложен патч — он предполагал бы перекомпиляцию Firefox с нуля.

Как « clickSelectsAllне работает» в Bugzilla накапливаются дубликаты, один из них получил комментарий Стивена Маккарти , в котором описан обходной путь, включающий редактирование внутренних файлов Firefox, в частности, который по сути представляет собой файл, содержащий множество внутренних файлов, например модулей JavaScript для браузер Chrome, включая соответствующий . Этот обходной путь выглядит как самый простой подход, но он не работает как есть.

Существует официальная документация по MDN ( архивная версия ), в которой описано, как следует перепаковывать. Я также нашел статью в блоге Shallow Thoughts об изменении, в которой этот процесс описывается более подробно. Затем есть еще одна вещь, о которой стоит беспокоиться: вам нужно заставить Firefox использовать измененную версию, очистив его кэш запуска, что объясняется в статье блога«В погоне за ленью» , которую я нашел.

Изменение внутренних файлов

Объединив все эти ресурсы, мы получаем команды оболочки, которые в настоящее время работают в Arch Linux (core/linux 5.8.1.arch1-1через5.12.13.arch1-2).1 Если в какой-то момент вы столкнетесь с ошибкой «отказано в разрешении», просто продолжайте выполнять команды от имени пользователя root. Их необходимо выполнять после каждого обновления Firefox. Команды объясняются позже.

Вместо того, чтобы вводить отдельные команды, вы можете использовать этот сценарий оболочки, доступный в моем репозитории GitHub .Этот сценарий предлагает удобный интерфейс терминала; он автоматически находит Firefox, изменяет его и обрабатывает кеш. Он также автоматически переключается на root по мере необходимости и создает резервные копии. И есть веб-интерфейс , где вы можете выбрать другие параметры и загрузить настроенный сценарий оболочки.

Команды

      urlbarinput_path=omni/modules/UrlbarInput.sys.mjs

cd /tmp
mkdir omni
unzip -d omni -q /usr/lib/firefox/browser/omni.ja

if [[ ! -f /tmp/$urlbarinput_path ]]; then
  urlbarinput_path=omni/modules/UrlbarInput.jsm
fi

sed -i 's/this\._preventClickSelectsAll = this\.focused;/this._preventClickSelectsAll = true;/' $urlbarinput_path
sed -i 's/this\._preventClickSelectsAll = this\._textbox\.focused;/this._preventClickSelectsAll = true;/' omni/chrome/browser/content/browser/search/searchbar.js
cd omni
zip -0DXqr omni.ja *
cd ..
mv omni/omni.ja /usr/lib/firefox/browser/omni.ja
chown ⟨user⟩:⟨group⟩ /usr/lib/firefox/browser/omni.ja
rm -r omni

Важные заметки:

  • Прежде чем делать это, обновите Firefox и закройте его. Для Firefox необходимо установить обновления (т. е. вам, возможно, придется запустить Firefox после обновления, а затем снова закрыть его).

  • /usr/lib/firefoxвозможный путь установки Firefox; ваш путь может отличаться, например, это может быть/usr/share/firefox. Вы сможете найти возможные пути с помощью одной из этих команд:

            whereis -b firefox firefox-esr
    which firefox firefox-esr
    

    Правильное находится в…/browser/omni.jaпуть.

  • Прежде чем что-либо из этого будет выполнено, обязательно создайте где-нибудь рабочую копию , чтобы у вас была резервная копия на случай, если что-то пойдет не так.

  • Обязательно замените⟨user⟩по имени пользователя и⟨group⟩группой пользователей первоначального владельца файла. Насколько я знаю, в большинстве случаев так и должно быть.root:root, если это еще не так.

  • После распаковки вы можете проверить это еще раз.

    • линияthis._preventClickSelectsAll = this.focused;существует вmodules/UrlbarInput.jsm, и
    • линияthis._preventClickSelectsAll = this._textbox.focused;существует вchrome/browser/content/browser/search/searchbar.js.

Очистка кеша

Наконец, Firefox необходимо правильно загрузить новое, очистив кеш. Это два разных варианта, которые мне показались наиболее простыми. Нужен только один из вариантов.

  • Один из способов сделать это — просто создать пустой файл с именем.purgecachesв каталоге. Например, вы можете выполнить это:

            touch /usr/lib/firefox/browser/.purgecaches
    

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

  • Альтернативный способ — найти файл конфигурации рабочего стола для Firefox. Посмотрите/usr/share/applications/или~/.local/share/applications/и найдите какой-нибудь файл с (илиnightlyили, может бытьmozillaили что-то подобное) в имени файла. Откройте найденные файлы. В моей системе их два:

    • Маленький, который начинаетсяfirefox-bin(с помощьюExec=)
    • Большой, в котором есть три ссылки на

    Вы хотите изменить больший: после каждого/usr/lib/firefox/firefox(или любой другой путь для вас) поместите-purgecachesвариант (--purgecachesтоже работает); поэтому одна из записей конфигурации может выглядеть так:

            Exec=/usr/lib/firefox/firefox -purgecaches %u
    

    Используя этот подход, вам может потребоваться отредактировать *.desktopфайл после каждого обновления Firefox и замедляет каждый запуск Firefox.

Теперь вы можете запустить Firefox, щелкнув значок на рабочем столе.

Есть две другие альтернативы, если вы не запускаете Firefox, щелкнув значок на рабочем столе, а вместо этого используете терминал:

  • Вы можете ввестиfirefox -purgecachesв терминал,
  • или вы можете ввестиexport MOZ_PURGE_CACHES=1в терминал, затем введитеfirefoxв тот же терминал.

И, наконец, вы также можете очистить кеш напрямую. Кэши сценариев, включая кэш запуска, скрыты в.cacheкаталог вашего/home. Путь будет выглядеть примерно так/home/⟨user⟩/.cache/mozilla/firefox/⟨profileID⟩.⟨profileType⟩/startupCache. Удаление этих каталогов очистит кэш запуска Firefox.

Используйте этот подход, если вы используете более одного профиля в одной установке Firefox. Другой встроенныйpurgecachesподходы очищают только кеш первого профиля , который используется Firefox.

Объяснение

  1. Это переменная, хранящая путь к одному из соответствующих файлов. Позже вам нужно будет проверить, существует ли этот путь, поскольку Mozilla переименовала этот файл в версии 103.

            urlbarinput_path=omni/modules/UrlbarInput.sys.mjs
    
    # …
    
    if [[ ! -f /tmp/$urlbarinput_path ]]; then
      urlbarinput_path=omni/modules/UrlbarInput.jsm
    fi
    
  2. Эти строки распаковывают файл (квазифайл PKZIP) во вновь созданный каталог с помощью утилиты (extra/unzip 6.0-14)1.

            cd /tmp
    mkdir omni
    unzip -d omni -q /usr/lib/firefox/browser/omni.ja
    

    -d omniпросто извлекает файлы из/usr/lib/firefox/browser/omni.jaв каталог; подавляет вывод (просто список файлов, которые раздуваются и извлекаются).

    скорее всего, выйдет со статусом, и вы получите предупреждение и подобную ошибку при запускеunzipкоманда:

            warning [omni.ja]:  50008544 extra bytes at beginning or within zipfile (attempting to process anyway)
    error [omni.ja]:  reported length of central directory is -50008544 bytes too long (Atari STZip zipfile?  J.H.Holm ZIPSPLIT 1.1 zipfile?).  Compensating...
    

    Не беспокойтесь об этом. Это не влияет на процесс; положение дел2просто означает, что была обнаружена какая-то ошибка, но «[p]обработка в любом случае могла быть успешно завершена» , как сказано на странице руководства.

  3. Далее эти две строки редактируют соответствующие файлы на месте. _preventClickSelectsAllсвойство контролирует, происходит ли выбор одним щелчком мыши. Установка его наtrueпредотвратит такое поведение. Первая строка адресована строке URL, вторая строка — строке поиска.

            sed -i 's/this\._preventClickSelectsAll = this\.focused;/this._preventClickSelectsAll = true;/' $urlbarinput_path
    sed -i 's/this\._preventClickSelectsAll = this\._textbox\.focused;/this._preventClickSelectsAll = true;/' omni/chrome/browser/content/browser/search/searchbar.js
    
  4. При этом создается новый с измененным файлом с помощью утилиты (extra/zip 3.0-9)1.

            cd omni
    zip -0DXqr omni.ja *
    cd ..
    

    Важно нацелиться*(каждый файл) внутри, а неomni/сам каталог; мы не хотим создавать with в качестве корневого каталога. Вход и выход из каталога с помощьюcdтакже обеспечивает правильную иерархию файлов, в противном случае дополнительные файлы все равно будут включены.omniкорневой каталог в архиве.

    Что касается опций, устанавливает уровень сжатия без сжатия и просто сохраняет файлы;-Dизбегает создания записей в zip-архиве для каталогов;-Xне сохраняет лишние атрибуты файла;-q, опять же, подавляет вывод;-rгарантирует, что файлы добавляются рекурсивно по правильным путям каталогов.

    Это параметры, рекомендованные в документации MDN. Возможно, вы видели более старую версию (до того, как я ее отредактировал), в которой используется-9(-qr9XD, точно) вместо , но это вызывает проблемы: например, не загружается локализация всплывающих подсказок, отображающих сочетания клавиш, в инструментах разработчика. Ответ на вопрос: «Можно ли изменить жестко закодированное поведение панели Ctrl-Tab в Firefox JavaScript?»упоминает, что-0— это опция, которая создает файл с размером, близким к исходному файлу. Кстати, это единственный вариант, позволяющий избежать этой странной проблемы с локализацией. Я подробно объясняю это в этом выпуске GitHub.

  5. Далее созданное перемещается в Firefoxbrowserкаталог (и он заменяет файл; не используйте существующий файл напрямую в качестве целевого, иначе файлы будут вложены в существующий ZIP-архив), разрешения могут быть установлены как для исходного файла, и в конце вы можете удалить/tmp/omniкаталог.

            mv omni/omni.ja /usr/lib/firefox/browser/omni.ja
    chown ⟨user⟩:⟨group⟩ /usr/lib/firefox/browser/omni.ja
    rm -r omni
    

    Оказывается,chownКоманда может быть не строго необходимой, но она гарантирует, что новый файл будет иметь того же владельца, что и исходный файл. В качестве альтернативы, если вы скопировали исходный файл от имени пользователя без полномочий root в каталог резервной копии, вы можете использовать это:

            chown --reference=⟨your_backup_directory⟩/omni.ja /usr/lib/firefox/browser/omni.ja
    chmod --reference=⟨your_backup_directory⟩/omni.ja /usr/lib/firefox/browser/omni.ja
    

    Конечно, вы можете использовать другой файл, например/usr/lib/firefox/browser/crashreporter-override.iniв качестве ссылки.

Восстановление резервной копии, если что-то пойдет не так

Если после этого процесса Firefox не работает правильно или вообще не работает, к сожалению, этот процесс не сработал. Вы можете восстановить резервную копию простымmvвот так (возможно, как root):

      mv ⟨your_backup_directory⟩/omni.ja ⟨your_firefox_browser_directory⟩/omni.ja

Не забудьте очистить кэш еще раз.

Если вы не создавали пакет раньше, вам необходимо повторно загрузить Firefox и извлечь пакет, чтобы найти замену.omni.ja.


Кроме того, предлагаемый обходной путь для Bugzilla имеетzip --updateкоманда. Полные команды будут такими:

      unzip -q /usr/lib/firefox/browser/omni.ja $urlbarinput_path chrome/browser/content/browser/search/searchbar.js -d omni
# Instead of
# unzip -q /usr/lib/firefox/browser/omni.ja -d omni

… и …

      zip -qr9XDu /usr/lib/firefox/browser/omni.ja *
# Instead of
# zip -qr9XD omni.ja *
# mv omni/omni.ja /usr/lib/firefox/browser/omni.ja
# chown ⟨username⟩:users /usr/lib/firefox/browser/omni.ja

К сожалению, даже зная о zipфайловая иерархия , я не могу заставить это работать — хотя было бы неплохо, поскольку это немного ускорило бы процесс. Вместо этого я получаю такую ​​ошибку при запуске Firefox:

      XML Parsing Error: undefined entity
Location: chrome://browser/content/browser.xhtml
Line Number 740, Column 15:
              <toolbarbutton id="UITourTooltipClose" class="close-icon"
--------------^

Интересно, сообщит ли Mozilla автоматически о таких ошибках, даже если я вмешался в сборку…


Связанные вопросы:


1 : Я не тестировал все версии, но это должно продолжать работать для более поздних версий, большинства более ранних версий, и оно должно работать на всех каналах выпуска Firefox— после изменения поведения в марте 2020 года.

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

Это становится второй натурой и не занимает много времени.

Другие вопросы по тегам