2012-04-12 149 views
3

我在其他流行的瀏覽器中沒有這個問題。在一個JSP頁面(我們稱之爲Page1.jsp)中,我單擊了一個表單,它將轉到另一個頁面。當我點擊Opera的後退按鈕時,它會回到Page1.jsp,但沒有JavaScript或JSP代碼已經被刷新。例如,點擊瀏覽器後退按鈕後,Opera瀏覽器不會觸發JS或服務器端代碼(JSP)

<!-- Inside header tag --> 
<script language="JavaScript> 
    alert("Does this work in Opera?"); 
</script> 

簡單警報聲明不會觸發。服務器端代碼也是如此。但是,其他流行的桌面瀏覽器沒有問題。

我該如何解決這個問題?

謝謝你的幫助。

更新

我應該說 - 我爲此道歉 - 這包含的Page1.jsp幀/ iframe中,這是在提交表單的生活。當用戶提交表單時,它會在框架/ iframe中加載一個新頁面。此時,當用戶單擊瀏覽器的後退按鈕時,我看到Page1.jsp已被緩存,但幀/ iframe會重新加載。這發生在除Opera之外的所有流行瀏覽器中。

+0

你可以發佈演示某處(JSFiddle也許)?我懷疑它與Opera的iframe安全性有關,但它可以幫助你查看你在說什麼。 – webinista 2012-04-18 21:00:14

回答

1

@kennebec:非常感謝。因爲你的答案,我可以做一些更多的挖掘,我發現了一個計算器問題here和歌劇文章here,既解決了問題:

history.navigationMode = "compatible"; // Opera only property 
$(document).ready(function() { 
    alert("test"); 
}); 

this site,navigationMode僅由Opera瀏覽器的支持。所以,這是完美的作品,我不必腳本任何卸載事件。我查找了pageshow/pagehide,但它看起來並不完全符合跨瀏覽器的兼容性,HTML5有onpageshow/onpagehide,但我需要成爲跨瀏覽器的投訴並支持傳統瀏覽器。

3

實際上,大多數瀏覽器的行爲都像這樣,將瀏覽器返回到您離開它的狀態,而不是從頭開始重新加載訪問頁面。這通常是一件好事,使導航更快。

這是保存狀態「上卸載這樣做的瀏覽器,來覆蓋它,你可以用一個取代卸載處理您的own-

<script> 
alert('loaded'); 

onunload=function(){ return true; } 
</script> 

這可能是一個用戶可以具有某種自動保存的在瀏覽器中設置以記住訪問之間的表單狀態 - 爲此,您可能需要手動將表單字段設置爲卸載處理程序中的默認值。

+0

非常感謝您的幫助。實際上,我將修改問題,表單位於Page1.jsp中的frame/iframe中。所以,當用戶點擊瀏覽器的後退按鈕時,我看到Page1.jsp保持不變,但是frame/iframe的內容被重新加載。這發生在除Opera之外的所有流行瀏覽器上。 – user717236 2012-04-12 14:49:30

+0

爲我工作!乾杯。 – 2013-11-21 14:18:25