diff --git a/src/browser/ScriptManager.zig b/src/browser/ScriptManager.zig
index 2788e1a5..a23ba068 100644
--- a/src/browser/ScriptManager.zig
+++ b/src/browser/ScriptManager.zig
@@ -643,6 +643,18 @@ pub const PendingScript = struct {
// if async isn't known, it'll fallback to defer.
const script = &self.script;
+
+ // Module scripts are deferred by default.
+ // https://v8.dev/features/modules#defer
+ if (script.kind == .module) {
+ return &self.manager.deferreds;
+ }
+
+ // Script is not a module but inline, we ignore async/defer properties.
+ if (script.source == .@"inline") {
+ return &self.manager.scripts;
+ }
+
if (script.is_async) {
return &self.manager.asyncs;
}
@@ -651,12 +663,6 @@ pub const PendingScript = struct {
return &self.manager.deferreds;
}
- // Module scripts are deferred by default.
- // https://v8.dev/features/modules#defer
- if (script.kind == .module) {
- return &self.manager.deferreds;
- }
-
return &self.manager.scripts;
}
};
diff --git a/src/browser/html/elements.zig b/src/browser/html/elements.zig
index 8667c04f..b676d5f1 100644
--- a/src/browser/html/elements.zig
+++ b/src/browser/html/elements.zig
@@ -1350,6 +1350,7 @@ test "Browser: HTML.HtmlScriptElement" {
try testing.htmlRunner("html/script/import.html");
try testing.htmlRunner("html/script/dynamic_import.html");
try testing.htmlRunner("html/script/importmap.html");
+ try testing.htmlRunner("html/script/order.html");
}
test "Browser: HTML.HtmlSlotElement" {
diff --git a/src/tests/html/script/order.html b/src/tests/html/script/order.html
new file mode 100644
index 00000000..7efbbef3
--- /dev/null
+++ b/src/tests/html/script/order.html
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/tests/html/script/order.js b/src/tests/html/script/order.js
new file mode 100644
index 00000000..31e602fc
--- /dev/null
+++ b/src/tests/html/script/order.js
@@ -0,0 +1,2 @@
+list += 'a';
+testing.expectEqual('a', list);
diff --git a/src/tests/html/script/order_async.js b/src/tests/html/script/order_async.js
new file mode 100644
index 00000000..97c9adac
--- /dev/null
+++ b/src/tests/html/script/order_async.js
@@ -0,0 +1,3 @@
+list += 'f';
+testing.expectEqual('abcdef', list);
+
diff --git a/src/tests/html/script/order_defer.js b/src/tests/html/script/order_defer.js
new file mode 100644
index 00000000..3911b644
--- /dev/null
+++ b/src/tests/html/script/order_defer.js
@@ -0,0 +1,2 @@
+list += 'e';
+testing.expectEqual('abcde', list);