4

我有一个论坛页面,在当前选定的消息下方显示消息的树形视图。当您单击树中的消息时,新的消息正文将使用 AJAX 加载到页面顶部附近的div中,然后运行以下代码:

window.location.hash = "page_top";

当然,“page_top”是页面顶部附近的锚元素,因此新加载的消息正文会滚动到视图中。

这适用于除 Safari 之外的所有浏览器。在 Safari(在 PC 和 iPhone 上测试)上,它仅在您第一次设置location.hash时有效。如果再次设置,页面不会滚动。

最终结果是新加载的消息正文不会滚动到 Safari 中的视图中,并且每次从树中选择新消息时都必须滚动回页面顶部。

为什么 Safari 不喜欢这个,我可以做些什么来解决它?

编辑:

我猜这与您可以通过谷歌搜索有关 location.hash 和 Safari 的错误有关。Safari 似乎曾经有一个错误,如果您将哈希设置为相同的值两次,它会导致它重新加载页面。我猜当他们修复了这个错误时,他们修复得有点太彻底了,当你再次将 hash 设置为相同的值时,他们停止了它做任何事情。

http://www.howtocreate.co.uk/safari/locationHashBug.html

4

4 回答 4

3

您可以先重置它:

window.location.hash = "";
window.location.hash = "page_top";
于 2009-02-14T14:04:55.997 回答
2

我需要补充:

<div><a name="page_top"></a></div>
<div><a name="page_topnot"></a></div>

使用“a name”而不是“a href”。效果很好!

于 2010-08-26T18:44:53.160 回答
1

回答我自己的问题。秋葵在正确的轨道上,但并不完全在那里。

Safari 不喜欢将 location.hash 设置为空白值。相反,您需要将其设置为真正的锚值。

因此,在页面顶部,我现在拥有:

<div><a href="page_top"></a></div>
<div><a href="page_topnot"></a></div>

我发现我需要锚点周围的 div,否则 Safari 会滚动到页面的不可预测部分而不是锚点。

然后滚动到我必须做的页面顶部:

window.location.hash = "page_topnot";
window.location.hash = "page_top";

有了这个,Safari 每次都会滚动到页面顶部。

于 2009-02-16T17:55:13.357 回答
0

我遇到了和你一样的问题,这个解决方案有效——我唯一注意到的是,在 IE 中,我可以听到两次点击声——所以我做了你的变体,只放了一个锚点,它也能正常工作(即调用两次,第一次,一个不存在的主播,第二次真正的主播)

最重要的是,我的锚:

(tag a)name="top" id="top"(end of tag a)

在 javascript 中,这两个调用:

window.location.hash ="topnot";

window.location.hash ="top";

谢谢你的帮助!

于 2009-08-31T04:19:31.733 回答