fix(service-worker): registration failed on Safari (#31140)
Since Angular v8, and commit b3dda0e, `parseUrl()` can be called without `relativeTo`, thus `new URL()` can be called with `relativeTo = undefined`. Safari does not like it and the service worker registration fails: ```js new URL('https://angular.io/') // OK new URL('https://angular.io/', undefined) // TypeError ``` Closes #31061 PR Close #31140
This commit is contained in:
parent
e83667ad76
commit
a5dd4edab9
@ -53,7 +53,9 @@ export class Adapter {
|
|||||||
* Extract the pathname of a URL.
|
* Extract the pathname of a URL.
|
||||||
*/
|
*/
|
||||||
parseUrl(url: string, relativeTo?: string): {origin: string, path: string, search: string} {
|
parseUrl(url: string, relativeTo?: string): {origin: string, path: string, search: string} {
|
||||||
const parsed = new URL(url, relativeTo);
|
// Workaround a Safari bug, see
|
||||||
|
// https://github.com/angular/angular/issues/31061#issuecomment-503637978
|
||||||
|
const parsed = !relativeTo ? new URL(url) : new URL(url, relativeTo);
|
||||||
return {origin: parsed.origin, path: parsed.pathname, search: parsed.search};
|
return {origin: parsed.origin, path: parsed.pathname, search: parsed.search};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -186,7 +186,7 @@ export class SwTestHarness implements ServiceWorkerGlobalScope, Adapter, Context
|
|||||||
|
|
||||||
parseUrl(url: string, relativeTo?: string): {origin: string, path: string, search: string} {
|
parseUrl(url: string, relativeTo?: string): {origin: string, path: string, search: string} {
|
||||||
const parsedUrl: URL = (typeof URL === 'function') ?
|
const parsedUrl: URL = (typeof URL === 'function') ?
|
||||||
new URL(url, relativeTo) :
|
(!relativeTo ? new URL(url) : new URL(url, relativeTo)) :
|
||||||
require('url').parse(require('url').resolve(relativeTo || '', url));
|
require('url').parse(require('url').resolve(relativeTo || '', url));
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user