返回单击地址栏时不选择整个 URL

返回单击地址栏时不选择整个 URL

最近,每个浏览器都改变了其 URL 栏行为。当您点击地址栏时,它会选择整个 URL。

我是一名 Web 开发人员,因此大多数时候我只想编辑 URL 中的参数或添加参数。这种自动选择行为很麻烦。我将指针准确指向我想要的光标位置,单击它,整个 URI 就被选中了,因此,只要我开始输入,所有内容都会被删除。

有什么方法可以恢复clickSelectsAllFirefox 上的“ ”行为吗?

答案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通过清除缓存来正确加载新内容。我发现这两个不同的选项最容易。只需其中一个选项即可。

  • 一种方法是简单地.purgecachesbrowser目录中创建一个空文件。例如,您可以执行以下命令:

    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 使用的配置文件。

解释

  1. 这是一个变量,用于存储相关文件之一的路径。稍后,您需要检查此路径是否存在,因为 Mozilla 在版本 103 左右重命名了此文件。

    urlbarinput_path=omni/modules/UrlbarInput.sys.mjs
    
    # …
    
    if [[ ! -f /tmp/$urlbarinput_path ]]; then
      urlbarinput_path=omni/modules/UrlbarInput.jsm
    fi
    
  2. 这些行使用实用程序 ( ) 1omni.ja把文件(一个准 PKZIP 文件)解压到新创建的目录中。/tmp/omniunzipextra/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只是意味着检测到了一些错误,但是“无论如何,处理可能已经成功完成”,正如手册页所述。

  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. 这将使用实用程序 ( ) 1omni.ja创建一个更改后的新文件。zipextra/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 面板行为吗?提到这-0zip创建omni.ja文件大小更接近原始文件的选项。顺便说一句,这是唯一可以避免这种奇怪的本地化问题的选项。我在这个 GitHub 问题

  5. 接下来,将创建的文件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

相关内容