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
} );