2011-03-11 46 views
4

我注意到a:visited樣式不適用於通過JavaScript請求的鏈接。在一個標準的用戶點擊,雖然立即和隨後刷新完全相同的鏈接註冊訪問。我不確定這是否是jQuery Mobile(我第一次遇到它)的唯一性,還是這是我不知道的瀏覽器限制?A:未檢測到AJAX鏈接:訪問

+1

您能告訴我們代碼嗎?我猜這個錯誤可能是在事件中「返回假」。由於返回錯誤,默認操作被阻止,並且它沒有像您實際訪問鏈接那樣註冊。 –

回答

2

如果您希望它與歷史記錄一起工作並訪問鏈接樣式,則可能需要更改location.hash。

請記住,訪問過的鏈接基於瀏覽歷史隱私漏洞被Did You Watch Porn網站流行後,瀏覽器之間的訪問鏈接樣式工作有點不一致。

+0

我知道a:visited的選擇器已從CSS3中移除,但經典行爲應該仍然存在。是的,location.hash被改變(後退和前進導航工作正常)。請參閱上面的演示鏈接。 – Nariman

2

a:visited與任何指向瀏覽器歷史記錄中的URL的鏈接相匹配。

如果您使用AJAX取消導航到該URL,該URL將永遠不會在瀏覽器歷史記錄中結束。

您可以使用#鏈接修復該問題。

+0

謝謝,但請參閱上面的演示鏈接。 – Nariman

0

您可以隨時通過與a:visited共享樣式的ajax回調在鏈接上設置類。

1

a:visited僅在鏈接「執行」時觸發。

到AJAX調用的鏈接通常返回'false'(散列解決方案(<a href="#">link</a>)仍然返回false,否則用戶將跳轉到頁面頂部)。

這種方式鏈接永遠不會'執行',因此不被標記爲訪問。

+0

謝謝。看起來有點奇怪,但我認爲你是對的。我的意思是瀏覽器確實向該頁面發出了請求,並且在隨後訪問該頁面時在其緩存中確實存在副本......直觀地說,這可以作爲訪問的資格。 – Nariman

1

好的,請不要更改a元素的href指向其他答覆者所說的哈希網址 - 這將打破用戶體驗。如果他們想要在新窗口中打開,那麼需要加載兩次,如果您更改了服務器端,它將會中斷搜索引擎和禁用js的用戶。

問題是,如果您使用散列將您的網站升級到RIA(富互聯網應用程序),那麼鏈接將指向mysite.com/page,但實際上您訪問的是mysite.com/#/page,因此您實際上並未訪問原始內容。

這裏的正確解決方案是使用HTML5 History API,它允許您直接更改URL並掛接到URL更改(因此不再需要散列)。你可以在這裏閱讀更多關於哈希值與hashbangs vs HTML5 History API的優缺點: https://github.com/browserstate/history.js/wiki/Intelligent-State-Handling - 它還包括示例代碼,用HTML5 History API升級你的網站。

jQuery Mobile計劃在未來使用HTML5 History API(目前正在開發),但現在我建議等待它實現。