Safari在点击超链接时忽略/删除锚点(或“hashtags”)?

问题描述 投票:17回答:5

我需要将一个页面指向另一个页面然后滚动到特定部分。在Chrome和Firefox中,使用像www.example.com#section1这样的网址可以解决问题。 (#section1可以是锚点或元素的id)。

但是,在Safari中,单击链接时哈希消失。

为什么会这样?可以在Safari上进行吗?如果没有,我该如何解决这个问题?

hyperlink safari cross-browser
5个回答
23
投票

当使用指向其他页面内部部分的超链接时,必须记住在主题标签之前添加斜杠(/)以实现跨浏览器兼容性。

例如:www.example.com/#item-1

所有浏览器都不接受www.example.com#item-1(显然是Chrome和Firefox)


5
投票

案例:我在'#'后面有参数,如url#myParam = 123,当我更改params如url#myParam = 789 Safari有时会根据myParam = 123加载上一页,

虽然在地址栏中显示myParam = 789

解决方案:使用url?#myParam = 123,然后Safari将每次加载新页面。 用'?'之前'#'解决了我的问题。


0
投票

对我来说,这是完全相同的问题,如mrbinky3000上面所述:服务器mod-rewrite在safari中杀死哈希。

解决方案是使用完整的绝对链接,如:http://www.example.com/path/#item-1


0
投票

我有一个相关的问题与Safari(在iPhone / iOS上)似乎剥离哈希/片段做一个:

var newHash = ...;
window.location.replace("#" + newHash);

实际问题是只出现在Safari上的javascript错误。由于我无法轻易评估iPhone的javascript控制台,我选择下载旧版本的Window的Safari(related postdownload)。

然后,我可以使用旧版本的Safari在我的Window桌面上从iPhone复制问题。那时,我发现一个javascript标签缺少']'。这是一个合法的错误,但它在某种程度上被Chrome,Firefox和IE忽略了。

window.location.replace()甚至没有被调用,因为代码突然出现了javascript错误。所以问题不在于Safari正在剥离标签,即使它出现在多浏览器测试中。


0
投票

我刚刚经历过这样的问题。我在asp.net web.config中使用url重写。在Safari中,哈希和之后的所有内容都被删除了。在尝试了上面提到的一些事情后,我仍然遇到了问题。对我来说,问题是这一切都发生在HTTPS下。一旦我在重定向中指定了完整的URL并包含了https://方案,重定向就能正常工作并保留哈希。请注意,这不是Chrome或Firefox的问题。

© www.soinside.com 2019 - 2024. All rights reserved.