2009-02-14 158 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」。很棒!