diff --git a/packages/core/src/canvas/index.ts b/packages/core/src/canvas/index.ts index a89badcf2..bde2314dc 100644 --- a/packages/core/src/canvas/index.ts +++ b/packages/core/src/canvas/index.ts @@ -138,7 +138,7 @@ export default class CanvasModule extends Module { */ getDocument() { const frame = this.getFrameEl(); - return frame?.contentDocument as Document; + return frame?.contentDocument; } /** @@ -566,7 +566,7 @@ export default class CanvasModule extends Module { * @returns {Boolean} */ hasFocus() { - return this.getDocument().hasFocus(); + return !!this.getDocument()?.hasFocus?.(); } /** diff --git a/packages/core/src/utils/sorter/ComponentSorter.ts b/packages/core/src/utils/sorter/ComponentSorter.ts index d286390d5..d5daf520d 100644 --- a/packages/core/src/utils/sorter/ComponentSorter.ts +++ b/packages/core/src/utils/sorter/ComponentSorter.ts @@ -244,9 +244,11 @@ export default class ComponentSorter extends const targetDoc = Canvas.getDocument(); let range = null; + if (!targetDoc) return; + const poiner = getPointerEvent(e); - // @ts-ignore + // @ts-ignore not yet widely supported if (targetDoc.caretPositionFromPoint) { // New standard method // @ts-ignore diff --git a/packages/core/test/specs/canvas/index.ts b/packages/core/test/specs/canvas/index.ts index 32d613a52..153b27faa 100644 --- a/packages/core/test/specs/canvas/index.ts +++ b/packages/core/test/specs/canvas/index.ts @@ -20,6 +20,20 @@ describe('Canvas', () => { expect(canvas).toBeTruthy(); }); + describe('Focus', () => { + test('hasFocus() returns false if document is unavailable', () => { + jest.spyOn(canvas, 'getDocument').mockReturnValue(null as any); + expect(canvas.hasFocus()).toBe(false); + }); + + test('hasFocus() proxies document hasFocus when available', () => { + const hasFocus = jest.fn(() => true); + jest.spyOn(canvas, 'getDocument').mockReturnValue({ hasFocus } as any); + expect(canvas.hasFocus()).toBe(true); + expect(hasFocus).toHaveBeenCalledTimes(1); + }); + }); + describe('Canvas Spots', () => { describe('addSpot()', () => { test('Add single spot', () => { diff --git a/packages/core/test/specs/grapesjs/index.ts b/packages/core/test/specs/grapesjs/index.ts index 8dc9e5f44..725308648 100644 --- a/packages/core/test/specs/grapesjs/index.ts +++ b/packages/core/test/specs/grapesjs/index.ts @@ -122,8 +122,8 @@ describe('GrapesJS', () => { config.protectedCss = ''; const editor = initTestEditor(config); editor.onReady(() => { - const htmlEl = editor.Canvas.getDocument().documentElement; - expect(htmlEl.outerHTML.replace(/\s+/g, ' ')).toContain('body { background-color: #fff'); + const htmlEl = editor.Canvas.getDocument()?.documentElement; + expect(htmlEl?.outerHTML.replace(/\s+/g, ' ')).toContain('body { background-color: #fff'); done(); }); });