Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
74 changes: 63 additions & 11 deletions microsoft-edge/progressive-web-apps/how-to/handle-urls.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ ms.author: msedgedevrel
ms.topic: conceptual
ms.service: microsoft-edge
ms.subservice: pwa
ms.date: 09/15/2022
ms.date: 08/29/2025
---
# Handle links to a PWA

Expand Down Expand Up @@ -44,23 +44,75 @@ No code is required for automatic link handling to work, but end users can opt-o
<!-- ====================================================================== -->
## Handle links from other origins by using scope extensions

Scope extensions make it possible for a PWA to capture navigation to paths, subdomains, or even sites other than its own scope. This can be useful for PWAs that span multiple domains for localization purposes. For example, a PWA may span `contoso.com`, `contoso.co.uk`, and `contoso.fr`.
Scope extensions make it possible for a Progressive Web App (PWA) to capture navigation to domains, subdomains, or paths other than its own scope. Scope extensions allow web apps that rely on multiple top-level domains, multiple subdomains, or multiple paths to be presented as a single web app.

The manifest of a PWA defines which part of the hosting domain the PWA is scoped to. For example, the `www.contoso.com` domain name may have a PWA defined under `www.contoso.com/app` with its scope set to `/app`. In this case, all the web pages available within the `www.contoso.com/app` path are part of the PWA scope. However, the web pages within the `www.contoso.com/foo` path are not part of the PWA scope. Furthermore, web pages that are available at `bar.contoso.com/app` or `www.contoso.co.uk` are also not part of the PWA scope.
Scope extension can be useful for cases such as PWAs that handle localization by using multiple domains, subdomains, or paths.


<!-- ------------------------------ -->
#### Origin trial
#### PWA scope when not using scope extensions

