00
:
00
:
00
:
00
Corso SEO AI - Usa SEOEMAIL al checkout per il 30% di sconto

Proprietà e Opzioni delle Finestre

Le BrowserWindow di Electron offrono un ampio set di opzioni per personalizzare l’aspetto e il comportamento delle finestre. Questa guida copre tutte le opzioni principali organizzate per categoria.

Dimensioni e Vincoli

const win = new BrowserWindow({
  // Dimensioni iniziali
  width: 1200,
  height: 800,

  // Dimensioni minime
  minWidth: 400,
  minHeight: 300,

  // Dimensioni massime
  maxWidth: 1920,
  maxHeight: 1080,

  // Usa le dimensioni per il contenuto (non per la finestra intera)
  useContentSize: true,
});

useContentSize è particolarmente utile: se impostato a true, width e height si riferiscono alla dimensione del contenuto web, escludendo la barra del titolo e i bordi della finestra.

Posizionamento

const win = new BrowserWindow({
  x: 100,             // Posizione X dallo schermo
  y: 100,             // Posizione Y dallo schermo
  center: true,       // Centra sullo schermo (ignora x/y)
});

Se non specifichi x, y o center, la finestra verrà posizionata secondo le regole del sistema operativo.

Comportamento della Finestra

const win = new BrowserWindow({
  resizable: true,         // L'utente può ridimensionare
  movable: true,           // L'utente può spostare
  minimizable: true,       // Pulsante minimizza attivo
  maximizable: true,       // Pulsante massimizza attivo
  closable: true,          // Pulsante chiudi attivo
  focusable: true,         // La finestra può ricevere focus
  alwaysOnTop: false,      // Sempre sopra le altre finestre
  fullscreen: false,       // Avvia a schermo intero
  fullscreenable: true,    // Permetti schermo intero
  skipTaskbar: false,      // Nascondi dalla barra delle applicazioni
});

Aspetto della Barra del Titolo

titleBarStyle

// Stile predefinito del sistema operativo
new BrowserWindow({ titleBarStyle: 'default' });

// Barra del titolo nascosta (contenuto sotto i controlli della finestra)
new BrowserWindow({ titleBarStyle: 'hidden' });

// macOS: Pulsanti semaforo posizionati più in basso
new BrowserWindow({ titleBarStyle: 'hiddenInset' });

// macOS: Pulsanti visibili solo al hover
new BrowserWindow({ titleBarStyle: 'customButtonsOnHover' });

titleBarOverlay (Windows/Linux)

Per finestre con barra del titolo personalizzata ma controlli nativi:

const win = new BrowserWindow({
  titleBarStyle: 'hidden',
  titleBarOverlay: {
    color: '#1e1e2e',           // Colore di sfondo dei controlli
    symbolColor: '#cdd6f4',     // Colore delle icone (chiudi, minimizza, ecc.)
    height: 40,                  // Altezza dell'overlay
  },
});

Trasparenza e Aspetto

const win = new BrowserWindow({
  backgroundColor: '#1e1e2e',    // Colore di sfondo (evita flash bianco)
  opacity: 1.0,                   // Opacità (0.0 - 1.0)
  transparent: false,             // Finestra trasparente
  hasShadow: true,                // Ombra della finestra
  roundedCorners: true,           // Angoli arrotondati (macOS)

  // Effetto vibrancy (macOS)
  vibrancy: 'under-window',
  // 'appearance-based', 'light', 'dark', 'titlebar', 'selection',
  // 'menu', 'popover', 'sidebar', 'under-window', 'under-page'

  // Effetto sfondo (Windows 11)
  backgroundMaterial: 'auto',
  // 'auto', 'none', 'mica', 'acrylic', 'tabbed'
});

Configurazione Completa per Piattaforma

App Moderna con Title Bar Personalizzata

function createWindow() {
  const options = {
    width: 1200,
    height: 800,
    minWidth: 600,
    minHeight: 400,
    show: false,
    backgroundColor: '#1e1e2e',
    webPreferences: {
      preload: path.join(__dirname, 'preload.js'),
      contextIsolation: true,
      nodeIntegration: false,
    },
  };

  // Configurazione per piattaforma
  if (process.platform === 'darwin') {
    options.titleBarStyle = 'hiddenInset';
    options.trafficLightPosition = { x: 15, y: 15 };
  } else {
    options.titleBarStyle = 'hidden';
    options.titleBarOverlay = {
      color: '#1e1e2e',
      symbolColor: '#cdd6f4',
      height: 36,
    };
  }

  const win = new BrowserWindow(options);

  win.once('ready-to-show', () => {
    win.show();
  });

  win.loadFile('index.html');
  return win;
}

Finestra Tipo Splash Screen

function createSplashWindow() {
  return new BrowserWindow({
    width: 400,
    height: 300,
    frame: false,              // Nessun bordo
    transparent: true,         // Sfondo trasparente
    alwaysOnTop: true,         // Sopra le altre finestre
    resizable: false,
    movable: false,
    skipTaskbar: true,         // Non mostrare nella taskbar
    webPreferences: {
      preload: path.join(__dirname, 'preload.js'),
    },
  });
}

Finestra Tipo Widget/Overlay

function createWidgetWindow() {
  return new BrowserWindow({
    width: 300,
    height: 200,
    frame: false,
    alwaysOnTop: true,
    resizable: false,
    skipTaskbar: true,
    focusable: false,          // Non cattura il focus
    transparent: true,
    webPreferences: {
      preload: path.join(__dirname, 'preload.js'),
    },
  });
}

WebPreferences in Dettaglio

const win = new BrowserWindow({
  webPreferences: {
    // Sicurezza
    preload: path.join(__dirname, 'preload.js'),
    nodeIntegration: false,          // Accesso Node.js nel renderer
    contextIsolation: true,          // Isolamento del contesto
    sandbox: true,                    // Sandboxing del processo
    webSecurity: true,               // Politiche same-origin

    // Funzionalità
    devTools: true,                   // Chrome DevTools
    spellcheck: true,                 // Controllo ortografico
    defaultEncoding: 'utf-8',         // Encoding
    autoplayPolicy: 'no-user-gesture-required',

    // Zoom
    zoomFactor: 1.0,                  // Zoom iniziale

    // Immagini e media
    images: true,                     // Caricamento immagini
    webgl: true,                      // Accelerazione WebGL
  },
});

Ottenere Informazioni sulla Finestra

// Dimensioni
const [width, height] = win.getSize();
const [cWidth, cHeight] = win.getContentSize();
const bounds = win.getBounds(); // { x, y, width, height }

// Stato
win.isMaximized();
win.isMinimized();
win.isFullScreen();
win.isVisible();
win.isFocused();
win.isDestroyed();
win.isResizable();
win.isMovable();

// Titolo
win.getTitle();

// ID
win.id;       // Numero identificativo univoco