代码之家  ›  专栏  ›  技术社区  ›  vijaysylvester

如何在Mac Safari中按下后退按钮时强制刷新页面

  •  1
  • vijaysylvester  · 技术社区  · 16 年前

    我有两个使用ASP.NET MVC创建的ASPX页(A、B)。在文件A中,我有一些复选框和文本框。

    当我移动到B页并尝试通过按浏览器后退按钮(在MacSafari中)导航到A页时,页面不会刷新。页面保留其旧值(用于复选框和文本框)。

    当我在服务器端遇到断点时。我能被击中。

    我确信调用了服务器端操作方法。Mac Safari浏览器存在一些问题。

    我在其他浏览器IE和FF中也尝试过同样的用例,它看起来工作正常。

    相当简单,但我在谷歌搜索时不能得到正确的答案。

    有人能建议在Mac电脑上解决这个问题吗?

    谢谢,

    维杰

    2 回复  |  直到 16 年前
        1
  •  1
  •   salgiza    16 年前

    我还没查过,但我很确定 雨衣 不是唯一一个这样做的浏览器。这是因为浏览器缓存的工作方式。当您返回浏览器历史记录时,Safari(以及Afaik Firefox)不会再次请求该页面。相反,safari/webkit将一个副本保存在以前访问过的页面的内存中,这样返回几乎是即时的。

    在这种情况下,Safari会保留它的精确副本,包括输入的值。在正常情况下,这对用户来说很方便,正如我所说,我认为Safari不是唯一一个这样做的人(即使是这样,其他浏览器将来也可以选择这样做,所以您不应该针对它)。

    禁用“a”操作的缓存应该可以做到这一点,因为它应该强制浏览器再次获取页面(并重置输入值)。像这样:

    [System.Web.Mvc.OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
    public ActionResult A()
    {
        return View();
    }
    

    如果这不能解决问题,您可能需要在网页的onload事件中使用javascript清除值(这对于jquery来说应该是非常简单的)。类似:

    $(document).ready(function() {
    
         $('input').each( function() {
             if($(this).attr('type') == 'checkbox') { 
                  this.checked=false;
             } else {
                  $(this).val('');
             }
         }
    
    })
    

    注意:代码没有经过测试,但我希望它有帮助(如果禁用页面缓存失败):)

        2
  •  -1
  •   khel    16 年前

    尝试在表单上设置autocomplete=“off”

    如果您在Firefox上刷新页面,也会发生这种情况。