網頁已過期在IE7、IE8

網頁已過期在IE7、IE8

通常這個問題是當form submit出去後,再按上一頁、下一頁就會出現的問題,不過如果在form的action設為錨點,也可能引起這種狀況,而這種情況則是未升級到IE9會發生的。

實際狀況

第一種狀況
form submit出去,由使者點選上一頁、下一頁就會出現這種狀況,或者是透過程式控制history

1
2
history.go()
history.back()

第二種狀況
form的action為’#’時,會導致form送出之後,在被重新導向

1
2
3
<form method="post" action="#">

</form>

而第二種狀況比較特別,只在未升級的成IE9以上瀏覽器,用相容模式在IE8包括以下的瀏覽器,才會出現這種問題。至於目前使用的chromefirefoxIE9+都已經不會有這問題了。但第一種狀況IE還是會出現,其餘瀏覽器都會重新submit和保留之前的畫面。

在IE中的userData Behavior

IE中可利用cookieflashstoragebehavior…等將資料儲存在client端。

但在IE6並不支援storage屬性,要儲存較大量的資料只能透過其他方法,若

不想掛載flash…等的情況下,可以透過behavior將資料存在brower

css:
.storeuserData {
    behavior: url(#default#userData);
}

以上是behavior在css的定義方式。 當然你也可透過以下方式以動態方式載入。

object.style.behavior = "url('#default#userData')" 
object.addBehavior("#default#userData")
javascript:
function save(){
   var persist=persistForm.persistInput;
   persist.setAttribute("persist",persist.value);
   persist.save("oXMLBranch");
}
function load(){
   var persist=persistForm.persistInput;
   persist.load("oXMLBranch");
   persist.value=persist.getAttribute("persist");
}

class被定義成behavior:url(#default#userData)時,setAttributegetAttribute

將會對暫存資料操作,不是domattribute,最後只要再設定完attribute後,執行save資料

就會儲存起來了,load則是選擇要讀取,讀完接著就可以取得attribute

以下html對應上方的js code:
<form id="persistForm"><input class="storeuserData" id="persistInput" type="text" />
    <input onclick="load()" type="button" value="Load" />
    <input onclick="save()" type="button" value="Save" />
</form>
換頁保留欄位的方法(換頁時,按上一頁,將會保留欄位資料):
<meta content="history" name="save" />
<style>                                                                                                                                               
.saveHistory {behavior:url(#default#savehistory);}
</style>

這些方法只能運作在IE上。