Chrome 64 Beta: stronger pop-up blocker, Resize Observer, and import.meta
Thursday, December 14, 2017
Chrome OS, Linux, Mac, and Windows.
Stronger pop-up blocker
1 out of every 5 user feedback reports submitted on Chrome for desktop mention some type of
unwanted content. Examples include links to third-party websites disguised as play buttons or other
site controls, or transparent overlays on websites that capture all clicks and open new tabs or
Report in Google Search Console to see if any of these abusive experiences have been found on
their site and improve their user experience.
Two types of abusive experiences where a deceptive site control appears to do one thing, but has a different behavior when clicked. One looks like a play button on a video but sends the user to an unwanted download when clicked (left), and the other looks like a close button but instead opens unwanted pop-up windows (right).
Resize Observer
Traditionally, responsive web applications have used CSS media queries or window.onresize to
build responsive components that adapt content to different viewport sizes. However, both of these
are global signals and require the overall viewport to change in order for the site to respond
const ro = new ResizeObserver((entries) => {
for (const entry of entries) {
const cr = entry.contentRect;
console.log('Element:', entry.target);
console.log(`Element size: ${cr.width}px × ${cr.height}px`);
console.log(`Element padding: ${cr.top}px / ${cr.left}px`);
}
});
// Observe one or multiple elements
ro.observe(someElement);
The code snippet above uses the Resize Observer API to observe changes to an element.
import.meta
Developers writing JavaScript modules often want access to host-specific metadata about the
modules that exposes the module URL via import.meta.url. Library authors might want to
access the URL of the module being bundled into the library to more easily resolve resources
relative to the module file as opposed to the current HTML document. In the future, Chrome plans to
add more properties to import.meta.
Other features in this release
Blink > Animation
- The offset-path property can be used to animate an element by specifying the geometry of the path that an element moves along.
Blink>Fonts
- Developers can now use the text-decoration-skip-ink CSS property to control how overlines and underlines are drawn when they cross over a glyph.
Blink>Input
-
Coordinates of PointerEvent with pointerType=mouse are now fractional, resulting in more precise mouse measurements.
Coordinates of PointerEvent with pointerType=mouse are now fractional, resulting in more precise mouse measurements.
Blink>JavaScript
- To improve developer experience, Chrome now supports named captures in regular expressions, allowing developers to assign meaningful names to portions of a string that a regular expression matches.
-
Chrome now supports the Unicode property escapes \p{…} and \P{…} for regular expressions that have the u flag set, allowing developers to create more powerful Unicode-aware regular expressions.
-
To assist with local-aware formatting of strings produced by internationalization formatters, developers can now use Intl.NumberFormat.prototype.formatToParts() to format a number to a list of tokens and their type. Thanks to Igalia for helping make this happen!
Chrome now supports the Unicode property escapes \p{…} and \P{…} for regular expressions that have the u flag set, allowing developers to create more powerful Unicode-aware regular expressions.
To assist with local-aware formatting of strings produced by internationalization formatters, developers can now use Intl.NumberFormat.prototype.formatToParts() to format a number to a list of tokens and their type. Thanks to Igalia for helping make this happen!
Blink>Media
- Matching other browser implementations, Chrome now sets the default preload value for <video> and <audio> elements to metadata in order to reduce bandwidth and resource usage by only loading resource metadata and not the media resource itself.
- Chrome now supports HDR video playback when Windows 10 is in HDR mode, enabling developers to provide users with HDR VP9 Profile 2 10-bit videos.
- To support compatibility with the HTML Spec, Chrome now throws a "NotSupportedError" DOMException when a media element’s playbackRate is set to a value not supported by Chrome, like negative values.
- Chrome now supports the Media Capabilities API in Origin Trials, enabling developers to know whether an audio or video playback will be smooth and power-efficient based on previous performance statistics.
- To match the Media Capture and Streams spec, getUserMedia() returns a rejected Promise with DOMException or OverconstrainedError when there is an error.
Blink>Network
- Developers can now use the cache option to specify the cache mode of a Request.
- Developers can now use Request.prototype.cache to view the cache mode of a Request and determine whether a request is a reload request.
Blink>Permissions API
- To better align with the Permissions API spec, the Permissions API can now be used to query the status of the camera and microphone permissions.
Blink>Scroll
- In Focus Management APIs, developers can now focus an element without scrolling to it by using the preventScroll attribute.
Blink>SVG
- To allow developers to transform and change position of transformed SVG elements, Chrome now supports transform-box for SVG elements. Thanks to Opera for making this happen!
Blink>WebAudio
- AudioWorklet, an API that exposes low-level audio processing capability to support custom AudioNodes, is now available in origin trials and the experimental flag.
Blink>WebRTC
- To align with the WebRTC 1.0 spec, RTCPeerConnection now supports addTrack() for single stream use cases, as well as removeTrack(), getSenders(), ontrack, and a minimal version of the RTCRtpSender interface.
Blink>WindowDialog
- To improve interoperability and end user experience, window.alert() no longer brings a backgrounded tab to the foreground but instead shows the alert when the user switches to the background tab.
UI>Notifications
- Similar to macOS, Chrome notifications sent through the Notifications API or chrome.notifications on Linux are now shown directly by the Linux native notification system.
Deprecations and interoperability improvements
Blink> CSS
- To align with the spec, getMatchedCSSRules has been removed and developers can use the Blink polyfill instead.
Blink> DOM
- Following the deprecation in Chrome 45, elements can no longer host more than one Shadow Root.
Blink> Performance APIs
- To encourage adoption of standardized loading metrics API such as Navigation Timing 2, nextHopProtocol, and Paint Timing API, Chrome is deprecating the non-standardized chrome.loadTimes API.
For a complete list of all features (including experimental features) in this release, see the
Chrome 64 milestone hotlist.
Posted by Charles Harrison, Pop-Up Popping Engineer
Chrome 64 milestone hotlist.