2016-11-24 101 views
0

當我在主頁中使用我的cordova應用程序時,我需要向用戶顯示消息,詢問他是否真的要退出應用程序。
如果用戶選擇「是」,我需要退出應用程序。退出cordova Windows 10應用程序

要做到這一點,我用這個代碼:

document.addEventListener('backbutton', function() { 
    $rootScope.back(); 
    $rootScope.$apply(); 
}, false); 

$rootScope.back = function(execute) { 
    var path = $location.$$path; 
    if (path !== '/') { 
     $location.path(path.split('/').slice(0, -1).join('/')); 
    } else { 
     $rootScope.exitApp(); 
    } 
}.bind(this); 

$rootScope.exitApp = function() { 
    $rootScope.$emit('showPopover', { 
     message: $rootScope.LABELS.QUIT_APP, 
     confirmCallback: function() { 
      if (typeof navigator.app !== 'undefined') { 
       navigator.app.exitApp(); 
      } 
     }, 
     cancelCallback: doNothing 
    }); 
}; 

它的工作在Android和iOS,但不是在Windows 10應用程序。

在W10中,navigator.app未定義。
我讀了我應該暫停的應用程序,而不是退出,所以我想這窗戶科爾多瓦DOC quirkswritten(https://cordova.apache.org/docs/en/latest/cordova/events/events.html#backbutton):

$rootScope.exitApp = function() { 
    $rootScope.$emit('showPopover', { 
     message: $rootScope.LABELS.QUIT_APP, 
     confirmCallback: function() { 
      if (typeof navigator.app !== 'undefined') { 
       navigator.app.exitApp(); 
      } 
      else if (platformUtils.isWindows()) { 
       throw new Error('Exit'); // This will suspend the app 
      } 
     }, 
     cancelCallback: doNothing 
    }); 
}; 

throw new Error('Exit')被調用,並在日誌中顯示錯誤,但應用不暫停。

也許是因爲我在一個角度的應用程序?

有沒有人有想法?

回答

0

問題歸因於$emit用於顯示彈出窗口。
如果我在popover回調上拋出錯誤,則此錯誤不會返回到backbutton事件回調。

但是,在Windows平臺上,我們不應該顯示彈出窗口來詢問用戶是否一定要離開應用程序,所以如果我將它添加到「返回」功能,它就可以工作。使用到Windows

最終代碼10的應用程序是:

document.addEventListener('backbutton', function() { 
    $rootScope.back(); 
    $rootScope.$apply(); 
}, false); 

$rootScope.back = function(execute) { 
    var path = $location.$$path; 
    if (path !== '/') { 
     $location.path(path.split('/').slice(0, -1).join('/')); 
    } else { 
     if (window.device.platform.toLowerCase() === 'windows') { 
      throw new Error('Exit'); // This will suspend the app 
     } else { 
      $rootScope.exitApp(); 
     } 
    } 
}.bind(this); 
1

你也可以使用此:

if (device.platform.toLowerCase() === "windows") { 
    //this closes the app and leaves a message in the windows system eventlog if error object is provided 
    MSApp.terminateApp(); 
} else { 
    navigator.app.exitApp() 
}