diff --git a/src/common/DOMWorld.ts b/src/common/DOMWorld.ts index 825d0c533e8..de09fe368a6 100644 --- a/src/common/DOMWorld.ts +++ b/src/common/DOMWorld.ts @@ -537,7 +537,15 @@ export class DOMWorld { private async _onBindingCalled( event: Protocol.Runtime.BindingCalledEvent ): Promise { - const { type, name, seq, args } = JSON.parse(event.payload); + let payload: { type: string; name: string; seq: number; args: unknown[] }; + try { + payload = JSON.parse(event.payload); + } catch { + // The binding was either called by something in the page or it was + // called before our wrapper was initialized. + return; + } + const { type, name, seq, args } = payload; if (type !== 'internal' || !this._ctxBindings.has(name)) return; if (!this._hasContext()) return; const context = await this.executionContext(); diff --git a/src/common/Page.ts b/src/common/Page.ts index 215e48576df..e805e2e7aa7 100644 --- a/src/common/Page.ts +++ b/src/common/Page.ts @@ -1132,7 +1132,15 @@ export class Page extends EventEmitter { private async _onBindingCalled( event: Protocol.Runtime.BindingCalledEvent ): Promise { - const { type, name, seq, args } = JSON.parse(event.payload); + let payload: { type: string; name: string; seq: number; args: unknown[] }; + try { + payload = JSON.parse(event.payload); + } catch { + // The binding was either called by something in the page or it was + // called before our wrapper was initialized. + return; + } + const { type, name, seq, args } = payload; if (type !== 'exposedFun' || !this._pageBindings.has(name)) return; let expression = null; try {