Safari中JavaScript页面刷新

8

我试图找出如何使用JavaScript在Safari(5.1)中刷新页面,但似乎没有任何方法能够奏效。

到目前为止,我尝试过以下方法:

  • window.location.href = window.location.href
  • window.location = window.location.href
  • window.location.reload(true)
  • window.location.replace(window.location.href)

在Safari中正确处理页面刷新的方式是什么?


所有这些都对我有效。我使用的是Windows 5.0。 - Mohsen
你知道如何在Safari中打开开发者工具吗? - Mohsen
尝试使用 document.location.reload(true) - lionheart
3个回答

4

显然,Safari在Mac或iOS上使用location.reload存在漏洞,因此我开发了一种利用url查询字符串的简单跨浏览器解决方案:

function refresh() {
  var url = location.origin;
  var pathname = location.pathname;
  var hash = location.hash;

  location = url + pathname + '?application_refresh=' + (Math.random() * 100000) + hash;
}


3

1
在页面是POST响应的情况下,这对我没有起作用。 - andrewb
1
对于一个POST请求,你期望什么?如果你刷新一个POST页面,会更加棘手。 - Guilhem Hoffmann
是的,这更加棘手,但似乎Safari是个例外 - 其他浏览器支持基于JS的POST请求刷新。 - andrewb
它运行了!!!救命稻草 - CodeLikeNoonesBusiness

2

您应该始终使用reload()方法来自location对象...

window.location.reload();

如果您想进行 强制刷新(发送新的GET请求以获取页面),请将第一个参数设置为true。


2
在页面是POST响应的情况下,这对我没有起作用。 - andrewb
你不应该从POST中渲染响应,而应该使用Post/Redirect/Get。否则,当用户尝试重新加载或返回到此页面时,您将遇到相同的问题。 - alex
在这种情况下,肯定只需要使用带有查询字符串的GET请求。但现在无法重新设计,而且它确实可以工作-刷新、后退导航,甚至是window.location.reload(),除了Safari。因此,我希望有一种完全跨浏览器的window.location.reload()替代方案,尽管我怀疑这种方案不存在。 - andrewb
这仍然是在Safari中执行“GET”,而不是“POST”。在Safari中,JS的“POST”刷新似乎需要重新设计或无法实现。 - andrewb
@andrewb 我会重新设计,因为听起来你正在尝试解决一个问题(从POST渲染)。 - alex
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接