As of October 17, 2024, the scope extensions feature is an origin trial. For status, see [Web app scope extensions feature](https://chromestatus.com/feature/5746537956114432) at Chrome Platform Status.
The manifest of a PWA defines which part of the hosting domain, such as a specific path, the PWA is scoped to. For example, the `www.contoso.com` domain name may have a PWA defined under the path `www.contoso.com/app`, with its scope set to `/app`.

When the feature can be used in Microsoft Edge and is no longer in origin trial, the feature will be documented in the present article. See [Scope Extensions for Web Apps](https://github.com/WICG/manifest-incubations/blob/gh-pages/scope_extensions-explainer.md), an Explainer in the **manifest-incubations** repo.
In that case, all webpages within the `www.contoso.com/app` path are part of the PWA scope. However, if you don't use scope extensions, the following webpages are not part of that PWA scope:

See also:
* [Use origin trials in Microsoft Edge](../../origin-trials/index.md)
* Webpages at a different domain, such as `www.contoso.co.uk`.
* Webpages at a different subdomain, such as `bar.contoso.com`.
* Webpages at a different path, such as `www.contoso.com/foo`.


<!-- ====================================================================== -->
## See also
<!-- ------------------------------ -->
#### Extending scope to other domains, subdomains, or paths

By using scope extensions, a PWA can span other domains, subdomains, or paths. For example:

A PWA can span the following top-level domains:
* `contoso.com`
* `contoso.co.uk`
* `contoso.fr`

A PWA can span the following subdomains:
* `www.contoso.com`
* `bar.contoso.com`

* [PWAs as URL Handlers](https://web.dev/pwa-url-handler/)
A PWA can span the following paths:
* `www.contoso.com/app`
* `www.contoso.com/foo`


<!-- ------------------------------ -->
#### The `scope_extensions` web app manifest member

The `scope_extensions` web app manifest member enables a web app to extend its scope to other origins.

For example, this web app manifest file resides at the domain `sample-app.com`, and extends the scope to a different domain, `example.com`:

```json
{
"name": "Example app",
"display": "standalone",
"start_url": "/index.html",
"scope_extensions": [
{
"type": "origin",
"origin": "https://example.com"
}
]
}
```

The origins that are listed in the `scope_extensions` member must confirm that they are associated with the web app by hosting a configuration file named `.well-known/web-app-origin-association`. The configuration file must list the web app's origin.

For example, this `.well-known/web-app-origin-association` configuration file resides at the domain `example.com`, and lists the web app's origin as the domain `sample-app.com`:

```json
{
"https://sample-app.com/": {
"scope": "/"
}
}
```

See also:
* [scope_extensions](https://developer.mozilla.org/docs/Web/Progressive_web_apps/Manifest/Reference/scope_extensions) at MDN.
* [Scope Extensions for Web App Manifest](https://github.com/WICG/manifest-incubations/blob/gh-pages/scope_extensions-explainer.md)
4 changes: 4 additions & 0 deletions microsoft-edge/toc.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,10 @@
href: ./web-platform/release-notes/index.md
displayName: what's new, announcements

- name: Microsoft Edge 141
href: ./web-platform/release-notes/141.md
displayName: Microsoft Edge 141 web platform release notes (Oct. 2025) # page title

- name: Microsoft Edge 140
href: ./web-platform/release-notes/140.md
displayName: Microsoft Edge 140 web platform release notes (Sep. 2025) # page title
Expand Down
12 changes: 0 additions & 12 deletions microsoft-edge/web-platform/release-notes/138.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,6 @@ To stay up-to-date and get the latest web platform features, download a preview
* [Predictable reported storage quota](#predictable-reported-storage-quota)
* [`pushsubscriptionchange` event upon resubscription](#pushsubscriptionchange-event-upon-resubscription)
* [Speculation rules: `target_hint` field](#speculation-rules-target_hint-field)
* [Strict Same-origin policy for Storage Access API](#strict-same-origin-policy-for-storage-access-api)
* [Viewport Segments Enumeration API](#viewport-segments-enumeration-api)
* [Web app scope extensions](#web-app-scope-extensions)
* [Removed features](#removed-features)
Expand Down Expand Up @@ -266,17 +265,6 @@ See also:
* [Speculation Rules API](https://developer.mozilla.org/docs/Web/API/Speculation_Rules_API) at MDN.


<!-- ---------- -->
###### Strict Same-origin policy for Storage Access API

The Storage Access API now follows the Same-origin policy.

By default, using `document.requestStorageAccess()` in a frame only attaches cookies to the requests that are made to the iframe's origin. The `CookiesAllowedForUrls` policy and storage access headers can still be used to unblock cross-site cookies.

See also:
* [Storage Access API](https://developer.mozilla.org/docs/Web/API/Storage_Access_API) at MDN.


<!-- ---------- -->
###### Viewport Segments Enumeration API

Expand Down
40 changes: 1 addition & 39 deletions microsoft-edge/web-platform/release-notes/139.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ To stay up-to-date and get the latest web platform features, download a preview
* [CSS `font-width` property](#css-font-width-property)
* [Continue running transitions when switching to initial transition value](#continue-running-transitions-when-switching-to-initial-transition-value)
* [CSS `corner-shape` property](#css-corner-shape-property)
* [Support `width` and `height` presentational attributes on nested `<svg>` elements](#support-width-and-height-presentational-attributes-on-nested-svg-elements)
* [Web APIs](#web-apis)
* [`request-close` invoker command](#request-close-invoker-command)
* [Allow more characters in JavaScript DOM APIs](#allow-more-characters-in-javascript-dom-apis)
Expand Down Expand Up @@ -58,19 +57,13 @@ To stay up-to-date and get the latest web platform features, download a preview
<!-- ====================================================================== -->
## Edge DevTools

See [What's New in Microsoft Edge DevTools](../../devtools/whats-new/whats-new.md).
<!-- todo: when it exists in Aug 2025, use instead:
See [What's New in DevTools (Microsoft Edge 139)](../../devtools/whats-new/2025/08/devtools-139.md).
-->


<!-- ====================================================================== -->
## WebView2

See [Release Notes for the WebView2 SDK](../../webview2/release-notes/index.md).
<!-- todo: when exists in Aug 2025, use instead:
For WebView2, see [1.0.n.n](../../webview2/release-notes/index.md#10nnnnnn) in _Release Notes for the WebView2 SDK_ (Aug 2025).
-->
See [1.0.3405.78](../../webview2/release-notes/index.md#10340578) in _Release Notes for the WebView2 SDK_ (Aug 2025).


<!-- ====================================================================== -->
Expand Down Expand Up @@ -134,37 +127,6 @@ See also:
* [Corner Shaping: the corner-shape property](https://drafts.csswg.org/css-borders-4/#corner-shaping) in _CSS Borders and Box Decorations Module Level 4_.


<!-- ---------- -->
###### Support `width` and `height` presentational attributes on nested `<svg>` elements

You can now use the `width` and `height` presentational attributes on nested `<svg>` elements, through both SVG markup and CSS. This approach provides greater flexibility, allowing you to style SVG elements more efficiently within complex designs.

With this feature, the following two HTML code snippets now produce the same output:

```html
<svg width="100px" height="100px">
<svg style="width:50px;height:50px;">
<circle cx="50px" cy="50px" r="40px" fill="green" />
</svg>
</svg>
```

```html
<svg width="100px" height="100px">
<svg width="50px" height="50px">
<circle cx="50px" cy="50px" r="40px" fill="green" />
</svg>
</svg>
```

In the second line:
* The first example uses a `style` attribute that contains width and height values.
* The second example uses separate `width` and `height` attributes.

See also:
* [`<svg>`](https://developer.mozilla.org/docs/Web/SVG/Reference/Element/svg) at MDN.


<!-- ------------------------------ -->
#### Web APIs

Expand Down
28 changes: 2 additions & 26 deletions microsoft-edge/web-platform/release-notes/140.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,14 +31,12 @@ To stay up-to-date and get the latest web platform features, download a preview
* [CSS `width` and `height` support for SVG `<use>` element](#css-width-and-height-support-for-svg-use-element)
* [Support `download` attribute in SVG `<a>` element](#support-download-attribute-in-svg-a-element)
* [Web APIs](#web-apis)
* [`ariaNotify()` API](#arianotify-api)
* [`__Http-` and `__HostHttp-` cookie name prefixes](#__http--and-__hosthttp--cookie-name-prefixes)
* [`overscroll-behavior` propagation from `<html>` to the viewport](#overscroll-behavior-propagation-from-html-to-the-viewport)
* [`min` option for `ReadableStreamBYOBReader.read(view)`](#min-option-for-readablestreambyobreaderreadview)
* [`container` option for `scrollIntoView()`](#container-option-for-scrollintoview)
* [Service worker static routing API timings](#service-worker-static-routing-api-timings)
* [SharedWorker script inherit controllers for Blob URLs](#sharedworker-script-inherit-controllers-for-blob-urls)
* [`restrictOwnAudio` media track constraint](#restrictownaudio-media-track-constraint)
* [Popover ToggleEvent source attribute](#popover-toggleevent-source-attribute)
* [Convert Uint8Array between base64 and hex formats](#convert-uint8array-between-base64-and-hex-formats)
* [`highlightsFromPoint` API](#highlightsfrompoint-api)
Expand All @@ -48,7 +46,7 @@ To stay up-to-date and get the latest web platform features, download a preview
* [Microsoft Edge-only origin trials](#microsoft-edge-only-origin-trials)
* [Web app scope extensions](#web-app-scope-extensions)
* [MS High Contrast Deprecation](#ms-high-contrast-deprecation)
* [AriaNotify API](#arianotify-api-1)
* [AriaNotify API](#arianotify-api)
* [Acquisition Info API](#acquisition-info-api)


Expand All @@ -66,7 +64,7 @@ See [What's New in DevTools (Microsoft Edge 140)](../../devtools/whats-new/2025/

See [Release Notes for the WebView2 SDK](../../webview2/release-notes/index.md).
<!-- todo: when exists in Sep 2025, use instead:
For WebView2, see [1.0.n.n](../../webview2/release-notes/index.md#10nnnnnn) in _Release Notes for the WebView2 SDK_ (Sep 2025).
See [1.0.n.n](../../webview2/release-notes/index.md#10nnnnnn) in _Release Notes for the WebView2 SDK_ (Sep 2025).
-->


Expand Down Expand Up @@ -276,15 +274,6 @@ See also:
#### Web APIs


<!-- ---------- -->
###### `ariaNotify()` API

The `ariaNotify()` API enables your app to directly tell a screen reader what to say when there's a non-user-initiated change in the content of a webpage. In the simplest scenario, you call `ariaNotify("foo")` on the document or on an element.

See also:
* [Creating a more accessible web with Aria Notify](https://blogs.windows.com/msedgedev/2025/05/05/creating-a-more-accessible-web-with-aria-notify/).


<!-- ---------- -->
###### `__Http-` and `__HostHttp-` cookie name prefixes

Expand Down Expand Up @@ -364,19 +353,6 @@ See also:
* [Blob](https://developer.mozilla.org/docs/Web/API/Blob) at MDN.


<!-- ---------- -->
###### `restrictOwnAudio` media track constraint


The new `restrictOwnAudio` media track constraint can help create cleaner screen recordings, such as when the capturing webpage itself is playing audio and you don't want that audio to be included in the capture, to avoid undesirable echo.

By default, when using `getDisplayMedia()` and when the system audio is captured, all audio that's played by the system is captured. If the `restrictOwnAudio` constraint is set, the captured system audio is filtered to exclude audio originating from the document that called `getDisplayMedia()`.

See also:
* [MediaDevices: getDisplayMedia() method](https://developer.mozilla.org/docs/Web/API/MediaDevices/getDisplayMedia) at MDN.
* [MediaTrackConstraints](https://developer.mozilla.org/docs/Web/API/MediaTrackConstraints) at MDN.


<!-- ---------- -->
###### Popover ToggleEvent `source` attribute

Expand Down
Loading