
Safari 27 è uscito il 14 settembre 2026, insieme a iOS 27, iPadOS 27 e macOS 27. Le note di rilascio di Apple contengono una riga che conta più di quanto sembri: lo stesso Safari arriva anche su macOS 26 e su macOS Sequoia. Non riguarda quindi solo chi è passato al nuovo sistema operativo. Raggiunge chiunque accetti un aggiornamento di Safari su un Mac di due anni fa, e ogni iPhone che si aggiorna da solo durante la notte, cioè la maggior parte di essi.
Entro la fine della settimana buona parte di chi visita il sito da iPhone userà un browser diverso da quello di venerdì scorso, e quasi nessuno se ne accorgerà. Questo è ciò che trasforma il rilascio di un browser in un evento generatore di segnalazioni di bug. La pagina non è cambiata. Le segnalazioni su di essa sì.
L’annuncio della beta al WWDC parlava di 58 nuove funzionalità, 525 correzioni e 4 elementi deprecati. La maggior parte di questi cambiamenti è invisibile a chiunque non scriva CSS. Una manciata modifica invece il comportamento di una pagina in modo visibile per l’utente, ed è proprio questa manciata ad arrivare sotto forma di ticket. Eccoli, con l’indicazione di cosa fare per ciascuno.
Lo scroll anchoring è attivo, e sposta un bug invece di eliminarlo
Per anni Safari è stato il browser in cui la pagina saltava. Un’immagine finiva di caricarsi sopra il paragrafo che si stava leggendo, oppure un banner si inseriva in alto, e tutto scivolava verso il basso sotto il dito. Chrome e Firefox compensano questo comportamento da anni; ora lo fa anche Safari. Quando un contenuto viene inserito o rimosso sopra la viewport, il browser corregge la posizione di scroll in modo che ciò che si stava leggendo resti dove si trovava.
Questo chiude un’intera famiglia di segnalazioni del tipo “la pagina salta mentre sto leggendo”, ma solo per chi usa Safari 27. Chi è ancora su Safari 26 continuerà a inviarle, ed è questa la prima ragione per cui la versione conta nel ticket.
La seconda ragione è la trappola. Molti siti hanno combattuto il salto per conto proprio: misurando l’altezza di ciò che sta per caricarsi e spostando la posizione di scroll di altrettanto quando arriva. Quel codice era corretto venerdì. Oggi, su Safari 27, il browser applica per primo la stessa correzione, e quella del sito si somma sopra. La pagina ora salta nella direzione opposta, esattamente della quantità che il sito era abituato a correggere. Una segnalazione che dice “la pagina salta verso l’alto quando si caricano le immagini, prima non succedeva” è proprio questo bug, e la risposta onesta è che la correzione del sito è ora essa stessa la causa.
La via d’uscita standard è la stessa in ogni browser: overflow-anchor: none sul contenitore
disattiva l’ancoraggio del browser per quella regione, lasciando in funzione solo la
compensazione del sito. Oppure, meglio ancora, eliminare la compensazione e lasciare che se ne
occupino tutti e tre i motori di rendering.
La stessa sezione delle note corregge qualcosa di più circoscritto, ma che produceva
segnalazioni molto confuse su iOS: chiamare scrollTo durante uno scroll con inerzia
interrompeva lo scroll di colpo. Una pagina che portava l’utente in un punto e poi sembrava
“afferrare” lo schermo era spesso questo. Corretto nella 27, presente nella 26.
Otto correzioni alla Content Security Policy, e due generano segnalazioni
La sezione Security delle note di rilascio elenca otto correzioni alla Content Security Policy. Sei rendono Safari più rigoroso o più corretto, in modi che riguardano per lo più pagine già leggermente scorrette. Le altre due si faranno notare su un endpoint di report senza alcuna modifica lato sito.
Le violazioni di frame-ancestors in una policy report-only venivano scartate invece di
essere segnalate. Ora vengono inviate. Un sito che usa Content-Security-Policy-Report-Only
con frame-ancestors, il modo in cui la maggior parte dei team scopre chi lo sta incorporando
prima di imporre qualsiasi restrizione, è rimasto cieco a Safari per tutto il tempo in cui
quella policy è esistita. Da questa settimana le segnalazioni arrivano. Il volume può sembrare
un attacco. In realtà è arretrato accumulato.
Gli import di moduli JSON (import data from "./x.json" with { type: "json" }) venivano
verificati rispetto a script-src. La specifica indica connect-src, e Safari 27 ora si
allinea. Una policy che consentiva l’origine del JSON sotto script-src ma non sotto
connect-src inizia a bloccare quegli import, e una policy che faceva il contrario inizia a
consentirli. In entrambi i casi il comportamento della pagina cambia su una versione del
browser e non su quella precedente.
- Debole
- Il nostro endpoint di report CSP si è riempito nella notte. Qualcuno ci sta incorporando ovunque.
- Migliore
- Le violazioni report-only di frame-ancestors provenienti da Safari 27.0 hanno iniziato ad arrivare il 15 settembre. Safari 26 le scartava, quindi si tratta dell'incorporamento già esistente che non riuscivamo a vedere, non di un nuovo incorporamento.
Altre due voci della stessa lista meritano una frase, perché trasformano una pagina rotta in
una funzionante, ed è anche questo un cambiamento che qualcuno noterà. Gli elementi <object>
che caricano immagini venivano bloccati da img-src e ora non più. E 'self' non
corrispondeva alle origini degli script in documenti con origine opaca, come un iframe
sandboxed, per cui alcuni script che avrebbero dovuto essere eseguiti non lo erano. Entrambi i
casi sono stati corretti. Se questa settimana una pagina ha iniziato a funzionare in modo
misterioso sul telefono di qualcuno, il merito potrebbe non essere dell’ultimo deploy.
Select con stile personalizzato, dove prima erano semplici
appearance: base-select arriva in Safari 27, insieme all’elemento <selectedcontent>.
Qualsiasi sito che avesse già distribuito per Chrome un <select> personalizzato, protetto da
un controllo di feature detection, ora riceve la versione personalizzata anche su Safari. È il
risultato voluto, e di solito è un bene. È anche la prima volta che quel CSS viene eseguito su
Safari, e la prima volta che qualcuno lo vede su un iPhone alla larghezza reale, con la
tastiera reale, nella modalità scura reale. È lecito aspettarsi qualche segnalazione
occasionale, ed è meglio considerare “il menu a tendina ha un aspetto diverso sul mio telefono
da ieri” come un dato accurato, non come confusione.
Cookie Secure su localhost
Sepolta nella sezione Networking: Safari ora rispetta i cookie Secure sugli host di loopback.
Tutti gli altri motori lo fanno da anni, ed è per questo che un flusso di login poteva
funzionare in Chrome su localhost, fallire solo in Safari, e far perdere a qualcuno un’ora a
controllare i certificati. Quell’ora specifica ora è risparmiata. Cosa sia davvero
localhost
racconta il resto del motivo per cui “funziona su localhost” dimostra meno di quanto sembri.
Cosa significa tutto questo per la segnalazione
Ogni punto elencato sopra ha la stessa forma: la stessa pagina, che si comporta in un modo su Safari 26.6 e in un altro su Safari 27.0, nello stesso giorno, per due persone sedute una accanto all’altra. Questa forma è diagnosticabile solo se la segnalazione indica da quale versione proviene.
Nella maggior parte dei casi non lo fa. “Safari sul mio iPhone” è quello che scrive la gente, e non è colpa loro: su un iPhone la versione di Safari coincide con la versione di iOS, si trova in Impostazioni sotto Generali e Info, e l’aggiornamento è avvenuto mentre dormivano. Quindi la prima domanda da fare, prima ancora dei passaggi per riprodurre il bug, deve essere la versione, e il modo più economico per ottenerla è una pagina che la legge da sola. La nostra si trova su /tools/user-agent: mostra browser e versione, sistema operativo, dimensione dello schermo e schema di colore, e chi segnala il bug può incollare tutto in un colpo solo. Funziona in qualsiasi browser, perché deve funzionare per forza.
Un limite onesto dalla nostra parte. Session Replay è un’estensione per Chrome. Non può catturare una segnalazione da Safari, e un bug che si manifesta solo su Safari 27 non comparirà su una pagina aperta in Chrome. Ciò che invece fa è risolvere rapidamente l’altra metà della domanda: si apre la stessa pagina in Chrome, la si cattura, e in un minuto si sa se il guasto sta nella pagina o nel motore di rendering. È tutto il cross-browser testing nella pratica: tre motori, e sapere quale si sta osservando in quel momento.
Per la metà relativa a Safari, con un Mac a disposizione, Web Inspector via cavo resta la strada da seguire, e come ispezionare un elemento su iPhone spiega come fare passo dopo passo. Il Web Inspector di Safari 27 ora mostra ogni richiesta di una catena di redirect singolarmente, una piccola grazia quando il bug è un ciclo di login.
Session Replay
Estensione gratuita per Chrome. Un clic sulla pagina che si comporta in modo anomalo cattura screenshot, console e log di rete, e restituisce un link da incollare nel ticket.
Il resto del rilascio, in breve
Nelle note ci sono ancora alcune cose che uno sviluppatore vorrà sapere che esistono.
Gli stream sono diventati più facili da consumare. for await...of su un ReadableStream,
ReadableStream.from() per costruirne uno a partire da qualsiasi iterabile, e la possibilità
di trasferire gli stream tramite postMessage(). Il codice scritto per Chrome che si
appoggiava a una di queste funzionalità ora gira su Safari senza bisogno di polyfill.
Gli errori delle web extension vengono segnalati. Le eccezioni non gestite e i rifiuti di promise non gestiti negli script di una web extension per Safari ora emergono, mentre prima sparivano nel nulla. Chi mantiene un porting per Safari di un’estensione Chrome scoprirà probabilmente errori presenti già da tempo.
Arriva la static routing API per i service worker, che permette a un service worker di dichiarare in anticipo quali richieste lo bypassano, così il percorso di rete per un asset statico non deve più attendere l’avvio del worker.
Quattro rimozioni in SVG. SVGLocatable, SVGTransformable, nearestViewportElement,
farthestViewportElement e viewTarget sono scomparsi, insieme a
glyph-orientation-horizontal. Vecchi strumenti SVG che usavano una di queste proprietà
genereranno un errore su Safari 27 e non sulla 26, un’altra segnalazione legata alla versione
da riconoscere.
Cosa portarsi a casa
Un aggiornamento del browser è una modifica alla produzione che nessuno del team ha distribuito, revisionato o può annullare, e raggiunge una frazione diversa di utenti ogni giorno per una settimana. L’unica difesa è sapere da quale versione proviene ciascuna segnalazione, così che “è iniziato ieri” possa essere collegato a “Safari 27 è uscito ieri” invece che all’ultimo deploy.
Le note ufficiali di Apple restano il riferimento, e sono lunghe: Safari 27 Release Notes.