【问题标题】:javascript page refresh in SafariSafari中的javascript页面刷新
【发布时间】:2011-11-30 07:01:26
【问题描述】:

我正在尝试弄清楚如何使用 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 中处理页面刷新的正确方法是什么?

【问题讨论】:

  • 他们都在为我工作。我是 5.0 Windows
  • 你知道如何在 Safari 中打开开发者工具吗?
  • 尝试 document.location.reload(true)

标签: javascript safari


【解决方案1】:

显然,Mac 或 iOS 上的 Safari 存在 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;
}

【讨论】:

    【解决方案2】:
    location.reload(true); // works for safari
    

    如果你还不知道这个网站,那就去看看吧,你会有很多刷新页面的例子:http://www.quackit.com/javascript/javascript_refresh_page.cfm

    【讨论】:

    • 在页面是来自 POST 的响应的情况下,这对我不起作用。
    • 对于 POST 你有什么期望?如果你刷新一个 POST 页面,那就更棘手了。
    • 是的,它更棘手,但对于 Safari 来说似乎是个例外 - 其余浏览器支持基于 JS 的 POST 请求刷新。
    【解决方案3】:

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

    window.location.reload();
    

    如果您想硬重新加载(为页面发送新的 GET 请求),请将第一个参数设置为 true。

    【讨论】:

    • 在页面是来自 POST 的响应的情况下,这对我不起作用。
    • 您不应该呈现来自 POST 的响应,您应该使用 Post/Redirect/Get。否则,当用户尝试重新加载或导航回此页面时,您将遇到同样的问题。
    • 当然,在这种情况下,它应该只是一个带有查询字符串的 GET。但现在不能重新设计,而且它确实有效 - 刷新、导航回来,甚至 window.location.reload() 除了 Safari。所以我希望有一个完全跨浏览器的 window.location.reload() 的替代品,尽管我怀疑它不存在。
    • @andrewb 你总是可以做window.location = window.location
    • 对于 Safari,这仍然是 GET 而不是 POST。似乎它是 JS POST 在 Safari 中刷新的重新设计或 nada。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多