🔍

修复 Algolia DocSearch 在 Safari 关闭后自动回到底部的 Bug

(更新于 )

核心方案:这是一个针对 Safari 浏览器(iOS/macOS)的“魔法修复”。在 HTML <body> 底部添加一个看不见的 <input> 元素,可以强制 Safari 重置视口焦点,阻止 DocSearch 关闭时页面意外滚动到底部。

Algolia 的 docsearch.js 是技术博客和文档站标配的搜索方案。然而,在 Safari 浏览器下存在一个长期未修复的 Bug:当用户关闭搜索模态框(Modal)时,页面会自动瞬间滚动到底部(Footer),严重破坏用户体验。

问题现象

该问题主要出现在 iOS Safari 和部分 macOS Safari 版本中。当 DocSearch 模态框消失,输入焦点释放时,浏览器似乎错误地计算了视口位置。

解决方案

这个解决方案源自 GitHub 社区讨论。虽然原理尚不完全明确(推测与 iOS Safari 的虚拟键盘焦点/视口回弹机制有关),但实测有效。

只需将以下代码添加到 HTML 文件的 <body> 标签结束前即可:

HTML
<!-- Safari Fix: 防止 Algolia 搜索框关闭后页面滚动到底部 -->
<div style="position: fixed; opacity: 0; pointer-events: none;">
  <input type="text" />
</div>
</body>

代码说明

  1. Wrapper Div: 使用 position: fixed 确保其存在于布局流之外。
  2. Input: 一个空的输入框作为焦点的“诱饵”或锚点。
  3. Style: 设置 opacity: 0pointer-events: none 确保该元素对用户不可见且不可交互,不影响正常页面布局。

该修复方案已在我的博客中实装,完美解决了 Safari 下的滚动跳跃问题。

延伸阅读

相关提示

订阅 Fatbobman 周报

每周精选 Swift 与 SwiftUI 开发技巧,加入众多开发者的行列。

立即订阅