Apple on Thursday released Safari Technology Preview 114, the latest version of their developer preview web browser. The preview version of Apple’s popular browser offers developers and other interested users the ability to try out features that may or may not, debut in future public release versions of Safari.
Release 114 includes bug fixes and performance improvements for Web Inspector, JavaScript, Date and Time Inputs, Web Audio, MediaRecorder, Paint Timing, WebGL, CSS, Web API, Lazy Loading, Media, WebRTC, Rendering, Text Rendering, Scrolling, Back-Forward Cache, and Storage Access API.
The current Safari Technology Preview release is built on the new Safari 14 update included in macOS Big Sur.
Release 114
Web Inspector
- Elements Tab
- Changed to grey out properties that aren’t used or don’t apply
- Changed to hide non-inheritable properties when viewing inherited rules
- Changed to not show inline swatches for properties that aren’t used or don’t apply
- Sources Tab
- Changed to allow event breakpoints to be configured
- Changed to evaluate breakpoint conditions before incrementing the ignore count
- Changed to allow DOM breakpoints to be configured
- Changed to allow special JavaScript breakpoints to be configured
- Changed to allow URL breakpoints to be configured
- Network Tab
- Fixed WebSockets to be reported as type websocket
- Fixed issue where response content was not shown for 304 responses from XHR requests
- Timelines Tab
- Fixed duplicate “Timeline Recording 1” on open
- Fixed re-enabling the JavaScript Allocations timeline to show previously captured heap snapshots in the table
- Fixed the record button disappearing when interface is narrow
- Fixed the Stop Recording button to actually stop the recording
- Audit Tab
- Allow audits to be created and edited in Edit mode in Web Inspector
- Miscellaneous
- Fixed issue where the docking buttons wouldn’t work when docked if the window is too small
JavaScript
- Added Intl.DateTimeFormat dateStyle and timeStyle
- Added Intl.Segmenter
- Added a syntax error for async function in a single-statement context
- Added Object.getOwnPropertyNames caching and accelerated Object.getOwnPropertyDescriptor
- Aligned legacy Intl constructor behavior to spec
- Applied Intl.DateTimeFormat hour-cycle correctly when timeStyle is used
- Enabled Intl.DisplayNames
- Changed to not allow let [ sequence to appear in an ExpressionStatement context
- Changed to allow new super.property syntax
- Changed to allow new import.meta() syntax
- Changed to use locale-sensitive grouping for grouping options in IntlRelativeTimeFormat
- Implemented Intl.DateTimeFormat dayPeriod
- Implemented Intl Language Tag Parser
- Implemented Intl.DateTimeFormat.prototype.formatRange
- Implemented unified Intl.NumberFormat
- Fixed an invalid early error for object literal method named proto
- Fixed implementation of the class “extends” clause incorrectly using proto for setting prototypes
- Fixed Performance and PerformanceNavigation interfaces missing toJSON operations
- Updated Intl.Collator to take a collation option
- Updated Array.prototype.push to always perform Set in strict mode
- Updated Promise.prototype.finally to perform PromiseResolve
Date and Time Inputs
- Added editing to <input type=”datetime-local”>
- Updated date inputs to contain editable components
- Updated date picker appearance to match system date pickers
- Updated date picker when the inner control is edited
- Updated date pickers to respect the document’s color scheme
- Updated date/time inputs to focus the next editable component when entering a separator key
- Updated date/time inputs to preserve focus on value change
- Updated date/time inputs to not use user-specified formats to prevent fingerprinting
Web Audio
- Added AudioParam.automationRate attribute
- Added proper support for AudioContextOptions.sampleRate
- Allowed direct creation of replacement codec
- Changed AudioParam.value setter to call setValueAtTime(value, now)
- Changed AudioParam.linearRampToValueAtTime() formula to match specification
- Changed AudioBufferSourceNode to use final values for playbackRate and detune
- Fixed AnalyserNode.getFloatFrequencyData() to fill array with -Infinity when input is silent
- Fixed AudioBufferSourceNode.start() behavior when the offset is past the end of the buffer
- Fixed AudioBufferSourceNode.start() ignoring when parameter when the pitch rate is 0
- Fixed AudioContext not rendering until an AudioNode is constructed
- Fixed AudioDestinationNode.maxChannelCount always returning 0
- Fixed AudioParam.linearRampToValueAtTime() and exponentialRampToValueAtTime() having no effect when there is no preceding event
- Fixed BiquadFilterNode.getFrequencyResponse() to return NaN for out-of-bounds frequencies
- Fixed the types of Panner.setPosition() and setOrientation() parameters to not be unrestricted float
- Dropped non-standard AudioBuffer.gain
- Made AudioParam.cancelScheduledValues() standards compliant
- Improved interpolation algorithm in OscillatorNode
- Introduced StereoPannerNode Interface
- Stopped performing “de-zippering” when applying gain
MediaRecorder
- Enabled MediaRecorder by default on macOS
- End of media capture should not be reported before 3 seconds of the start of capture
- MediaRecorder timeslice parameter causing internal error on longer videos
Paint Timing
- Enabled paint timing by default
WebGL
- Enabled WebGL2 by default
- Added WebGL and WebGL2 context support to OffscreenCanvas
- WebGL goes in a bad state where glContext.createProgram() returns null
CSS
- Fixed text-transform inheritance to ::marker
- Changed to set available column space before grid items prelayout
- Added support for flow-relative shorthand and offset properties
- Changed to allow indefinite size flex items to be definite with respect to resolving percentages inside them
- Changed to not skip flexboxes with auto height for percentage computations in quirks mode
- Changed to use min-content size for intrinsic maximums resolution
- Fixed min-height: auto not getting applied to nested flexboxes
- Fixed :visited color taken on a non-visited link when using CSS variables
- Fixed CSS revert to serialize as “revert”, not “Revert”
- Updated to safely handle overly-long CSS variable values
Web API
- Aligned length properties of function prototypes with specificcations
- Updated ReadableStream.pipeTo implementation to match specifications
- Updated Web Share API to prevent non-HTTP(S) URLs
- Aligned ISO-8859-{3,6,7,8,8-I} and windows-{874,1253,1255,1257} encodings with specifications
- Changed XML documents in iframes to not inherit encoding from the parent frame
- Changed Element to not set an attribute inside its constructor
- Changed new URL(“#”) to throw an error
- Fixed consecutive requestAnimationFrame callbacks that may get passed the same timestamp
- Fixed XHR.timeout getting affected by long tasks
- Fixed taking too long to fetch images from memory cache
- Implemented encodeInto() TextEncoder method
- Updated the URL fragment percent encode set
Lazy Loading
- Implemented lazy iframe loading
- Fixed lazy image load painting
Media
- Fixed the PiP window getting closed when the video element is removed from the DOM
- Fixed an HDCP error for all streams on Netflix
- Fixed <video> element preventing screen from sleeping even after playback finishes
WebRTC
- Added RTCRtpSynchronizationSource.rtpTimestamp
- Exposed RTCPeerConnection.restartIce
- Safari is not able to hear audio when using WebRTC in multiple tabs
Rendering
- Fixed animations invalidating too often
- Fixed flickering on sedona.dev
- Fixed the cut off scrollbar on Facebook posts with lots of comments has cut off scrollbar that couldn’t scroll to the bottom
- Changed to handle fonts that lie about being monospaced
- Fixed programmatic selection of text in a text field that causes the highlight overlay to spill out
- Fixed overflow: scroll rubber-banding getting interrupted by post-layout scrolling
- Fixed a flash when closing a webpage
Text Rendering
- Changed letter-spacing to disable ligatures
Scrolling
- Fixed vertical scrolling getting stuck when a horizontal scroller is under the mouse
- Fixed select element scrolling after scrolling the page
Back-Forward Cache
- Added support for third-party domains to get stored for back-forward navigations
Storage Access API
- Allowed requests for storage access from nested iframes
The preview is available for both macOS Catalina and macOS Big Sur.
While the preview is intended for use by developers and advanced users, in order to provide Apple with feedback on the development of the Safari browser, it can be run side-by-side with the release version of Safari. The app doesn’t require a developer account to download and install. For more information, visit the Safari Technology Preview website.