javascript - 在 Adob​​e AIR HTML 应用程序中强制全屏显示

标签 javascript air adobe

对于我的 HTML Adob​​e 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;

});

因此,当窗口最小化或未聚焦然后重新聚焦时,窗口将全屏显示,并且永远不会以较小的尺寸显示窗口。

但是,当我单击最小化时,ACTIVATE 甚至会被触发,因此窗口无法最小化。

有什么想法吗?或者如何解决这个问题?我注意到,如果我注释掉该行,当我在全屏模式下最小化时,它首先使窗口“窗口化”,例如在最小化之前,将 XML 文件中的设置大小设置为 800x600...所以想知道这是否是问题所在?它实际上通过执行该步骤进入最小化模式来激活窗口。

对于确保应用程序从最小化状态恢复时进入全屏还有其他建议吗?

<小时/>

第二个问题是使窗口在事件或停用时可见和不可见,使用:

window.nativeWindow.addEventListener(air.Event.ACTIVATE, function() {

    window.nativeWindow.visible = true;

});

window.nativeWindow.addEventListener(air.Event.DEACTIVATE, function() {

    window.nativeWindow.visible = false;

});

这个想法是,由于应用程序处于全屏状态,如果用户使用 Tab 键离开它,或者最小化窗口,它应该将其隐藏,以便在其他窗口后面看不到它(因为 Adob​​e AIR 使用 Flash Player实现全屏)

这里的问题是,当我离开窗口并使其可见为假后,当我用 ALT-Tab 或 CMD-Tab 组合键切换到窗口时,该窗口再也不会变得可见。最小化或最大化窗口时,它也不会更改可见性状态,但会触发激活和停用事件。想知道这是否是因为 Mac OS X 动画最小化所致?

关于如何解决这两个问题有什么想法吗?

是否有替代可见的方法来隐藏或显示窗口? CSS Display None 不是一个选项!

为什么当我最小化窗口时会触发激活事件,导致全屏无限循环?

<小时/>

好的,所以我将其发布为 Windows 7 上的当前工作解决方案(不回答问题,仅显示当前进度),基于 Paul Facklam 在下面发布的内容,通过检查 displayState 正常而不是最小化并将其与一些附加功能混合以使窗口填充屏幕边界并将其居中。

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 似乎确实以不同的方式处理 ACTIVATE 和 DEACTIVATE 事件。

可以确认此问题出现在 Mac OS X 上!并且在 Windows 上运行良好。因此,码头动画窗口的方式似乎会导致事件笨拙地触发,从而导致循环等。

还有其他人在 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();
});

关于javascript - 在 Adob​​e AIR HTML 应用程序中强制全屏显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23309362/

相关文章:

javascript - 有没有办法在 JS 变量上设置断点?

javascript - Angular 简单 JSON 请求

javascript - 获取插入到 Set 中的最后一个值

javascript - 为什么 jQuery UI 布局在 Adob​​e AIR 中运行得这么慢?

apache-flex - Adobe Flex/as3 : How to implement custom drag-and-drop cursors

javascript - 在 Google Maps Javascript API v3 中一次拖动多个多边形

ios - 两个错误——二进制未针对 iphone 5 优化(错误 90096)和无效代码签名(错误 90163)——提交到 iTunes 时

android - 当手机改变方向时,Air Android 应用程序崩溃

javascript - 如何在 indesign 中要求或包含脚本?

javascript - 任何延迟边缘动画直到可见的方法