使用后退按钮时重新载入(新载)上一页

时间:2014-02-27 09:19:36

标签: javascript jquery

我们的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。
  • 在IE9中,对window.location的赋值会引发“未指定的错误”。
  • 刷新页面时也会触发
  • window.unload, 选项卡已关闭,或者使用书签链接等 上面的代码不应该被执行。

我正在寻找一种傻瓜式的方式:

  1. 区分卸载期间的后按按钮与其他卸载技术。
  2. 获取上一页的网址

3 个答案:

答案 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>

它为隐藏的输入分配一个值,该值在单击后退按钮后将保留,在这种情况下页面将被强制刷新。

然而,尚未确定它适用于所有主流浏览器。