fix(facade): use base element to get base href
Previously, calls to getBaseHref used document.baseURI, which defaults to the current path in the absence of a base element in the document. This leads to surprising behavior. With this change, getBaseHref returns null when a base element is not present in the document.
This commit is contained in:
@ -342,8 +342,11 @@ class BrowserDomAdapter extends GenericBrowserDomAdapter {
|
|||||||
return window.location;
|
return window.location;
|
||||||
}
|
}
|
||||||
getBaseHref() {
|
getBaseHref() {
|
||||||
var uri = document.baseUri;
|
var href = getBaseElementHref();
|
||||||
var baseUri = Uri.parse(uri);
|
if (href == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
var baseUri = Uri.parse(href);
|
||||||
return baseUri.path;
|
return baseUri.path;
|
||||||
}
|
}
|
||||||
String getUserAgent() {
|
String getUserAgent() {
|
||||||
@ -360,3 +363,15 @@ class BrowserDomAdapter extends GenericBrowserDomAdapter {
|
|||||||
js.context[name] = value;
|
js.context[name] = value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
var baseElement = null;
|
||||||
|
String getBaseElementHref() {
|
||||||
|
if (baseElement == null) {
|
||||||
|
baseElement = document.querySelector('base');
|
||||||
|
if (baseElement == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return baseElement.getAttribute('href');
|
||||||
|
}
|
||||||
|
@ -263,7 +263,13 @@ export class BrowserDomAdapter extends GenericBrowserDomAdapter {
|
|||||||
}
|
}
|
||||||
getHistory(): History { return window.history; }
|
getHistory(): History { return window.history; }
|
||||||
getLocation(): Location { return window.location; }
|
getLocation(): Location { return window.location; }
|
||||||
getBaseHref(): string { return relativePath(document.baseURI); }
|
getBaseHref(): string {
|
||||||
|
var href = getBaseElementHref();
|
||||||
|
if (isBlank(href)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return relativePath(href);
|
||||||
|
}
|
||||||
getUserAgent(): string { return window.navigator.userAgent; }
|
getUserAgent(): string { return window.navigator.userAgent; }
|
||||||
setData(element, name: string, value: string) { element.dataset[name] = value; }
|
setData(element, name: string, value: string) { element.dataset[name] = value; }
|
||||||
getData(element, name: string): string { return element.dataset[name]; }
|
getData(element, name: string): string { return element.dataset[name]; }
|
||||||
@ -271,6 +277,18 @@ export class BrowserDomAdapter extends GenericBrowserDomAdapter {
|
|||||||
setGlobalVar(name: string, value: any) { global[name] = value; }
|
setGlobalVar(name: string, value: any) { global[name] = value; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
var baseElement = null;
|
||||||
|
function getBaseElementHref(): string {
|
||||||
|
if (isBlank(baseElement)) {
|
||||||
|
baseElement = document.querySelector('base');
|
||||||
|
if (isBlank(baseElement)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return baseElement.attr('href');
|
||||||
|
}
|
||||||
|
|
||||||
// based on urlUtils.js in AngularJS 1
|
// based on urlUtils.js in AngularJS 1
|
||||||
var urlParsingNode = null;
|
var urlParsingNode = null;
|
||||||
function relativePath(url): string {
|
function relativePath(url): string {
|
||||||
|
Reference in New Issue
Block a user