我们的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
,
选项卡已关闭,或者使用书签链接等
上面的代码不应该被执行。我正在寻找一种傻瓜式的方式:
答案 0 :(得分:1)
最简单的方法(但不幸的是,这不是万无一失的,该死的早期IE)是将表单的autocomplete
属性设置为off
。这通常会在刷新或通过历史记录返回时阻止保留过去的值。旧版本的IE以及几乎所有浏览器的一些旧版本都会忽略这一点,但nearly every modern browser会在每次显示页面时清除表单。
除此之外,HTMLInputElement
确实有defaultValue
property that contains the original value set in the HTML source - 您可以在文档就绪时遍历所有输入元素,并设置input_elm.value = input_elm.defaultValue
,该值应覆盖自动完成值无论你的来源实际指明了什么。
答案 1 :(得分:0)
您可以在导航到下一页或卸载之前设置变量。然后,当脚本从现金重新加载并相应地执行操作时,您可以简单地检查此变量。可能你也可以使用防伪代币,这样你就可以检查表格是否合法。虽然我不知道SharePoint是否支持此功能。
答案 2 :(得分:0)
将此代码添加到我的HTML中对我来说很合适:
<input id="isOld" type="hidden" />
<script>
setTimeout(function () {
var el = document.getElementById('alwaysFetch');
el.value = el.value ? location.reload() : true;
}, 0);
</script>
它为隐藏的输入分配一个值,该值在单击后退按钮后将保留,在这种情况下页面将被强制刷新。
然而,尚未确定它适用于所有主流浏览器。