Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在AdobeAIR HTML应用程序中强制全屏显示_Javascript_Air_Adobe - Fatal编程技术网

Javascript 在AdobeAIR HTML应用程序中强制全屏显示

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.

对于我的HTML Adobe AIR应用程序,我在启动时运行以下命令以全屏显示窗口:

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次警报。。。那么在应用程序启动时运行?并从那时起导致主循环。