Javascript 在Chrome应用程序中创建窗口在启动时忽略边界?

Javascript 在Chrome应用程序中创建窗口在启动时忽略边界?,javascript,google-chrome-app,pixi.js,Javascript,Google Chrome App,Pixi.js,我使用background.js脚本创建新窗口,但是当我在使用chrome.app.window.create方法时设置边界,并将CreateWindowOptions对象的参数传递给它时,第一次使用该对象,但在重新启动应用程序时忽略该对象 在OSX上,似乎在窗口的outerBounds对象上的create回调之后调用方法setPosition和setSize,然后应用程序将响应我尝试设置的边界。然而,这在Windows10上似乎根本不起作用 我创建的窗口似乎在应用程序关闭时仍然存在。我不知道如

我使用
background.js
脚本创建新窗口,但是当我在使用
chrome.app.window.create
方法时设置边界,并将
CreateWindowOptions
对象的参数传递给它时,第一次使用该对象,但在重新启动应用程序时忽略该对象

在OSX上,似乎在窗口的outerBounds对象上的create回调之后调用方法
setPosition
setSize
,然后应用程序将响应我尝试设置的边界。然而,这在Windows10上似乎根本不起作用

我创建的窗口似乎在应用程序关闭时仍然存在。我不知道如何清除它们,尤其是当用户关闭应用程序并使用菜单或操作系统退出时。有没有办法确保销毁或清除这些窗口,或者强制Chrome应用程序设置我设置的边界而不恢复到以前的状态

我创建的窗口正在运行PixiJS,如果这有什么不同的话。当close事件被触发时,我确实在windows上调用了destroy方法,但这没有影响

以下是我的背景脚本:

