最近,每个浏览器都改变了其 URL 栏行为。当您点击地址栏时,它会选择整个 URL。
我是一名 Web 开发人员,因此大多数时候我只想编辑 URL 中的参数或添加参数。这种自动选择行为很麻烦。我将指针准确指向我想要的光标位置,单击它,整个 URI 就被选中了,因此,只要我开始输入,所有内容都会被删除。
有什么方法可以恢复clickSelectsAll
Firefox 上的“ ”行为吗?
答案1
Firefox,2020 年 3 月及以后
2020 年 3 月左右,browser.urlbar.clickSelectsAll
偏好已被删除从那时起,这个错误就正在讨论中,其中建议了一个补丁——这将涉及从头开始重新编译 Firefox。
作为“clickSelectsAll
不起作用”Bugzilla 上积累了重复项,其中一个已收到史蒂芬·麦卡锡 (Stephen McCarthy) 的评论它描述了一种涉及编辑内部 Firefox 文件的解决方法,特别是 ,它omni.ja
基本上是一个zip
包含大量内部文件的文件,例如浏览器 chrome 的 JavaScript 模块,包括相关的modules/UrlbarInput.jsm
。此解决方法看起来是最简单的方法,但该方法不能按原样工作。
有一个MDN 上的官方文档(存档版本) 描述了应该如何omni.ja
重新打包。我还找到了一个博客文章浅薄的想法关于修改的omni.ja
更详细描述了这个过程。然后,还有另一件事需要担心:你需要omni.ja
通过清除启动缓存来强制 Firefox 使用修改的,这在追求懒惰博客文章我找到了。
修改内部文件
将所有这些资源放在一起,这些是目前在 Arch Linux 上运行的 shell 命令(core/linux
5.8.1.arch1-1
通过5.12.13.arch1-2
)。1如果
您在任何时候遇到“权限被拒绝”错误,只需继续以 root 身份执行命令即可。每次更新 Firefox 后都需要执行这些命令。命令将在之后解释。
您无需输入单个命令,而是可以使用此 shell 脚本,该脚本可从此处获取GitHub 仓库我的。
该脚本提供了一个用户友好的终端界面;它会自动查找 Firefox、更改omni.ja
并处理缓存。它还会根据需要自动切换到 root 并创建备份。还有一个网络界面您可以在其中选择其他选项并下载定制的 shell 脚本。
命令
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
正确
omni.ja
是在…/browser/omni.ja
路径中。在执行任何操作之前,请确保创建工作副本
omni.ja
某处,这样如果出现问题,你就有备份可用。确保
⟨user⟩
用用户名和⟨group⟩
文件原始所有者的用户组替换。据我所知,在大多数情况下,root:root
如果尚未替换,则应该是。解压后
omni.ja
你可能需要再检查一下- 该线
this._preventClickSelectsAll = this.focused;
存在于modules/UrlbarInput.jsm
,并且 - 该线
this._preventClickSelectsAll = this._textbox.focused;
存在于chrome/browser/content/browser/search/searchbar.js
。
- 该线
清除缓存
最后,Firefox 需要omni.ja
通过清除缓存来正确加载新内容。我发现这两个不同的选项最容易。只需其中一个选项即可。
一种方法是简单地
.purgecaches
在browser
目录中创建一个空文件。例如,您可以执行以下命令:touch /usr/lib/firefox/browser/.purgecaches
您只需在运行上述命令后创建该文件即可。启动时,如果 Firefox 找到此文件,它将清除其启动缓存,并且还会尝试删除该文件。根据您最初安装 Firefox 的方式,自动删除该文件可能会失败。即使这不会影响成功清除缓存,也请注意这一点。
另一种方法是找到 Firefox 的桌面配置文件。查看
/usr/share/applications/
或~/.local/share/applications/
并找到文件名中*.desktop
带有firefox
(或nightly
或可能mozilla
或类似内容)的文件。打开您找到的文件。在我的系统中有两个:- 一个小的开始
firefox-bin
(通过Exec=
) - 一个大的,有三个引用
/usr/lib/firefox/firefox
您想要修改较大的一个:在每个
/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 使用的配置文件。
解释
这是一个变量,用于存储相关文件之一的路径。稍后,您需要检查此路径是否存在,因为 Mozilla 在版本 103 左右重命名了此文件。
urlbarinput_path=omni/modules/UrlbarInput.sys.mjs # … if [[ ! -f /tmp/$urlbarinput_path ]]; then urlbarinput_path=omni/modules/UrlbarInput.jsm fi
这些行使用实用程序 ( ) 1
omni.ja
把文件(一个准 PKZIP 文件)解压到新创建的目录中。/tmp/omni
unzip
extra/unzip
6.0-14
cd /tmp mkdir omni unzip -d omni -q /usr/lib/firefox/browser/omni.ja
-d omni
仅将文件从目录提取到目录/usr/lib/firefox/browser/omni.ja
中/tmp/omni
;-q
抑制输出(仅是被膨胀和提取的文件列表)。unzip
可能会以状态退出2
,并且在运行命令时您会收到如下警告和错误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
只是意味着检测到了一些错误,但是“无论如何,处理可能已经成功完成”,正如手册页所述。接下来,这两行就地编辑相应的文件。该
_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
这将使用实用程序 ( ) 1
omni.ja
创建一个更改后的新文件。zip
extra/zip
3.0-9
cd omni zip -0DXqr omni.ja * cd ..
重要的是以
*
中的 (每个文件)为目标omni/
,而不是omni/
目录本身;我们不想创建一个以 为根目录的omni.ja
目录omni
。进入和退出 目录cd
还可确保正确的文件层次结构,否则,zip
仍会omni
在存档中包含额外的根目录。至于选项,
-0
将压缩级别设置为无压缩并简单地存储文件;-D
避免在 zip 存档中为目录创建条目;-X
不保存额外的文件属性;-q
再次抑制输出;-r
确保文件以递归方式添加到正确的目录路径中。这些是 MDN 文档中推荐的选项。您可能已经看到过旧版本(在我编辑之前)使用
-9
(-qr9XD
,确切地说)而不是-0
,但这会导致问题:例如,显示键盘快捷键的工具提示的本地化无法在开发人员工具中加载。答案在可以修改硬编码的 Firefox JavaScript Ctrl-Tab 面板行为吗?提到这-0
是zip
创建omni.ja
文件大小更接近原始文件的选项。顺便说一句,这是唯一可以避免这种奇怪的本地化问题的选项。我在这个 GitHub 问题。接下来,将创建的文件
omni.ja
移动到 Firefoxbrowser
目录(并替换文件;不要直接使用现有的omni.ja
作为zip
目标,否则文件将嵌套到现有的 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
命令可能不是绝对必要的,但它可以确保新文件omni.ja
与原始文件具有相同的所有者。或者,如果您以非 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
作为参考。
omni.ja
出现问题时恢复备份
如果 Firefox 在此过程之后似乎无法正常运行,或者根本无法运行,则很遗憾,此过程没有起作用。您可以通过mv
以下简单方法恢复备份(可能以 root 身份):
mv ⟨your_backup_directory⟩/omni.ja ⟨your_firefox_browser_directory⟩/omni.ja
记得再次清除缓存。
如果你之前没有创建过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 年 3 月的行为改变之后。
答案2
我也注意到了这种现象,但我有一个简单的解决方法。将鼠标移到地址上,左键单击和拖选择一些文本。文本突出显示后,您可以单击字符串中的任意位置,光标将移至该位置。
它将成为你的第二天性并且不需要花费任何时间。
答案3
我不知道 Opera 或 Chrome 怎么样,但在 Firefox 中很容易打开关于:配置并根据需要修改以下布尔值:
browser.urlbar.clickSelectsAll
browser.urlbar.doubleClickSelectsAll