2009-02-14 153 views
3

我有一个论坛页面,显示当前所选消息下面的消息树视图。当您在树中点击消息中的新邮件正文中使用AJAX加载到DIV接近页面的顶部,然后将下面的代码运行:在Safari中使用location.hash滚动页面

window.location.hash = "page_top"; 

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

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

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

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

编辑:

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

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

回答

1

回答我的问题。冈博在正确的轨道上,但不是那里。

Safari不喜欢将location.hash设置为空白值。相反,你需要将它设置为一个真正的锚定值。

所以沿着页面顶部我现在有:

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

我发现我需要周围的锚另有野生动物园滚动到页面,而不是到锚的不可预测部分的div。

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

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

有了到位Safari会滚动到每次页面的顶部。

3

你可以先复位:

window.location.hash = ""; 
window.location.hash = "page_top"; 
+0

这不起作用,它做了一些不同的,但仍然无法正常工作。它使卷轴在每隔一段时间都处于顶端,这很奇怪。调用该代码一次两次,并且每次点击都能正常工作,但必须有比设置.hash四次更好的解决方案! – andynormancx 2009-02-14 14:12:20

0

我遇到了同样的问题,因为你有这个解决方案 - 我唯一注意到的是,在IE中,我可以听到两次点击 - 所以我做了一个变种,只放了一个锚点,它也工作得很好(即调用了两次,第一次,一个不存在的锚,第二次真实的)

在顶部,我主播:

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

在JavaScript中,在两个电话:

window.location.hash ="topnot"; 

window.location.hash ="top"; 

感谢您的帮助!

2

我需要添加:

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

使用 “名称”,而不是 “A HREF”。很棒!