(function( global ) {

    "use strict";


    /* ----- VARS ----- */
    var displayInfo;
    var isMultiDisplay;

    var controlDisplayIndex;
    var controlBounds;
    var controlLoaded;
    var controlWindow;

    var gameDisplayIndex;
    var gameBounds;
    var gameLoaded;
    var gameWindow;


    /* ----- CONSTANTS ----- */
    var CONTROL_WIDTH = 1920;
    var CONTROL_HEIGHT = 1080;

    var GAME_WIDTH = 2160;
    var GAME_HEIGHT = 3840;

    var FRAME_OPTIONS = {
        type: "none"
    };


    /* ----- FUNCTIONS ----- */
    function init() {
        console.log( "background.js: init" );
        console.info( "background.js: ", chrome.app.window.getAll() );

        isMultiDisplay = false;

        controlLoaded = false;
        gameLoaded = false;

        loadDisplayInfo();

    };

    function loadDisplayInfo() {
        console.log( "background.js: loadDisplayInfo" );

        chrome.system.display.getInfo( onDisplayInfo );

    };

    function createWindows() {
        console.log( "background.js: createWindows" );

        isMultiDisplay = ( displayInfo.length > 0 );

        if ( isMultiDisplay ) {

            var i = 0;
            var length = 2;

            for ( i; i < length; i++ ) {

                if ( displayInfo[i].isPrimary )
                    controlDisplayIndex = i;
                else 
                    gameDisplayIndex = i;

            }

            gameBounds = {
                height: displayInfo[ gameDisplayIndex ].workArea.height,
                left: displayInfo[ gameDisplayIndex ].workArea.left,
                top: displayInfo[ gameDisplayIndex ].workArea.top,
                width: displayInfo[ gameDisplayIndex ].workArea.width
            };

            controlBounds = {
                height: displayInfo[ controlDisplayIndex ].workArea.height,
                left: displayInfo[ controlDisplayIndex ].workArea.left,
                top: displayInfo[ controlDisplayIndex ].workArea.top,
                width: displayInfo[ controlDisplayIndex ].workArea.width
            };

        } else {

            // This assumes single monitor is in landscape.
            gameBounds = {
                top: displayInfo[0].workArea.top,
                left: displayInfo[0].workArea.left,
                height: displayInfo[0].workArea.height,
                width: Math.floor( displayInfo[0].workArea.height * GAME_WIDTH / GAME_HEIGHT )
            };

            controlBounds = {
                top: displayInfo[0].workArea.top,
                left: displayInfo[0].workArea.left + gameBounds.width,
                width: gameBounds.width,
                height: Math.floor( gameBounds.width * CONTROL_HEIGHT / CONTROL_WIDTH )
            };

        }

        console.info( "Game Bounds:", gameDisplayIndex, gameBounds.left, gameBounds.top, gameBounds.width, gameBounds.height );
        console.info( "Control Bounds:", controlDisplayIndex, controlBounds.left, controlBounds.top, controlBounds.width, controlBounds.height );

        var state = ( isMultiDisplay ) ? "fullscreen" : "normal";

        // Game
        chrome.app.window.create( "window-game.html", {
            id: "gameWindow",
            bounds: gameBounds,
            frame: FRAME_OPTIONS,
            resizable: true,
            state: state
        }, onGameWindowCreated );

        // Control
        chrome.app.window.create( "window-control.html", {
            id: "controlWindow",
            bounds: controlBounds,
            frame: FRAME_OPTIONS,
            resizable: true,
            state: state
        }, onControlWindowCreated );

    };


    /* ----- EVENT LISTENERS ----- */
    function onLaunched() {
        console.log( "background.js: onLaunched" );

        init();

    };

    function onDisplayInfo( info ) {
        console.log( "background.js: onDisplayInfo" );

        displayInfo = info;
        createWindows();

    };

    function onControlWindowCreated( obj ) {
        console.log( "background.js: onControlWindowCreated", obj.id );

        controlLoaded = true;
        controlWindow = obj;

        controlWindow.outerBounds.setPosition( controlBounds.left, controlBounds.top );
        controlWindow.outerBounds.setSize( controlBounds.width, controlBounds.height );

        if ( isMultiDisplay ) controlWindow.fullscreen();

        //console.info( controlWindow.innerBounds.width, controlWindow.innerBounds.height );
        //console.info( controlWindow.outerBounds.width, controlWindow.outerBounds.height );

        controlWindow.onClosed.addListener( onControlWindowClosed );

    };

    function onControlWindowClosed() {
        console.log( "background.js: onControlWindowClosed" );

        controlWindow.onClosed.removeListener( onControlWindowClosed );
        controlWindow.destroy();
        controlWindow = undefined;

    };

    function onGameWindowCreated( obj ) {
        console.log( "background.js: onGameWindowCreated", obj.id );

        gameLoaded = true;
        gameWindow = obj;

        gameWindow.outerBounds.setPosition( gameBounds.left, gameBounds.top );
        gameWindow.outerBounds.setSize( gameBounds.width, gameBounds.height );

        if ( isMultiDisplay ) gameWindow.fullscreen();

        //console.info( gameWindow.innerBounds.width, gameWindow.innerBounds.height );
        //console.info( gameWindow.outerBounds.width, gameWindow.outerBounds.height );

        gameWindow.onClosed.addListener( onGameWindowClosed );

    };

    function onGameWindowClosed() {
        console.log( "background.js: onGameWindowClosed" );

        gameWindow.onClosed.removeListener( onGameWindowClosed );
        gameWindow.destroy();
        gameWindow = undefined;

    };


    /* ----- CALL ----- */
    chrome.app.runtime.onLaunched.addListener( onLaunched );

}( this ));
(功能(全局){
“严格使用”;
/*-----VARS-----*/
var显示信息;
无功显示;
var控制指数;
var控制界;
无功控制负荷;
var控制窗口;
var指数;
var配子界;
var配子加载;
var游戏窗口;
/*-----常数------*/
var控制_宽度=1920;
var控制_高度=1080;
var游戏宽度=2160;
var GAME_高度=3840;
变量帧_选项={
类型:“无”
};
/*-----功能------*/
函数init(){
log(“background.js:init”);
console.info(“background.js:,chrome.app.window.getAll());
isMultiDisplay=false;
可控加载=假;
gameLoaded=false;
loadDisplayInfo();
};
函数loadDisplayInfo(){
log(“background.js:loadDisplayInfo”);
chrome.system.display.getInfo(onDisplayInfo);
};
函数createWindows(){
log(“background.js:createWindows”);
isMultiDisplay=(displayInfo.length>0);
如果(isMultiDisplay){
var i=0;
var长度=2;
对于(i;ivar myWindow;

chrome.app.window.create( "window.html", options, function( obj ) {

    myWindow = obj;

    // Do Stuff with myWindow

} );