[英]Reload (fresh-load) previous page when back button is used
Sharepoint Web應用程序中的所有頁面都使用表單,並且我們要求在用戶到達頁面時必須將表單重置為默認值。 我們已經有適當的代碼在頁面的第一負載上運行(它運行if(!Page.IsPostback)
),該代碼用必要的默認值填充表單。
但是,使用后退按鈕時,此行為被破壞。 表單保留上次訪問頁面時使用的值。 我相信這是因為后退按鈕不會重新加載頁面,而只是將其從緩存中帶回。
建議的解決方案是使后退按鈕強制重新加載上一頁的URL。 這是我的代碼:
//$(window).unload(function () { //does not work in Firefox
$(window).bind('beforeunload', function () {
// when the back button is hit, obtain the
// URL of the prev. page (document.referrer)
// and manually navigate to it forcing the page to reload
try {
if (document.referrer) {
window.event.returnValue = false;
window.location = document.referrer + "?q=" + $.now();
}
}
catch (e) {
// unload will also be triggered during a postback,
// at which time an "Access Denied" error will be
// thrown for the usage of window.location. This error
// can be ignored, since this is the right behaviour.
}
});
此代碼無法正常工作。
document.referrer
並不總是在IE中工作,並且經常返回NULL,而不是前一頁的URL。 window.location
的分配將引發“未指定的錯誤”。 window.unload
這時不應執行以上代碼。 我正在尋找一種簡單的方法來:
最簡單的方法(但不幸的是,這並非萬無一失,該死的是您早期的IE),是將表單的autocomplete
屬性設置為off
。 這通常會阻止在刷新或通過歷史記錄返回過去的值時保留它們。 IE的較舊版本以及幾乎每個瀏覽器的某些真正較舊的版本都忽略了這一點,但是幾乎每個現代的瀏覽器都會在每次顯示頁面時清除表單。
除此以外, HTMLInputElement
確實具有defaultValue
屬性,該屬性包含在HTML源代碼中設置的原始值 -您可以在文檔准備就緒時循環遍歷所有輸入元素,並設置input_elm.value = input_elm.defaultValue
值,該值應使用input_elm.value = input_elm.defaultValue
覆蓋自動完成值實際指定。
您可以在導航到下一頁或卸載之前設置變量。 然后,您可以在從現金重新加載腳本時簡單地檢查此變量並采取相應的措施。 可能您也可以為此使用防偽令牌,這樣您就已經可以檢查表單是否合法。 盡管我不知道SharePoint是否支持此功能。
將此代碼添加到我的HTML中對我來說很好:
<input id="isOld" type="hidden" />
<script>
setTimeout(function () {
var el = document.getElementById('alwaysFetch');
el.value = el.value ? location.reload() : true;
}, 0);
</script>
它為隱藏的輸入分配一個值,該值將在單擊后退按鈕后保留,在這種情況下將強制刷新頁面。
但是,尚未證實它可以在所有主要瀏覽器上使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.