我试图让一个电子应用程序在屏幕上的同一位置重新打开,就像最后一次关闭时一样。
为此,我有一个配置文件,记录窗口关闭时的边界。
function set(settingKey, settingValue) {
nconf.set(settingKey, settingValue);
nconf.save();
};
mainWindow.on('close', function () {
config.set('bounds', mainWindow.getBounds());
});
但是,当我重新启动应用程序并通过指定mainWindow
,x
,y
,width
选项或调用height
来设置setBounds
的位置时:
mainWindow.setBounds(config.get('bounds'));
窗口看起来比以前略低。我发现我得到的y
值没有考虑窗口的标题栏高度。
This question类似,但解决方案导致相同的问题。
我试过了:
mainWindow.getPosition
mainWindow.getContentBounds
加上setContentBounds
electron.screen.getDisplayMatching(mainWindow.getBounds()).bounds
无济于事。前两种方法给出了完全相同的结果。最后一个给{ x: 0, y: 0, width: 1920, height: 1080 }
。
有谁知道如何在电子中获得OS窗口位置?
如果它有帮助,我就在Wayland(Gnome 3.32)。
看起来像Linux上一个长期未解决的错误:
On Linux, returned position of fixed BrowserWindow gets unexpectedly modified
例如,以下内容:
const { app, BrowserWindow } = require ('electron');
let mainWindow = null;
function onAppReady ()
{
let position = [ 200, 100 ];
console.log ('init:', position);
mainWindow = new BrowserWindow ({ x: position[0], y: position[1], width: 800, height: 600, show: false });
console.log ('new:', mainWindow.getPosition ());
mainWindow.loadURL (`file://${__dirname}/index.html`);
mainWindow.on ('ready-to-show', () => {
mainWindow.show ();
console.log ('show:', mainWindow.getPosition ()); });
mainWindow.on ('close', () => { console.log ('close:', mainWindow.getPosition ()); });
mainWindow.on ('closed', () => { app.quit (); });
}
app.on ('ready', onAppReady);
结果是:
Linux Mint:
init: [ 200, 100 ]
new: [ 200, 100 ]
show: [ 201, 125 ]
close: [ 201, 125 ]
Ubuntu的:
init: [ 200, 100 ]
new: [ 200, 100 ]
show: [ 200, 100 ]
close: [ 200, 128 ]