【问题标题】:How to force a page refresh while pressing the back button in MAC safari如何在 MAC Safari 中按下后退按钮时强制刷新页面
【发布时间】:2010-12-26 17:50:39
【问题描述】:

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

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

当我在服务器端有断点时。我能够得到打击。

我确定调用了服务器端操作方法。 MAC SAFARI 浏览器存在一些问题。

我在其他浏览器 IE 和 FF 中尝试了相同的用例,它似乎可以正常工作。

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

有人可以建议在 MAC 中解决此问题吗?

谢谢,

维杰

【问题讨论】:

    标签: javascript macos browser safari back-button


    【解决方案1】:

    我还没有检查过,但我很确定 Mac 版的 Safari 并不是唯一这样做的浏览器。这是因为浏览器缓存的工作方式。当您返回浏览器历史记录时,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('');
             }
         }
    
    })
    

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

    【讨论】:

    • 是的,已经完成了。我想我只在世界的 MAC 端有问题,如果服务器端有问题,那么它会反映在所有浏览器中。?
    • 不,不,我并不是要暗示问题出在服务器端。我在原始答案中添加了更长的解释。
    【解决方案2】:

    尝试在表单上设置 autocomplete="off"

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

    【讨论】:

    • 与自动完成无关。我也保留了复选框值。猜猜一些 javascript sn-p 必须解决这个问题。
    猜你喜欢
    • 2018-09-30
    • 2012-03-02
    • 2012-02-22
    • 1970-01-01
    • 1970-01-01
    • 2014-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多