Javascript 在AdobeAIR HTML应用程序中强制全屏显示
对于我的HTML Adobe AIR应用程序,我在启动时运行以下命令以全屏显示窗口:Javascript 在AdobeAIR HTML应用程序中强制全屏显示,javascript,air,adobe,Javascript,Air,Adobe,对于我的HTML Adobe AIR应用程序,我在启动时运行以下命令以全屏显示窗口: window.nativeWindow.stage.displayState = runtime.flash.display.StageDisplayState.FULL_SCREEN_INTERACTIVE; 然后对于激活状态,我执行以下操作: window.nativeWindow.addEventListener(air.Event.ACTIVATE, function() { window.
window.nativeWindow.stage.displayState = runtime.flash.display.StageDisplayState.FULL_SCREEN_INTERACTIVE;
然后对于激活状态,我执行以下操作:
window.nativeWindow.addEventListener(air.Event.ACTIVATE, function() {
window.nativeWindow.stage.displayState = runtime.flash.display.StageDisplayState.FULL_SCREEN_INTERACTIVE;
});
因此,我们的想法是,当窗口被最小化或未聚焦,然后重新聚焦时,窗口将全屏显示,并且不会以较小的尺寸打开窗口
但是,当我单击最小化时,激活甚至会被触发,因此无法最小化窗口
你知道为什么吗?或者如何解决这个问题?我注意到,如果我将该行注释掉,当我在全屏模式下最小化时,它会首先使窗口“窗口化”,例如,在最小化之前,将窗口设置为XML文件中设置的800x600大小。。。所以想知道这是否就是问题所在?它实际上通过执行该步骤进入最小化模式来激活窗口
对于确保应用程序从最小化状态恢复时进入全屏状态,还有其他建议吗
第二个问题是使用以下方法使窗口在激活或停用时可见和不可见:
window.nativeWindow.addEventListener(air.Event.ACTIVATE, function() {
window.nativeWindow.visible = true;
});
window.nativeWindow.addEventListener(air.Event.DEACTIVATE, function() {
window.nativeWindow.visible = false;
});
其想法是,当应用程序处于全屏状态时,如果用户远离它或最小化窗口,它应该将其隐藏起来,以便在其他窗口后面看不到它(因为Adobe AIR使用Flash Player实现全屏)
这里的问题是,在离开窗口并使其visable为false后,当我将ALT-Tab或CMD-Tab切换到窗口时,窗口将不再可见。当最小化或最大化窗口时,它也不会更改可见性状态,但会触发激活和停用事件。不知道这是不是因为苹果机上的MacOSX动画
有没有关于如何解决这两个问题的想法
是否有一个替代的可见窗口来隐藏或显示窗口CSS显示无选项强>
当我最小化窗口导致全屏无限循环时,为什么会触发激活事件
好的,我将此作为Windows 7上的当前工作解决方案发布(不回答问题,只显示当前进度)根据Paul Facklam在下面发布的内容,通过检查displayState normal而不是minimized,并将其与一些附加功能混合,使窗口填充屏幕边界并居中
function centerWindow(instance){
//default bounds of nativeWindow
var applicationBounds = instance.nativeWindow.bounds;
//determine which screen we're located on
var screens = air.Screen.getScreensForRectangle(instance.nativeWindow.bounds);
var screenBounds = (screens.length > 0) ? screens[0].visibleBounds : air.Screen.mainScreen.visibleBounds;
//get initial position
x = (screenBounds.width - applicationBounds.width) / 2;
y = (screenBounds.height - applicationBounds.height) / 2;
//adjust for offset x or offset y (multi monitors)
x = screenBounds.x + x;
y = screenBounds.y + y;
instance.nativeWindow.x = x;
instance.nativeWindow.y = y;
}
function resizeWindow(instance) {
//default bounds of nativeWindow
var applicationBounds = instance.nativeWindow.bounds;
//determine which screen we're located on
var screens = air.Screen.getScreensForRectangle(instance.nativeWindow.bounds);
var screenBounds = (screens.length > 0) ? screens[0].visibleBounds : air.Screen.mainScreen.visibleBounds;
//set the window widths and height to window (this so the aero peak doesn't show a small window)
instance.nativeWindow.width = screenBounds.width;
instance.nativeWindow.height = screenBounds.height;
//then center the window
centerWindow(instance);
}
$(document).ready(function() {
//resize the window on load
resizeWindow(window);
//make window fullscreen
window.nativeWindow.stage.displayState = runtime.flash.display.StageDisplayState.FULL_SCREEN_INTERACTIVE;
//make sure it's visible (if not already)
window.nativeWindow.visible = true;
//if window is activated and display is normal i.e. NOT fullscreen, make it fullscreen
window.nativeWindow.addEventListener(air.Event.ACTIVATE, function() {
if(window.nativeWindow.displayState == 'normal') {
window.nativeWindow.stage.displayState = runtime.flash.display.StageDisplayState.FULL_SCREEN_INTERACTIVE;
}
});
//if window is unfocused then minimize to the taskbar or dock
window.nativeWindow.addEventListener(air.Event.DEACTIVATE, function() {
window.nativeWindow.minimize(); // minimizes the window
});
});
还没有机会在Mac OS X上测试这个,但似乎OS X对激活和停用事件的处理方式有所不同。。。根据我以前做过的实验
可以确认这个问题是在Mac OS X上!而且在窗户上也很好用。因此,dock设置窗口动画的方式似乎会导致事件引发尴尬的循环等
还有人对Mac OS X for AIR上的这些事件有意见吗
更新:我想知道是否使用:
if(event.afterDisplayState==air.NativeWindowDisplayState.MINIMIZED)
将有助于解决OS X问题(今晚我将进行测试)。尝试以下方法:
window.nativeWindow.stage.displayState = runtime.flash.display.StageDisplayState.FULL_SCREEN_INTERACTIVE;
window.nativeWindow.addEventListener(air.Event.ACTIVATE, function() {
if(window.nativeWindow.displayState === air.NativeWindowDisplayState.MINIMIZED) {
window.nativeWindow.stage.displayState = runtime.flash.display.StageDisplayState.FULL_SCREEN_INTERACTIVE;
}
});
window.nativeWindow.addEventListener(air.Event.DEACTIVATE, function() {
window.nativeWindow.minimize();
});
修复OS X问题的一个可能解决方案是执行以下操作:
if (air.Capabilities.os.indexOf("Mac OS") > -1) {
var firstRun = false;
window.nativeWindow.addEventListener(air.Event.DEACTIVATE, function() {
if(firstRun) {
air.trace('DEACTIVATE');
} else {
firstRun = true;
}
});
} else {
window.nativeWindow.addEventListener(air.Event.DEACTIVATE, function() {
air.trace('DEACTIVATE');
});
}
因此,如果使用OSX,它基本上忽略了第一个奇怪的停用调用。。。然后像平常一样处理它。虽然这感觉像一个可怕的丑陋的黑客 但是,当我单击“最小化”时,激活事件将触发,因此窗口将停止/取消最小化,并保持全屏。是否使用crome窗口?哪个操作系统?不,不工作。所发生的是,该应用程序全屏显示,然后最小化弹出窗口(800x600),然后最小化弹出窗口,然后再次最小化。而且它不会强制全屏重新激活。这就像激活和停用事件导致相互调用并导致上面提到的循环…事实上,如果我在代码中添加警报,我会从停用事件开始收到大约20次警报。。。那么在应用程序启动时运行?并从那时起导致主循环。