gcb*_*gcb 12 browser firefox address-bar
最近每个浏览器都改变了它的 URL 栏行为。当您单击地址栏时,它会选择整个 URL。
我是一名 Web 开发人员,所以大部分时间我只想编辑 URL 中的参数或添加到其中。这种自动选择行为很痛苦。我将指针准确对准我希望光标所在的位置,单击它,然后选择整个 URI,因此一旦我开始键入,所有内容都会被删除。
有没有办法clickSelectsAll
在 Firefox 上恢复“ ”行为?
Seb*_*mon 14
2020 年 3 月左右,该browser.urlbar.clickSelectsAll
偏好已被删除。从那时起,这个错误一直在讨论中,建议补丁在哪里? - 这将涉及从头开始重新编译 Firefox。
由于“clickSelectsAll
不工作”重复在 Bugzilla 上累积,其中一个收到了Stephen McCarthy的评论,其中描述了一种涉及编辑内部 Firefox 文件的解决方法,特别omni.ja
是该zip
文件基本上是一个包含大量内部文件的文件,例如 JavaScript浏览器 chrome 的模块,包括相关的modules/UrlbarInput.jsm
. 此解决方法看起来是最简单的方法,但该方法无法按原样工作。
MDN 上有一个官方文档,描述了omni.ja
应该如何重新打包。我还发现了一篇关于修改的Shallow Thoughts的博客文章,omni.ja
它更详细地描述了这个过程。然后,还有一件事需要担心:您需要omni.ja
通过清除其启动缓存来强制 Firefox 使用修改后的内容,这在我发现的In Pursuit Of Laziness博客文章中进行了解释。
将所有这些资源放在一起,这些是当前在 Arch Linux(core/linux
5.8.1.arch1-1
通过5.12.13.arch1-2
)上使用 Firefox Nightly 81.0a1 (2020-08-20) 到 91.0a1 (2021-07-02)(64 位)或 Firefox的 shell 命令ESR 78(64 位)(可能)。1
如果您在任何时候遇到“权限被拒绝”错误,只需以 root 用户身份继续执行命令即可。这些需要在每次 Firefox 更新后执行。命令在后面解释。
您可以使用此 shell 脚本代替键入单个命令,该脚本可在我的GitHub 存储库中找到。
该脚本提供了一个用户友好的终端界面;它会自动查找 Firefox,更改omni.ja
并处理缓存。它还会根据需要自动切换到 root 并创建备份。
cd /tmp
mkdir omni
unzip -d omni -q /usr/lib/firefox/browser/omni.ja
sed -i 's/this\._preventClickSelectsAll = this\.focused;/this._preventClickSelectsAll = true;/' omni/modules/UrlbarInput.jsm
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
Run Code Online (Sandbox Code Playgroud)
重要笔记:
更新 Firefox,然后在执行此操作之前将其关闭。Firefox 需要安装更新(即您可能必须在升级后启动 Firefox,然后再次关闭它)。
/usr/lib/firefox
是Firefox的可能安装路径;您的路径可能不同,例如它可能是/usr/share/firefox
. 您应该能够使用以下命令之一找到可能的路径:
whereis -b firefox firefox-esr
which firefox firefox-esr
Run Code Online (Sandbox Code Playgroud)
正确的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
Run Code Online (Sandbox Code Playgroud)
您只需要在运行上述命令后创建该文件。启动时,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
Run Code Online (Sandbox Code Playgroud)
使用这种方法,您可能需要*.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 使用的第一个配置文件的缓存。
首先,这些行使用实用程序 ( )将omni.ja
文件(准 PKZIP 文件)解压缩到新创建的/tmp/omni
目录中。unzip
extra/unzip
6.0-14
Exec=/usr/lib/firefox/firefox -purgecaches %u
Run Code Online (Sandbox Code Playgroud)
-d omni
只是提取从文件/usr/lib/firefox/browser/omni.ja
到/tmp/omni
目录; -q
抑制输出(只是一个被膨胀和提取的文件列表)。
unzip
将以 status 退出,2
并且在运行unzip
命令时您会收到警告和类似这样的错误:
cd /tmp
mkdir omni
unzip -d omni -q /usr/lib/firefox/browser/omni.ja
Run Code Online (Sandbox Code Playgroud)
别担心。这不会影响进程;状态2
只是意味着检测到一些错误,但“[p]处理可能已经成功完成”,正如手册页所说。
接下来,这两行就地编辑适当的文件。该_preventClickSelectsAll
属性控制选择是否在单击时发生。将其设置为true
将防止这种行为。第一行地址为 URL 栏,第二行地址为搜索栏。
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...
Run Code Online (Sandbox Code Playgroud)
这omni.ja
将使用zip
实用程序 ( extra/zip
3.0-9
)创建一个包含更改文件的新文件。
sed -i 's/this\._preventClickSelectsAll = this\.focused;/this._preventClickSelectsAll = true;/' omni/modules/UrlbarInput.jsm
sed -i 's/this\._preventClickSelectsAll = this\._textbox\.focused;/this._preventClickSelectsAll = true;/' omni/chrome/browser/content/browser/search/searchbar.js
Run Code Online (Sandbox Code Playgroud)
重要的是将*
内部(每个文件)作为目标omni/
,而不是omni/
目录本身;我们不想创建一个omni.ja
withomni
作为根目录。进入和退出目录cd
也确保了正确的文件层次结构,否则,zip
仍然会omni
在存档中包含额外的根目录。
至于选项,-0
将压缩级别设置为不压缩,只存储文件;-D
避免在 zip 存档中为目录创建条目;-X
不保存额外的文件属性;-q
,再次抑制输出;-r
确保文件以递归方式添加到其正确的目录路径中。
这些是 MDN 文档中推荐的选项。您可能已经看到一个旧版本(在我编辑它之前)使用-9
( -qr9XD
,完全) 而不是-0
,但这会导致问题:例如,显示键盘快捷键的工具提示的本地化无法在开发人员工具中加载。可能修改硬编码的 Firefox JavaScript Ctrl-Tab 面板行为的答案?提到这-0
是zip
创建omni.ja
文件大小更接近原始文件的文件的选项。顺便说一句,这是避免这种奇怪的本地化问题的唯一选择。我在这个 GitHub 问题中详细解释了这一点。
接下来,将创建omni.ja
的移动到火狐browser
目录(并替换文件;不要直接使用现有的omni.ja
作为zip
目标,否则文件将嵌套在现有的ZIP中),权限可以像原始文件一样设置,最后您可以删除该/tmp/omni
目录。
cd omni
zip -0DXqr omni.ja *
cd ..
Run Code Online (Sandbox Code Playgroud)
事实证明,该chown
命令可能不是绝对必要的,但它确保新omni.ja
文件与原始文件具有相同的所有者。或者,如果您以非 root 用户身份将原始文件复制到备份目录,则可以使用以下命令:
mv omni/omni.ja /usr/lib/firefox/browser/omni.ja
chown ?user?:?group? /usr/lib/firefox/browser/omni.ja
rm -r omni
Run Code Online (Sandbox Code Playgroud)
当然,您可以使用另一个文件,例如/usr/lib/firefox/browser/crashreporter-override.ini
作为参考。
omni.ja
备份以防出现问题如果 Firefox 在这个过程之后似乎没有正确运行,或者根本没有,这个过程没有工作,很遗憾。您可以通过这样的简单操作mv
(可能以 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
Run Code Online (Sandbox Code Playgroud)
请记住再次清除缓存。
如果之前没有创建omni.ja
,则需要重新下载 Firefox并解压缩包以找到替代的omni.ja
.
顺便说一句,关于 Bugzilla 的建议解决方法有一个zip --update
命令。完整的命令是:
mv ?your_backup_directory?/omni.ja ?your_firefox_browser_directory?/omni.ja
Run Code Online (Sandbox Code Playgroud)
… 和 …
unzip -q /usr/lib/firefox/browser/omni.ja modules/UrlbarInput.jsm chrome/browser/content/browser/search/searchbar.js -d omni
# Instead of
#unzip -q /usr/lib/firefox/browser/omni.ja -d omni
Run Code Online (Sandbox Code Playgroud)
不幸的是,即使了解了zip
文件层次结构,我也不能让它工作?-?不过,这会很好,因为它会加快这个过程。相反,我在启动 Firefox 时收到这样的错误:
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
Run Code Online (Sandbox Code Playgroud)
我想知道即使我篡改了构建,Mozilla 是否会自动报告此类错误……
1:它可能会在以后的版本中继续工作,并且可能也适用于旧版本;如果这篇文章发生重大变化,我只会更新版本。
归档时间: |
|
查看次数: |
1556 次 |
最近记录: |