HTMLScriptElement/HTMLImageElement .src reflected the literal attribute instead of the resolved absolute URL. Loaders that derive their base with new URL(document.currentScript.src).origin threw "Invalid URL" on a relative src and aborted, so the page bundle never loaded and the DOM stayed empty (issue #255). getAttribute("src") still returns the literal.
This commit is contained in:
1 parent
5135e3cb4d
commit
c1e0b0fb5a
1 file changed
+10
-1
Vendored
+10
-1
@@ -1440,7 +1440,16 @@ class Element extends Node {
|
|||||||
get hash() { const u = (this.localName === 'a' || this.localName === 'area') ? _elemHrefURL(this) : null; return u ? u.hash : ''; }
|
get hash() { const u = (this.localName === 'a' || this.localName === 'area') ? _elemHrefURL(this) : null; return u ? u.hash : ''; }
|
||||||
set hash(v) { if (this.localName === 'a' || this.localName === 'area') _setElemHrefPart(this, 'hash', v); }
|
set hash(v) { if (this.localName === 'a' || this.localName === 'area') _setElemHrefPart(this, 'hash', v); }
|
||||||
get origin() { const u = (this.localName === 'a' || this.localName === 'area') ? _elemHrefURL(this) : null; return u ? u.origin : ''; }
|
get origin() { const u = (this.localName === 'a' || this.localName === 'area') ? _elemHrefURL(this) : null; return u ? u.origin : ''; }
|
||||||
get src() { return this.getAttribute("src") || ""; }
|
get src() {
|
||||||
|
// IDL reflection: HTMLScriptElement/HTMLImageElement/etc. `.src` returns the
|
||||||
|
// resolved absolute URL, not the literal attribute. Loaders that compute their
|
||||||
|
// base via `new URL(document.currentScript.src).origin` break on a relative
|
||||||
|
// value (issue #255). getAttribute("src") still returns the literal.
|
||||||
|
const v = this.getAttribute("src");
|
||||||
|
if (!v) return "";
|
||||||
|
try { return new URL(v, globalThis.location?.href || "about:blank").href; }
|
||||||
|
catch (e) { return v; }
|
||||||
|
}
|
||||||
set src(v) {
|
set src(v) {
|
||||||
this.setAttribute("src", v);
|
this.setAttribute("src", v);
|
||||||
if (this.localName === 'iframe' && v && v !== 'about:blank') {
|
if (this.localName === 'iframe' && v && v !== 'about:blank') {
|
||||||
|
|||||||
Reference in new issue
Block a user