Cordova 如何使用phonegap 2.3退出Windows phone 8中的应用程序

Cordova 如何使用phonegap 2.3退出Windows phone 8中的应用程序,cordova,windows-phone-8,Cordova,Windows Phone 8,我的问题是如何使用phonegap 2.3在WindowPhone 8中退出应用程序。 我使用了“navigatior.app.exit()”,但它显示“navigatior.app”未定义。Navigator.app.exit()如果插件未由Cordova Framework定义,则无法工作。您可能必须为Exit方法编写自己的插件才能使其工作。作为一种解决方法,您的back key硬件事件可以在Cordova.xaml.cs中处理,为了退出应用程序,您可以编写** Application.Cu

我的问题是如何使用phonegap 2.3在WindowPhone 8中退出应用程序。
我使用了“navigatior.app.exit()”,但它显示“navigatior.app”未定义。

Navigator.app.exit()如果插件未由Cordova Framework定义,则无法工作。您可能必须为Exit方法编写自己的插件才能使其工作。作为一种解决方法,您的back key硬件事件可以在Cordova.xaml.cs中处理,为了退出应用程序,您可以编写**

Application.Current.Terminate();

按硬件backbutton时,它将退出您的应用程序。

我想我找到了一个不需要本机黑客攻击的解决方案

如果您的Phonegap/cordova应用程序从page1.html转到page2.html,然后通过链接返回到page1.html,则标准backbutton行为不会退出该应用程序

第1页>>第2页>>第1页-Windows Phone将带您进入第2页,而不是退出应用程序。这是预期的行为,但记录得有点糟糕

不管怎样,我到处找了很久,但没有找到一个适合我的修复方法

我如何修复它的TLDR是使用JS值跟踪我在哪个页面上,如果我在索引页面上,我重置历史记录,然后我允许启动本机后退按钮功能

IE在page1.html中你可以

var currentPage = "index";
然后在你的app.devicerady函数中包括

if(currentPage == "index"){
  history.go(-(history.length-9999));
  document.addEventListener("backbutton", handleBack, true);
}else{
   document.addEventListener("backbutton", handleBack,
false);
}
function handleBack(){
  // handle other logic here such as handling the back events from page2 to page1..
}
这里真正的魔法是history.go(-(history.length-9999)),它基本上告诉历史堆栈重置。此外,addEventListener上的true语句允许触发原始注册事件(本机返回按钮)

无论如何,试试看,让我知道它是否适合你


一个解释也无妨。看见
    protected IsolatedStorageSettings UserSettings
    {
        get
        {
            return IsolatedStorageSettings.ApplicationSettings;
        }
    }
    void OnAppExit(object sender, EventArgs e)
    {
        UserSettings.Remove("sessionStorage");
        UserSettings.Save();
    }
    private void Page_BackKeyPress(object sender, CancelEventArgs e)
    {
        if (_browserHistoryLength > 1)
        {
            _phoneGapView.Browser.InvokeScript("eval", "history.go(-1)");
            _browserHistoryLength -= 2;
            e.Cancel = true;
        }
        else
        {
            //to exit app
            Application.Current.Exit += new EventHandler(OnAppExit);
           }
    }