- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 GWT 应用程序,我想在用户离开应用程序以强制注销并删除任何数据等时运行一些代码。
为此,我使用 CloseHandler 并使用 Window.addCloseHandler 注册它。
我注意到,当单击刷新按钮时,会运行 onClose 方法,但我无法将此事件与用户关闭浏览器的关闭区分开来。如果是刷新我不想注销等,我只想在用户关闭浏览器/选项卡或导航离开网站时执行此操作。
有人知道我该怎么做吗?
最佳答案
没有办法区分“关闭”和“刷新”。但是,您可以设置一个保存上次 CloseHandler 调用时间的 cookie,并在加载模块时检查该时间是否足够老,可以在显示页面之前清理信息。
您可以使用以下实用程序类 (BrowserCloseDetector
) 来做到这一点。这是在 onModuleLoad
上使用它的示例.
测试线 :
@Override
public void onModuleLoad() {
if (BrowserCloseDetector.get().wasClosed()) {
GWT.log("Browser was closed.");
}
else {
GWT.log("Refreshing or returning from another page.");
}
}
import com.google.gwt.user.client.Cookies;
import com.google.gwt.user.client.Window;
public class BrowserCloseDetector {
private static final String COOKIE = "detector";
private static BrowserCloseDetector instance;
private BrowserCloseDetector() {
Window.addWindowClosingHandler(new Window.ClosingHandler() {
public void onWindowClosing(Window.ClosingEvent closingEvent) {
Cookies.setCookie(COOKIE, "");
}
});
}
public static BrowserCloseDetector get() {
return (instance == null) ? instance = new BrowserCloseDetector() : instance;
}
public boolean wasClosed() {
return Cookies.getCookie(COOKIE) == null;
}
}
关于GWT 在 CloseHandler 中检测浏览器刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5203856/
我有一些(更多)关于调用 CloseHandle 的问题。 所以,the SO citizens have spoken, and you must always close a handle . 问
在我的应用程序中,我打开了一个共享内存的句柄,我可以读取/写入共享内存。我这样打开 handle : //Map the shared memory d_to_mbx_mem_arr[idx
如果句柄被创建为函数参数,它会在函数结束时自行关闭吗? 例如: int readMem(HANDLE processHandle, int address) { int memValue =
我有一个主线程接收需要一些时间的 Action 。所以我创建了一个线程并将工作委托(delegate)给它。主线程在接收作业时调用此执行函数。每个作业都执行此执行。 Return_type execu
我有一个 Class 类,其中有一个成员属性 HANDLE handle 到一个线程(我们可以假设它被设置为 NULL 在那个点)。在某些时候,Class 中的一个方法分派(dispatch)它自己的
我正在阅读 http://support.microsoft.com/kb/243953他们在其中解释了如何将应用程序限制为单个实例。互斥锁在构建和销毁时创建,它们调用 CloseHandle。 这让
我绞尽脑汁想弄清楚串行端口何时完成关闭,以便我可以重新打开它。事实证明,CloseHandle() 在端口实际解锁之前返回。 我正在使用 CreateFile(FILE_FLAG_OVERLAPPED
我需要从上下文菜单启动一个单独的进程/应用程序;我正在使用函数 launch_program 来执行此操作。一旦创建的进程终止,我不关心退出代码,我只希望能够启动它。我的问题是:如果变量 startu
在 CloseHandle() 中关闭其句柄后,进程未终止。 我有一个由 CreateProcess() api 创建的进程。即使在关闭其句柄后,它仍在运行。 在 msdn 中,他们说 CloseHa
我有一个 GWT 应用程序,我想在用户离开应用程序以强制注销并删除任何数据等时运行一些代码。 为此,我使用 CloseHandler 并使用 Window.addCloseHandler 注册它。 我
我编写了一个自己开发的串行端口类,为了简单起见,我使用了阻塞/同步/非重叠。我浏览了所有 MSDN 文档,这对我来说很困难。 我在从端口打开、传输或接收字节方面没有任何问题。所有操作都是同步并且没有线
我只想创建一个线程,然后立即调用 CloseHandle 并让线程自行消亡,这样我就不必在“原始”线程中进行额外的清理工作(清理本身并不难) ,但这意味着我想避免大量额外的簿记)。 MSDN 说在线程
我做了一个简单的例子。 我只想知道在将 handle 重新附加到新进程之前是否需要关闭 handle ? DWORD g_dwPid = 0; HANDLE g_hProcess; int _tWin
这个问题在这里已经有了答案: Serial Comm using WriteFile/ReadFile (4 个答案) 关闭 9 年前。 我想读取串行端口的传入数据并处理它们(Windows: na
我决定使用 Wait Functions (WaitForSingleObject、WaitForMultipleObject 等) 来正确退出线程。在这种情况下,问题是我是否需要显式调用 Close
长话短说 假设我实现了一个类,该类实现了一个返回 HANDLE 的 API。假设我的类(class)是 HANDLE 的所有者并负责创建、更新和关闭它。 如何防止我的 API 调用者关闭我的句柄并破坏
我需要打电话吗 CloseHandle()在 EnumWindows() 返回的句柄上? 最佳答案 您只能在 kernel32 中的函数返回的句柄上使用 CloseHandle()。它们是引用计数的,
事实 1:由于某些客户端限制,我们无法使用异常机制。 事实 2:关闭已经关闭的句柄会引发异常。 不考虑提及事实的原因,将调用 GetHandleInformation() 来检测句柄是否仍然有效,并且
根据 MSDN 规范,CloseHandle 在调试器下运行时,如果传递给它的句柄无效,则会引发异常。 因为我想要干净的代码,所以我插入了一些代码来捕捉它。但是,它不起作用,异常未被捕获。 #incl
在 Windows 中创建命名对象时,可以通过调用 GetLastError() 并检查 ERROR_ALREADY_EXISTS 来查明该对象是否已经存在。 有没有办法提出双重问题:我的 Close
我是一名优秀的程序员,十分优秀!