可通过修改JavaScript、使用内容拦截扩展或注入用户脚本阻止Safari自动滚动至URL中的#锚点位置。

如果您在使用 Safari 浏览器访问网页时,发现页面自动滚动到 URL 中的片段标识符(即 # 后面的部分)所对应的位置,这可能会影响浏览体验。以下是解决此问题的方法:
本文运行环境:MacBook Air,macOS Sonoma
一、禁用页面加载时的自动滚动行为
通过修改网页的 JavaScript 行为,可以阻止 Safari 在页面加载时自动跳转到 hash 对应的元素位置。该方法适用于网站开发者或可编辑网页代码的用户。
1、打开目标网页的 HTML 源码或相关 JavaScript 文件。
2、在页面加载事件中添加以下脚本代码:
window.history.replaceState(null, null, window.location.pathname);
3、保存并重新加载网页,此时即使 URL 包含 #hash,页面也不会自动滚动。
二、使用浏览器扩展拦截 hash 导航
借助第三方内容拦截工具,可以在 Safari 中阻止包含特定行为的页面脚本执行,从而防止滚动到 hash 位置。Safari 支持基于规则的内容拦截器扩展。
1、前往 App Store 下载支持内容脚本管理的扩展,例如 “Content Blocker” 类应用。
2、配置规则以拦截触发 hash 导航的 JavaScript 行为,如匹配 location.hash 相关操作。
3、启用该扩展并在 Safari 设置中允许其运行。
4、刷新目标网页,确认不再发生自动滚动。
三、通过用户脚本注入方式阻止滚动
利用支持用户脚本的 Safari 扩展(如 Userscripts 扩展),可以在页面加载初期执行自定义脚本,屏蔽默认的 hash 锚点滚动行为。
1、安装兼容的用户脚本扩展,并确保已在 Safari 偏好设置中启用。
2、创建一个新的用户脚本,写入以下内容:
if (window.location.hash) {
history.replaceState(null, null, ' ');
setTimeout(() => { window.scrollTo(0, 0); }, 1);
}
3、保存脚本并刷新需要访问的网页。
4、页面加载后将保持在顶部位置,不会跳转至 hash 锚点。










