考慮這個jsfiddle:http://fiddle.jshell.net/maple/JbEJN/show/(這是結果窗口,爲了使replaceState工作,請參閱actual fiddle with code here: http://jsfiddle.net/maple/JbEJN/)。Opera 11.50+執行history.replaceState()
這是一個簡單的JavaScript標籤控制。我點擊「選項卡1」並查看一個div的內容。我點擊'Tab 2'來隱藏顯示的div,並顯示另一個不同的內容。您將獲得演練,標準選項卡控件。
現在,我做想要使用#標籤能夠書籤或鏈接頁面與選定的某個選項卡。我不想要的是創建一個瀏覽器歷史記錄條目中的每個這樣當我壓回我有10個標籤圈通過我標籤之間切換的時間之前,我其實可以回到我所來自的頁面。
我打算實現這一點的方法是使用replaceState()當我切換標籤插入一個主題標籤到頁面的URL,就像這樣:
window.history.replaceState(null, '', '#tabname');
我希望這裏是發生什麼事在切換標籤頁時不會創建任何歷史記錄,所以當我在標籤頁之間切換幾次後,我會看到哈希標記的變化,但是當我點擊後退按鈕時,我只是回到前一頁(或者如果打開測試,沒有任何反應頁面在新窗口中)。
這正常在Chrome,Firefox和Safari,但不是Opera 11.50和11.60。據我所知,Opera聲稱完全支持Opera中的歷史API,但在Opera中會發生什麼情況是replaceState()的工作方式與pushState()類似,將條目放入歷史記錄中。
這是在Opera中的錯誤,或者我應該使用API在歌劇一些不同的方式?
你是正確的,加入event.preventDefault()修復Opera中的問題(和葉的事情在其他瀏覽器不變)。我提交了一個bug,它的ID是DSK-355229。 – Maple 2012-01-13 20:32:05