From 89339cdd969de727be71765f339ef3dc5e1b060f Mon Sep 17 00:00:00 2001 From: German Khokhlov Date: Tue, 3 Nov 2026 21:47:13 +0400 Subject: [PATCH] Leave the scope mask off a globe whose container holds no DOM children --- src/scopeMask.js | 3 ++- src/scopeMask.test.mjs | 8 ++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/scopeMask.js b/src/scopeMask.js index a8ecf12f2..1e61a0c2e 100644 --- a/src/scopeMask.js +++ b/src/scopeMask.js @@ -454,7 +454,8 @@ function globeOf(target) { export function installScopeMask(target) { if (_canvas) return; const globe = globeOf(target); - if (!globe.container) return; + // Only a DOM container can hold the mask (an engine double's cannot). + if (typeof globe.container?.appendChild !== 'function') return; syncScopeMaskAppearance(); _container = globe.container; _globe = globe; diff --git a/src/scopeMask.test.mjs b/src/scopeMask.test.mjs index b65d36d1c..0161a9a86 100644 --- a/src/scopeMask.test.mjs +++ b/src/scopeMask.test.mjs @@ -801,3 +801,11 @@ test('on a globe engine (Navara) the mask goes into its host container and follo dom.restore(); } }); + +test('an engine without a DOM container gets no mask and no listeners', async () => { + const { createFakeEngine } = await import('./globe/testing/fakeEngine.js'); + const engine = createFakeEngine({ kind: 'navara' }); + installScopeMask(engine); + assert.equal(engine.frames.preRender.numberOfListeners, 0); + destroyScopeMask(); +});