单击超链接时,Safari 会忽略/删除锚点(或“主题标签”)吗?
Posted
技术标签:
【中文标题】单击超链接时,Safari 会忽略/删除锚点(或“主题标签”)吗?【英文标题】:Safari ignoring/removing anchors (or "hashtags") when clicking hyperlinks? 【发布时间】:2013-09-10 21:16:39 【问题描述】:我需要将一个页面指向另一个页面,然后滚动到特定部分。在 Chrome 和 Firefox 中,使用像 www.example.com#section1
这样的 URL 就可以了。 (#section1 可以是锚点或元素的 id)。
但是,在 Safari 中,当我单击链接时,哈希会消失。
为什么会这样?可以在 Safari 上进行吗?如果没有,我该如何解决这个问题?
【问题讨论】:
【参考方案1】:当使用指向其他页面内部部分的超链接时,您必须记住在标签前添加斜杠 (/) 以实现跨浏览器兼容性。
例如:www.example.com/#item-1
并非所有浏览器都接受www.example.com#item-1
(Chrome 和 Firefox 显然是这样)
【讨论】:
只是想要一些可以帮助他人的东西。我遇到了同样的问题。格式与解决方案完全相同。但是,服务器使用 mod-rewrite 来更改路径(Wordpress .htaccess)。看来,当 url 被服务器重定向时,Safari 会去除哈希值。 对于看起来像http://www.example.com/foo#item-1
等目录名称的 URL,您也需要这个。 Safari 在此处重定向将丢弃该片段。您必须将它们发送到这里http://www.example.com/foo/#item-1
。【参考方案2】:
对我来说,这与 mrbinky3000 上面所说的完全相同:服务器 mod-rewrite 正在杀死 safari 中的哈希。
解决方案是使用完整的绝对链接,例如: http://www.example.com/path/#item-1
【讨论】:
【参考方案3】:我遇到了一个与 Safari(在 iPhone/ios 上)相关的问题,在执行以下操作时似乎剥离了哈希/片段:
var newHash = ...;
window.location.replace("#" + newHash);
实际上问题是一个javascript错误,只出现在Safari上。由于我无法轻松评估 iPhone 的 javascript 控制台,我选择下载旧版 Window 的 Safari(related post、download)。
然后,我可以使用旧版本的 Safari 在我的 Window 桌面上复制 iPhone 上的问题。那时,我发现一个javascript标签有一个缺少']'。这是一个合法的错误,但不知何故被 Chrome、Firefox 和 IE 忽略了。
window.location.replace() 甚至没有被调用,因为代码在 javascript 错误上发生了中断。所以问题并不是 Safari 正在剥离主题标签,尽管它在多浏览器测试中是这样显示的。
【讨论】:
【参考方案4】:案例:当我更改参数时,我在 '#' 之后有参数,例如 url#myParam=123 url#myParam=789 Safari 有时会根据 myParam=123 加载上一页,
虽然在地址栏中显示 myParam=789
解决方案:使用 url?#myParam=123,那么 Safari 每次都会加载新页面。 使用“?”在“#”解决我的问题之前。
【讨论】:
对我来说效果很好。谢谢 对我也很好。如果我通过 301 重定向到 /sites/#config,Safari 会转到 /sites/,但是当我重定向到 /sites/?#config 时,Safari 会转到 /sites/?#config 我已经编辑了重定向功能以添加“? "如果哈希在 url 内时丢失。【参考方案5】:我刚刚遇到了这样的问题。我在 asp.net web.config 中使用了 URL 重写。使用 Safari,哈希和之后的所有内容都被删除。在尝试了上面提到的一些事情之后,我仍然遇到问题。对我来说,问题是这一切都是在 HTTPS 下发生的。一旦我在重定向中指定了完整的 URL 并包含 https:// 方案,重定向就会正常工作并保留哈希。请注意,这不是 Chrome 或 Firefox 的问题。
【讨论】:
以上是关于单击超链接时,Safari 会忽略/删除锚点(或“主题标签”)吗?的主要内容,如果未能解决你的问题,请参考以下文章