Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 检测应用程序重新聚焦事件_Javascript_Ipad_Sencha Touch_Cordova 2.0.0 - Fatal编程技术网

Javascript 检测应用程序重新聚焦事件

Javascript 检测应用程序重新聚焦事件,javascript,ipad,sencha-touch,cordova-2.0.0,Javascript,Ipad,Sencha Touch,Cordova 2.0.0,我需要知道用户每次开始使用应用程序的时间 案例1(正常):应用程序未启动。 用户从头开始启动应用程序 我在应用程序的引导程序上添加了一个侦听器,我知道它何时启动 案例2(TODO):应用程序已启动,但不再处于活动状态 用户从任务栏重新加载应用程序 我想知道应用程序何时从任务栏转到前台(比如alt+tab) 这很难捕捉,因为应用程序仍在运行,我不知道该听哪个事件。事实上,我甚至不知道如何命名这种行为。正如我不久前在facebook(destkop,而非mobile)上看到的,他们检查mousemo

我需要知道用户每次开始使用应用程序的时间

案例1(正常):应用程序未启动。

用户从头开始启动应用程序

我在应用程序的引导程序上添加了一个侦听器,我知道它何时启动

案例2(TODO):应用程序已启动,但不再处于活动状态

用户从任务栏重新加载应用程序

我想知道应用程序何时从任务栏转到前台(比如alt+tab)

这很难捕捉,因为应用程序仍在运行,我不知道该听哪个事件。事实上,我甚至不知道如何命名这种行为。

正如我不久前在facebook(destkop,而非mobile)上看到的,他们检查mousemove以确定收到的聊天信息是否应标记为已读。我知道这不是解决办法,但它可能会为你指明一个好的方向。
我还会检查当你切换到其他应用程序时,输入焦点会发生什么变化。也许它模糊了。

一位ios应用程序开发人员接受了我的帮助。他的回答很适合我,因为它看起来很清楚。因此,我将在这里制作:

“应用程序来到前台”事件可以通过应用程序将进入前台事件捕获。 Phonegap/Cordova允许通过Cordova类调用javascript函数。webView对象有一个专用的方法来启动js脚本

所以我打开了Projet/Classes/Cordova/AppDelegate.m文件:

- (void)applicationWillEnterForeground:(UIApplication *)application {
    NSLog(@"applicationWillEnterForeground: %@", self.viewController.webView);
    [self.viewController.webView stringByEvaluatingJavaScriptFromString:@"notifyForegroundEvent();"];

}
我在js文件的根目录中添加了notifyForegroundEvent()方法:

var notifyForegroundEvent = function() {
  console.log('notifyForegroundEvent()');
  // Do something here
}

Et voilá

Cordova中有一个应用程序恢复和暂停事件,因此您无需编辑Cordova类文件。下面是我目前在iOS/Android应用程序中使用的工作代码

window.onload = function() {  
    //only fired once when app is opened
    document.addEventListener("deviceready", init, false);
    //re-open app when brought to foreground
    document.addEventListener("resume", init, false);
    //trigger when app is sent to background
    document.addEventListener("pause", onPause, false);

}

function init() {
    console.log('device ready or resume fired');
}

为什么会将其标记为“iPad”?因为该应用程序打算在iPad上运行,带有cordova/sencha touch Framework这是一个不错的想法,尽管我认为如果解决方案没有在sencha touch中实现,我会在objective-c中搜索一些东西