智能GWT JSNI只执行一次
Smart GWT JSNI executes only once
我对智能GWT应用程序中的JSNI执行有疑问。
我想实现用户活动监控功能。当用户处于非活动状态超过n分钟时,页面将触发通知模式并呼叫用户返回。比如9gag上的唤醒通知。
通知被触发后,我将实现一些额外的功能(即计算有多少次用户不活跃…)
问题:正常工作的JSNI函数(我在纯HTML和JavaScript页面上测试了它)只执行一次。在第一个非活动通知模式被推给用户后,函数不再执行。
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);
}
}-*/;
相关文章:
- If语句只执行一次
- JavaScript 只在 php 代码中执行一次
- 如果只有一次有条件,如何执行
- 是节点.js一次只执行一个上下文
- 就绪函数上的指令只能执行一次
- 如何在if循环中只执行一次
- Javascript执行一次
- Jquery on('单击')..函数只执行一次
- 如何在一次有条件的ng单击时执行多个调用
- 如何只执行一次ajaxStart和ajaxEnd
- 使用Greasemonkey每5秒执行一次Javascript
- 只执行一次jquery animate
- jQuery如果大于则执行操作,但只执行一次
- 制作一个$window.location.reload(true);在离子/角度中仅执行一次
- 正则表达式回调函数只执行一次
- 如何循环函数数组并在单击时一次执行一个
- 代码只执行一次,但应该继续执行
- Casper.start 的循环只执行一次
- 如何在一次点击(而不是整个点击)内执行一次操作
- 在一次执行中多次运行Jasmine Spec