Skip to content

Commit bc82023

Browse files
Merge pull request #1020 from lightpanda-io/inline_script_ignore_defer
Inline script tags ignore defer/async
2 parents d5363e5 + eb453f4 commit bc82023

File tree

4 files changed

+34
-2
lines changed

4 files changed

+34
-2
lines changed

src/browser/ScriptManager.zig

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -170,8 +170,8 @@ pub fn addFromElement(self: *ScriptManager, element: *parser.Element) !void {
170170
.element = element,
171171
.source = source,
172172
.url = remote_url orelse page.url.raw,
173-
.is_defer = try parser.elementGetAttribute(element, "defer") != null,
174-
.is_async = try parser.elementGetAttribute(element, "async") != null,
173+
.is_defer = if (remote_url == null) false else try parser.elementGetAttribute(element, "defer") != null,
174+
.is_async = if (remote_url == null) false else try parser.elementGetAttribute(element, "async") != null,
175175
};
176176

177177
if (source == .@"inline" and self.scripts.first == null) {

src/browser/html/elements.zig

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1480,6 +1480,10 @@ test "Browser.HTML.HTMLStyleElement" {
14801480
}, .{});
14811481
}
14821482

1483+
test "Browser: HTML.HTMLScriptElement" {
1484+
try testing.htmlRunner("html/script/inline_defer.html");
1485+
}
1486+
14831487
const Check = struct {
14841488
input: []const u8,
14851489
expected: ?[]const u8 = null, // Needed when input != expected
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<head>
2+
<script>
3+
let dyn1_loaded = 0;
4+
function loadScript(src) {
5+
const script = document.createElement('script');
6+
script.src = src;
7+
document.getElementsByTagName("head")[0].appendChild(script)
8+
}
9+
</script>
10+
</head>
11+
12+
<script src="../../testing.js"></script>
13+
14+
<script defer>
15+
loadScript('inline_defer.js');
16+
</script>
17+
18+
<script async>
19+
loadScript('inline_defer.js');
20+
</script>
21+
22+
<script id=inline_defer>
23+
// inline script should ignore defer and async attributes. If we don't do
24+
// this correctly, we'd end up in an infinite loop
25+
// https://github.com/lightpanda-io/browser/issues/1014
26+
testing.eventually(() => testing.expectEqual(2, dyn1_loaded));
27+
</script>
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
dyn1_loaded += 1;

0 commit comments

Comments
 (0)