mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-12-08 06:09:58 +00:00
The src IDL attribute was previously implemented as an inline getter that returned the raw attribute value. This broke spec semantics and sites like Telegram Web that rely on document.currentScript.src to compute Webpack’s publicPath. According to the HTML Standard: https://html.spec.whatwg.org/multipage/common-dom-interfaces.html#reflecting-content-attributes-in-idl-attributes For URL-reflecting attributes: 1. If contentAttributeValue is null, then return the empty string. 2. Let urlString be the result of encoding-parsing-and-serializing a URL given contentAttributeValue, relative to element’s node document. 3. If urlString is not failure, then return urlString. This patch moves the getter to HTMLScriptElement.cpp and implements these steps.
22 lines
No EOL
818 B
HTML
22 lines
No EOL
818 B
HTML
<!DOCTYPE html>
|
|
<script src="include.js"></script>
|
|
<script>
|
|
test(() => {
|
|
const script = document.createElement("script");
|
|
script.src = "./dummy.js"; // not appended/loaded; we only check the getter resolution
|
|
const value = script.src;
|
|
|
|
// Print booleans so expected output is stable.
|
|
const is_string = typeof value === "string";
|
|
println(`is_string = ${is_string}`);
|
|
|
|
// Must be absolute per spec: has a scheme like "file:" or "http:"
|
|
let has_protocol = false;
|
|
try { has_protocol = !!new URL(value).protocol; } catch {}
|
|
println(`has_protocol = ${has_protocol}`);
|
|
|
|
// Should end with the filename we set.
|
|
const ends_with = value.endsWith("/dummy.js");
|
|
println(`ends_with_dummy = ${ends_with}`);
|
|
});
|
|
</script> |