From 7f11f75ce07e102795953f0c9c89fac13f0ee7e6 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 18 Oct 2026 12:23:25 +0000 Subject: [PATCH] End pageController.js on a cloneable value for Firefox The extension injects this file with scripting.executeScript(), which hands the script's completion value back to the caller. That value was the socket returned by socket.connect(). Chrome quietly turns a value it can't structure-clone into null. Firefox rejects the whole executeScript() call instead ("result is non-structured-clonable data"), so the popup never got to send inject_controller, and the overlay, laser pointer and calibration marks never loaded. The script itself had already run, so the session was joined and key presses still worked. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01P3g3vcYRESg89oZuTf7eP5 --- pageController.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pageController.js b/pageController.js index de9a387..5027f80 100644 --- a/pageController.js +++ b/pageController.js @@ -533,3 +533,8 @@ function onlyRunOnce(f, t) { console.info("Joining session #" + remote_slide.session + " as host (" + remote_slide.injector + ")"); status("orange", "question", ""); socket.connect({session: remote_slide.session, role: "host", injector: remote_slide.injector}); +// The extension injects this file with scripting.executeScript(), which hands +// the script's last value back to it. Firefox rejects the whole call when that +// value cannot be structured-cloned - as the socket connect() returns cannot - +// and the extension would never go on to load the overlay. So end on a plain value. +undefined;