我正在开发Windows phone 8 PhoneGap应用。使用navigator.app.exitApp()我在Windows Phone 7的主屏幕上退出应用程序。但是当我在Windows Phone 8中尝试相同时,我收到错误Unable to get property 'exitApp' of undefined or null reference
。我想知道为什么它在Windows Phone 8中未定义,而不是在Window phone 7 PhoneGap应用程序中。另外,我想知道,有没有办法在Windows Phone 8 PhoneGap应用程序中以编程方式退出应用程序?。
答案 0 :(得分:10)
您可以创建一个简单的插件。使用以下命令将文件ExitApp.css添加到您的platforms / wp8 / Plugins文件夹中:
using System.Windows;
namespace WPCordovaClassLib.Cordova.Commands
{
class ExitApp : BaseCommand
{
public void execute(string options)
{
Application.Current.Terminate();
}
}
}
编辑您的平台/ wp8 / config.xml并添加到小部件标记:
<feature name="ExitApp">
<param name="wp-package" value="ExitApp" />
</feature>`
然后从你的javascript调用:
cordova.exec(null, null, "ExitApp", "execute", []);
当用户点击主页面中的后退按钮时,您可以将它与backbutton事件结合使用来关闭应用程序:
function goBack(e){
if(isInMyMainPage()) cordova.exec(null, null, "ExitApp", "execute", []);
}
document.addEventListener("backbutton", goBack, false)
答案 1 :(得分:1)
我为Windows Phone 8.1开发了一个小应用程序,下面的代码对我有用:
window.close();
答案 2 :(得分:0)
Navigator.app.exit()
不会退出应用程序崩溃的应用程序。
在Windows Phone 8中,它会被处理,因此只会抛出异常。
您必须在CordovaView.xaml.cs中的page_BackKeyPress事件中编写以下代码
Application.Current.Terminate();
它会在按下硬件按钮时退出您的应用程序。
答案 3 :(得分:0)
此处类似的问题:How to exit an application in window phone 8 with phonegap 2.3包含一个不需要任何原生黑客攻击的修复程序。
答案 4 :(得分:0)
在版本3.6.3中, navigator.app.exitApp()可以正常工作。
这是在CordovaView.cs中调用的地方
void CordovaBrowser_ScriptNotify(object sender, NotifyEventArgs e)
{
string commandStr = e.Value;
string commandName = commandStr.Split('/').FirstOrDefault();
if (browserDecorators.ContainsKey(commandName))
{
browserDecorators[commandName].HandleCommand(commandStr);
return;
}
CordovaCommandCall commandCallParams = CordovaCommandCall.Parse(commandStr);
if (commandCallParams == null)
{
// ERROR
Debug.WriteLine("ScriptNotify :: " + commandStr);
}
else if (commandCallParams.Service == "CoreEvents")
{
switch (commandCallParams.Action.ToLower())
{
case "overridebackbutton":
string arg0 = JsonHelper.Deserialize<string[]>(commandCallParams.Args)[0];
this.OverrideBackButton = (arg0 != null && arg0.Length > 0 && arg0.ToLower() == "true");
break;
case "__exitapp":
Debug.WriteLine("Received exitApp command from javascript, app will now exit.");
CordovaBrowser.InvokeScript("eval", new string[] { "cordova.fireDocumentEvent('pause');" });
CordovaBrowser.InvokeScript("eval", new string[] { "setTimeout(function(){ cordova.fireDocumentEvent('exit'); cordova.exec(null,null,'CoreEvents','__finalexit',[]); },0);" });
break;
case "__finalexit":
IsExiting = true;
// hide the browser to prevent white flashes, since about:blank seems to always be white
CordovaBrowser.Opacity = 0d;
CordovaBrowser.Navigate(new Uri("about:blank", UriKind.Absolute));
break;
}
}
else
{
if (configHandler.IsPluginAllowed(commandCallParams.Service))
{
commandCallParams.Namespace = configHandler.GetNamespaceForCommand(commandCallParams.Service);
nativeExecution.ProcessCommand(commandCallParams);
}
else
{
Debug.WriteLine("Error::Plugin not allowed in config.xml. " + commandCallParams.Service);
}
}
}
答案 5 :(得分:0)
navigator.app.exitApp();自3.4.0以来已在Apache Cordova WP8项目中提供
<div onclick="navigator.app.exitApp()">Exodus</div>
答案 6 :(得分:-1)
类似的问题:https://groups.google.com/forum/#!msg/phonegap/9v2kOwXj6sQ/O8SVpd-qjicJ
但它基本上说不应该以编程方式退出Windows Phone 8应用程序。