我在Mac上运行的AIR应用程序,我想有隐藏的窗口,当有人“关闭”行为的应用程序(如点击红色的“X”按钮或CMD-W)。 但是,如果有人打CMD-Q或选择从坞上下文菜单或顶级菜单中的“退出”,我想应用到实际关闭。
我可以通过应用程序发送的“结束”事件的preventDefault,然而,这会导致所有“亲密”的方法,只是隐藏窗口。 有人在这一点上关闭应用程序的唯一方法是ForceQuit(或通过单独的接口I提供,喜欢上了停靠栏图标上下文菜单选项)。
我也曾尝试手动捕获CMD-Q keyDown事件,但它不会发送。 此外,这不会对帮助的情况下,当人们尝试使用菜单选项的退出程序。
此外,如果我的preventDefault就打烊方法,它使我的应用程序,立即取消关闭过程(这是一个可怕的用户体验)。
有没有一种方法来检测关闭AIR应用程序的不同的方法? 我希望能够告诉这些关闭方法之间的差异,反应到合适的。
尝试一下本作收,从我的理解有/在框架bug,因此如果包括AIR更新它打破CMD-Q的支持,线程使用在这里: http://www.adobe.com /cfusion/webforums/forum/messageview.cfm?forumid=72&catid=670&threadid=1373568
这可能是也可能不是适用于您的情况。
NativeApplication.nativeApplication.addEventListener(Event.EXITING,
function(e:Event):void {
var opened:Array = NativeApplication.nativeApplication.openedWindows;
for (var i:int = 0; i < opened.length; i ++) {
opened[i].close();
}
});
试试这个,我相信一定有处理这更好的办法,但是这已经为我工作。
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="onCreationComplete()">
<mx:Script>
<![CDATA[
import mx.core.Application;
import mx.events.AIREvent;
import mx.core.Window;
private function onCreationComplete():void {
addMacSupport();
}
private var macsupport_allowExit:Boolean = false;
private function addMacSupport():void {
if ( Capabilities.os.indexOf("Mac") == 0 ) {
//open a hidden window that will prevent the application from
//exiting when the user presses Cmd+W
var win:Window = new Window();
win.visible = false;
win.open(false);
//add a closing listener on the hidden window, this event will only
//be fired when the user pressed Cmd+Q or selects quit from the menu
//then set macsupport_allowExit to true
win.addEventListener(Event.CLOSING, function(e:Event):void {
macsupport_allowExit = true;
});
//add an event listener to this window on closing
addEventListener(Event.CLOSING, function(e:Event):void {
//always preventDefault
e.preventDefault();
//wait one frame, then check the macsupport_allowExit variable
//if it is true, we nedd to exit the app, otherwise just hide
//the app window
callLater(function():void {
if ( macsupport_allowExit ) {
nativeApplication.exit();
}
else {
nativeWindow.visible = false;
}
});
});
//add an event listener for INVOKE to show our main app window
//when the dock icon is clicked.
addEventListener(InvokeEvent.INVOKE, function(e:InvokeEvent):void {
if ( nativeWindow && !nativeWindow.visible ) {
nativeWindow.visible = true;
nativeWindow.activate();
}
});
}
}
]]>
</mx:Script>
</mx:WindowedApplication>