news

Safari Technology Preview 242: CSS attr() Level 5, IndexedDB getAllRecords() e closedby su dialog

Safari Technology Preview 242 aggiunge CSS attr() da CSS Values Level 5, IndexedDB getAllRecords() con IDBGetAllOptions, l'attributo closedby su dialog e supporto a RTCRtpReceiver.jitterBufferTarget per WebRTC.

Il 23 aprile Apple ha rilasciato Safari Technology Preview 242 per macOS Tahoe e macOS Sequoia. La release introduce CSS attr() da CSS Values Level 5, l’API getAllRecords() su IndexedDB, l’attributo closedby su <dialog> e supporto a RTCRtpReceiver.jitterBufferTarget per WebRTC. Nessuna singola novità è un cambiamento di rotta, ma l’insieme copre lacune concrete che chi lavora su app web e PWA conosce bene.

CSS attr() con valori tipizzati

La funzione attr() esiste in CSS dal livello 2, ma per anni ha supportato solo valori stringa e solo nella proprietà content. CSS Values Level 5 la estende: si può indicare il tipo atteso (numero, colore, lunghezza, angolo, ecc.) e usare il risultato in qualsiasi proprietà CSS.

.badge {
  width: attr(data-size px);
  background-color: attr(data-color color);
}

Fino a oggi per ottenere lo stesso risultato servivano CSS custom properties impostate via JavaScript o variabili inline style="". Ora il dato può stare nell’HTML e il CSS lo consuma direttamente senza intermediari. Per i componenti che guidano l’aspetto con attributi data-*, è una semplificazione reale.

IndexedDB.getAllRecords() e IDBGetAllOptions

getAllRecords() restituisce in un’unica chiamata un array di oggetti con chiave e valore per ogni record nell’object store. Prima era possibile ottenere solo le chiavi (getAllKeys()) o solo i valori (getAll()), oppure usare un cursor per iterare su entrambi. IDBGetAllOptions aggiunge le opzioni: range di chiavi, direzione (ascending/descending) e count. Per chi usa IndexedDB come cache strutturata o storage locale di liste, questa API riduce in modo significativo il codice ripetitivo e migliora le performance rispetto all’iterazione con cursor.

closedby su dialog

L’attributo closedby su <dialog> controlla come il dialog può essere chiuso:

  • closedby="any" (default): chiudibile premendo Escape o cliccando fuori dall’elemento.
  • closedby="closerequest": chiudibile solo tramite Escape o l’API CloseWatcher.
  • closedby="none": chiudibile solo programmaticamente, tramite .close().

Il valore none è utile per flow che richiedono una scelta esplicita — conferme con dati non salvati, passaggi obbligatori in un wizard, alert che necessitano un’azione dell’utente. Fino a ora per ottenere questo comportamento bisognava intercettare manualmente l’evento keydown per Escape e prevenirne il default. closedby="none" rende il comportamento dichiarativo e più accessibile, perché fa parte del modello nativo del browser invece di essere una sovrascrittura.

RTCRtpReceiver.jitterBufferTarget

RTCRtpReceiver.jitterBufferTarget permette all’app web di indicare al browser il ritardo target del jitter buffer per i flussi RTP in ricezione. Abbassare il valore riduce la latenza a costo di una maggiore sensibilità alle variazioni di rete; alzarlo aumenta la robustezza. È una funzionalità di nicchia, ma concreta per chi costruisce strumenti di videoconferenza o real-time audio/video su Safari.

Altre novità

  • Secure cookies su loopback: i cookie con attributo Secure possono ora essere impostati quando la pagina è servita su localhost o altri host di loopback. È un cambiamento che riguarda lo sviluppo locale: alcune librerie di autenticazione richiedono cookie sicuri anche in development, finora non funzionavano su Safari senza certificato locale.
  • SVG lang e xml:lang: supporto corretto per gli attributi di lingua su elementi SVG.
  • Accessibilità appearance: base-select: migliorato il supporto macOS per elementi <select> personalizzati con appearance: base-select, che era già stato introdotto nelle release precedenti ma presentava problemi con VoiceOver.

Safari Technology Preview 242 si scarica tramite Impostazioni di sistema > Generali > Aggiornamenti software su macOS Tahoe e Sequoia. Le API introdotte qui non sono ancora disponibili in Safari stabile; il percorso verso la release finale dipende dagli ulteriori cicli di revisione interna.

Luca
Luca

Sviluppatore software, utente Apple dal 2012. Scrivo di news e strumenti per chi sviluppa su piattaforme Apple.

Chi sono →