页面在Safari中重新加载行为

时间:2013-01-22 06:34:07

标签: javascript safari refresh

我的网页内容已发布。当我使用Cmd + R或使用浏览器刷新按钮在Safari中刷新所述页面时,弹出窗口显示如下: enter image description here

此行为在其他浏览器(Chrome,FF等)中也是相同的。

但是当我尝试使用 window.location.href = location.href location.reload()使用javascript刷新同一页面时在Safari中,window.location.reload()甚至是 window.location.reload(true),它没有显示上面提到的弹出窗口。但是在Chrome,FF等中出现相同弹出窗口的行为有所不同。

编辑:弹出窗口未显示的结果是发布的内容不会重新发送,因此行为会发生变化。

所以我现在的问题是如何在所有浏览器中重新加载页面,以便重新发送已发布的表单内容。

2 个答案:

答案 0 :(得分:1)

通过AJAX

据我所知,没有办法强制Safari在刷新期间重新发送POST数据。解决问题的唯一方法是“解决问题”。这个问题是将逻辑与显示结果的文档分开。实际上我的意思是你可以使用AJAX请求从代码中触发你想要的逻辑,而文档本身将是一个(相对)愚蠢的页面。

所以你得到的是:

POST document.ext

#In whatever server side language you're using, the reason this can't be done
# purely in javascript is that POST data is only available to the server.
print "<script>"
print "POSTdata = " + JSONEscape(POSTdata) + ";"
print "var doAction = function(){"
print "  ajax('action.ext', POSTdata, function(result){});"
print "});"
print "</script>"
print "<button onclick='doAction()'>Refresh</button>"

POST action.ext

# all the logic you previously had in document.xxx

结果是:

  • 在所有浏览器中,用户启动的刷新将发送POST数据并重新触发逻辑。
  • 刷新按钮将始终直接重新触发您的逻辑,而无需重新加载整个页面。

自提交表格

它只是打击了我另一个 - 更容易实现 - 实现此目的的方法是简单地创建<form action='?' method='POST'>并在代码中触发它的submit功能。您仍然需要print POSTdata,但不是触发Ajax调用,而是通过隐藏的<form>触发重定向到同一页面。这样做的好处是它不需要任何重组,但我个人认为AJAX方法看起来更整洁。一个快速的Google-fu显示these answers详细说明了procress。

答案 1 :(得分:0)

如果您确实想在未经确认的情况下使用刷新页面,则应使用重定向。因此,您将数据发布到页面A,并将帖子信息保存在会话或cookie上,然后将页面B重定向到渲染。

或者您可以在第A页上为您的业务逻辑执行所有操作,并使用页面B作为一种感谢页面。

然后,您可以在没有确认的情况下刷新第B页。

相关问题