diff --git a/packages/desktop/build.rs b/packages/desktop/build.rs
index f114ae084..8d1f4b3e5 100644
--- a/packages/desktop/build.rs
+++ b/packages/desktop/build.rs
@@ -51,15 +51,21 @@ fn main() {
}"#;
let polling_request = format!(
r#"// Poll for requests
- window.interpreter.wait_for_request = () => {{
+ window.interpreter.wait_for_request = (headless) => {{
fetch(new Request("{EDITS_PATH}"))
.then(response => {{
response.arrayBuffer()
.then(bytes => {{
- requestAnimationFrame(() => {{
+ // In headless mode, the requestAnimationFrame callback is never called, so we need to run the bytes directly
+ if (headless) {{
run_from_bytes(bytes);
- }});
- window.interpreter.wait_for_request();
+ }}
+ else {{
+ requestAnimationFrame(() => {{
+ run_from_bytes(bytes);
+ }});
+ }}
+ window.interpreter.wait_for_request(headless);
}});
}})
}}"#
diff --git a/packages/desktop/headless_tests/events.rs b/packages/desktop/headless_tests/events.rs
index bb3b46206..646b951e1 100644
--- a/packages/desktop/headless_tests/events.rs
+++ b/packages/desktop/headless_tests/events.rs
@@ -17,7 +17,7 @@ pub(crate) fn check_app_exits(app: Component) {
dioxus_desktop::launch_cfg(
app,
- Config::new().with_window(WindowBuilder::new().with_visible(true)),
+ Config::new().with_window(WindowBuilder::new().with_visible(false)),
);
// Stop deadman's switch
diff --git a/packages/desktop/src/protocol.rs b/packages/desktop/src/protocol.rs
index 1dca21759..8184821ba 100644
--- a/packages/desktop/src/protocol.rs
+++ b/packages/desktop/src/protocol.rs
@@ -12,7 +12,7 @@ use crate::desktop_context::EditQueue;
static MINIFIED: &str = include_str!("./minified.js");
-fn module_loader(root_name: &str) -> String {
+fn module_loader(root_name: &str, headless: bool) -> String {
format!(
r#"
"#
@@ -39,6 +39,7 @@ pub(super) fn desktop_handler(
custom_index: Option,
root_name: &str,
edit_queue: &EditQueue,
+ headless: bool,
) {
// If the request is for the root, we'll serve the index.html file.
if request.uri().path() == "/" {
@@ -46,7 +47,7 @@ pub(super) fn desktop_handler(
// we'll look for the closing