24

在 Dart 中进行重定向和重新加载的首选方法是什么?

我们只使用:window.location.href = window.location.href

4

1 回答 1

51

有几种不同的方法可以处理 URI 更改,并且每种方法都有自己的用途。

  1. 当您想将用户发送到另一个 URI 时:

    • window.location.assign('http://google.com')

      这会将用户发送到 Google,保留浏览历史记录(后退按钮历史记录)。这就像点击一个链接。

    • window.location.href = 'http://google.com'

      与上面相同,只是另一种方法。href是一个 setter,并导致分配发生。我觉得以前的版本更干净。

    • window.location.replace('http://google.com');

      但是,对象上的replace()方法LocalLocation不仅将用户发送到 Google,而且不会将原始页面放入会话历史记录中,这意味着用户不会遭受永无止境的后退按钮噩梦。

      这本质上与 HTTP 重定向相同。历史被跳过。

  2. 当您想要重新加载/刷新时。

    • window.location.assign(window.location.href)

      将当前页面重新加载到完全相同的 URI。这不包含数据POST。我可能会从缓存中重新加载某些资源(如图像等),因此它可能不是完全重新加载。

      这本质上与按下F5和跳过POST数据发送相同。

    • window.location.href = window.location.href

      再次,与之前相同。

    • window.location.reload()

      这种重新加载页面的方式也会导致POST数据被发送。的“JavaScript 版本”window.location.reload()还支持指定是否跳过缓存的参数。但是,当前的 Dart 实现不支持该参数,并且默认从缓存中获取资源。

      这个缓存参数可能会在某个时候添加到 Dart,但它还没有。当它到达时,您很可能只是true作为第一个参数传递,然后它就像Ctrl + Shift + R.

概括

  • 我想模拟点击<a>标签。

使用window.location.assign(url).

  • 我想重定向到像 HTTP 重定向这样的新网站并跳过后退按钮历史记录。

使用window.location.replace(url).

  • 我想F5POST数据做一个。

使用window.location.reload().

  • 我想做一个F5没有POST数据的。

使用window.location.assign(window.location.href).

  • 我想做一个Ctrl + Shift + F5.

不可用,可能在将来。它可能是window.location.reload(true)

于 2012-10-28T14:01:19.937 回答