我需要将一个页面指向另一个页面然后滚动到特定部分。在Chrome和Firefox中,使用像www.example.com#section1
这样的网址可以解决问题。 (#section1可以是锚点或元素的id)。
但是,在Safari中,单击链接时哈希消失。
为什么会这样?可以在Safari上进行吗?如果没有,我该如何解决这个问题?
当使用指向其他页面内部部分的超链接时,必须记住在主题标签之前添加斜杠(/)以实现跨浏览器兼容性。
例如:www.example.com/#item-1
所有浏览器都不接受www.example.com#item-1
(显然是Chrome和Firefox)
案例:我在'#'后面有参数,如url#myParam = 123,当我更改params如url#myParam = 789 Safari有时会根据myParam = 123加载上一页,
虽然在地址栏中显示myParam = 789
解决方案:使用url?#myParam = 123,然后Safari将每次加载新页面。 用'?'之前'#'解决了我的问题。
对我来说,这是完全相同的问题,如mrbinky3000上面所述:服务器mod-rewrite在safari中杀死哈希。
解决方案是使用完整的绝对链接,如:http://www.example.com/path/#item-1
我有一个相关的问题与Safari(在iPhone / iOS上)似乎剥离哈希/片段做一个:
var newHash = ...;
window.location.replace("#" + newHash);
实际问题是只出现在Safari上的javascript错误。由于我无法轻易评估iPhone的javascript控制台,我选择下载旧版本的Window的Safari(related post,download)。
然后,我可以使用旧版本的Safari在我的Window桌面上从iPhone复制问题。那时,我发现一个javascript标签缺少']'。这是一个合法的错误,但它在某种程度上被Chrome,Firefox和IE忽略了。
window.location.replace()甚至没有被调用,因为代码突然出现了javascript错误。所以问题不在于Safari正在剥离标签,即使它出现在多浏览器测试中。
我刚刚经历过这样的问题。我在asp.net web.config中使用url重写。在Safari中,哈希和之后的所有内容都被删除了。在尝试了上面提到的一些事情后,我仍然遇到了问题。对我来说,问题是这一切都发生在HTTPS下。一旦我在重定向中指定了完整的URL并包含了https://方案,重定向就能正常工作并保留哈希。请注意,这不是Chrome或Firefox的问题。