2013-04-30 31 views
8

使用Google Web Toolkit,我想编写相当于hard refresh (control + F5)的代码。GWT中的硬刷新

我不相信(或者知道)GWT的Window.Location会起作用。

import com.google.gwt.user.client.Window.Location; 

Window.Location = currentPage; // I don't think it'll be hard refresh 
+0

我可以问你为什么需要硬刷新?你有外部资源,还是一切都由GWT处理?因为在最后一种情况下,我不明白你为什么要强制重新加载。 – 2013-04-30 17:10:47

+0

@AndreaBoscolo,我正在考虑添加这个硬刷新,我的代码将用户重定向到一个通用的错误页面。但是,我不想将它们重定向到通用错误页面,而是希望重新指引它们再次登录(硬刷新将实现)。用户的凭证在15分钟左右后过期。我不知道如何解决底层问题,因此添加硬刷新比强制用户打开新浏览器并重新登录更好。 – 2013-04-30 17:43:34

回答

9

要重新加载当前页面,您需要调用Window.Location.reload()方法。

重新加载当前的浏览器窗口。所有的GWT状态都将丢失。

或者你甚至可以指定自己的JSNI(下如何待办事项),因为默认情况下force reload is false

public static native void forceReload() /*-{ 
     $wnd.location.reload(true); 
    }-*/; 
+0

所以'GWT'的Window.Location.reload()不会强制重载?但是如果使用'true'参数,那么JSNI代码将会被使用? – 2013-04-30 16:23:49

+0

如果你看一下Window.Location.reload()方法的实现,它不会使用'true'作为参数。默认情况下它是错误的。是本地Javascript的确。如果您有此类静态方法,您可以将此静态方法添加到您的Utility类。 – 2013-04-30 16:36:09

+0

尊重,您的答案不应该只包含JSNI代码吗?如果'Window.Location.reload()'不能进行硬刷新,请问您可以编辑您的答案吗? – 2013-04-30 16:40:49

4

根据https://developer.mozilla.org/en-US/docs/DOM/window.location#Methods你需要调用window.location.reload(true)迫使当前页面的重新加载。

不幸的是,GWT只通过Window.Location.reload()来包装window.location.reload(),由浏览器来从缓存或其他get中取回页面。这是为了实现最多的跨浏览器解决方案。

从未尝试,但你应该能够使用以下内容。

public static native void reload(boolean force) /*-{ 
    $wnd.location.reload(force); 
}-*/; 
1

对于重载GWT页面,你有两个选择:

1)Window.Location.reload();

重新加载当前的浏览器窗口。所有的GWT状态都将丢失。

2)Window.Location.replace(“newurl”);

用新的替换当前的URL。所有的GWT状态都将丢失。在浏览器的历史记录中,当前的URL将被新的URL替换。