[英]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.