智能 GWT JSNI 只执行一次
Smart GWT JSNI executes only once
我对智能 GWT 应用程序中的 JSNI 执行有疑问。
我想实现用户 activity 监控功能。当用户不活动 n 分钟时,页面将触发通知模式并呼叫用户回来。诸如 9gag 上的唤醒通知之类的东西。
触发通知后,我将实现一些额外的功能(即计算用户处于非活动状态的次数..)
问题:
正常工作的 JSNI 函数(我在普通 HTML 和 JavaScript 页面上测试过)只执行一次。在第一个 inactivity 通知模式被推送给用户后,功能不再执行。
public static native void wakeUp()/*-{
console.log("#### Wake Up - started");
var timeout;
resetTimer();
document.onmousemove = resetTimer;
document.onclick = resetTimer;
function resetTimer() {
clearTimeout(timeout);
timeout = setTimeout(function() {
console.log("#### Wake Up - inactive for 1 minute...");
//display custom modal
@com.pb.client.MGMWeb::displayWakeUpNotification()();
}, 1 * 10 * 1000);//inactivity duration
}
}-*/;
解决方案是将事件侦听器添加到 $doc 而不是使用 document。
工作示例:
public static native void wakeUp()/*-{
console.log("#### WakeUp - Start");
var timeout;
resetTimer();
$doc.addEventListener('onclick', resetTimer, false);
$doc.addEventListener('onmouseover', resetTimer, false);
$doc.addEventListener('mousedown', resetTimer, false);
$doc.addEventListener('keypress', resetTimer, false);
$doc.addEventListener('mousemove', resetTimer, false);
$doc.addEventListener("DOMMouseScroll", resetTimer, false);
$doc.addEventListener("MSPointerMove", resetTimer, false);
$doc.addEventListener("touchmove", resetTimer, false);
function notifiyUser() {
@com.pb.client.MGMWeb::displayWakeUpNotification()();
console.log("#### Wake Up - inactive for 1 minute..");
}
function resetTimer() {
clearTimeout(timeout);
timeout = setTimeout(notifiyUser, 1 * 60 * 1000);
}
}-*/;
我对智能 GWT 应用程序中的 JSNI 执行有疑问。
我想实现用户 activity 监控功能。当用户不活动 n 分钟时,页面将触发通知模式并呼叫用户回来。诸如 9gag 上的唤醒通知之类的东西。
触发通知后,我将实现一些额外的功能(即计算用户处于非活动状态的次数..)
问题: 正常工作的 JSNI 函数(我在普通 HTML 和 JavaScript 页面上测试过)只执行一次。在第一个 inactivity 通知模式被推送给用户后,功能不再执行。
public static native void wakeUp()/*-{
console.log("#### Wake Up - started");
var timeout;
resetTimer();
document.onmousemove = resetTimer;
document.onclick = resetTimer;
function resetTimer() {
clearTimeout(timeout);
timeout = setTimeout(function() {
console.log("#### Wake Up - inactive for 1 minute...");
//display custom modal
@com.pb.client.MGMWeb::displayWakeUpNotification()();
}, 1 * 10 * 1000);//inactivity duration
}
}-*/;
解决方案是将事件侦听器添加到 $doc 而不是使用 document。
工作示例:
public static native void wakeUp()/*-{
console.log("#### WakeUp - Start");
var timeout;
resetTimer();
$doc.addEventListener('onclick', resetTimer, false);
$doc.addEventListener('onmouseover', resetTimer, false);
$doc.addEventListener('mousedown', resetTimer, false);
$doc.addEventListener('keypress', resetTimer, false);
$doc.addEventListener('mousemove', resetTimer, false);
$doc.addEventListener("DOMMouseScroll", resetTimer, false);
$doc.addEventListener("MSPointerMove", resetTimer, false);
$doc.addEventListener("touchmove", resetTimer, false);
function notifiyUser() {
@com.pb.client.MGMWeb::displayWakeUpNotification()();
console.log("#### Wake Up - inactive for 1 minute..");
}
function resetTimer() {
clearTimeout(timeout);
timeout = setTimeout(notifiyUser, 1 * 60 * 1000);
}
}-*/;