From 63794aef274c2ca9303420c4aa56657e58945feb Mon Sep 17 00:00:00 2001 From: inca Date: Mon, 15 Sep 2025 17:38:51 +0300 Subject: [PATCH] chore: use async/await for runtime scripts injection --- src/main/cdp/execution-context.ts | 9 +++++---- src/main/cdp/frame.ts | 2 +- src/main/cdp/target.ts | 9 +-------- 3 files changed, 7 insertions(+), 13 deletions(-) diff --git a/src/main/cdp/execution-context.ts b/src/main/cdp/execution-context.ts index 9b8bf16..db01a16 100644 --- a/src/main/cdp/execution-context.ts +++ b/src/main/cdp/execution-context.ts @@ -203,17 +203,18 @@ export class ExecutionContext { throw err; } - initContentScripts(scripts: ContentScript[]) { + async initContentScripts(scripts: ContentScript[]) { const options = { toolkitBinding: this.page.toolkitBinding, }; - for (const { fn, filename } of scripts) { + const promises = scripts.map(async ({ fn, filename }) => { const source = `(${fn.toString()})(${JSON.stringify(options)})\n//# sourceURL=${filename}\n`; - this.page.sendAndForget('Runtime.evaluate', { + await this.page.send('Runtime.evaluate', { contextId: this.executionContextId, expression: source, }); - } + }); + await Promise.allSettled(promises); } protected onExecutionContextsCleared() { diff --git a/src/main/cdp/frame.ts b/src/main/cdp/frame.ts index d32cbc9..5892e39 100644 --- a/src/main/cdp/frame.ts +++ b/src/main/cdp/frame.ts @@ -60,7 +60,7 @@ export class Frame extends EventEmitter { grantUniveralAccess: true, }); this._isolatedWorld = new ExecutionContext(this, executionContextId); - this._isolatedWorld.initContentScripts(runtimeScripts); + await this._isolatedWorld.initContentScripts(runtimeScripts); return this._isolatedWorld; } diff --git a/src/main/cdp/target.ts b/src/main/cdp/target.ts index 5f8dded..ed416f5 100644 --- a/src/main/cdp/target.ts +++ b/src/main/cdp/target.ts @@ -2,7 +2,7 @@ import { EventEmitter } from 'events'; import { Exception } from '../exception.js'; import { Browser } from './browser.js'; -import { runtimeScripts, stubScripts } from './inject/index.js'; +import { stubScripts } from './inject/index.js'; import { InterceptedRequest } from './interceptor.js'; import { Page, PageNavigateOptions, PageWaitOptions } from './page.js'; import { CdpFrame, CdpLifecycleEvent, CdpLoadingFailed, CdpRequestPaused, CdpRequestWillBeSent, CdpResponse, CdpResponseReceived, CdpTargetInfo, CdpTargetType } from './types.js'; @@ -382,12 +382,5 @@ export class Target extends EventEmitter { source: `(${fn.toString()})()` }); }); - runtimeScripts.forEach(({ fn, filename }) => { - const options = { - toolkitBinding: this.browser.config.toolkitBinding, - }; - const source = `(${fn.toString()})(${JSON.stringify(options)})\n//# sourceURL=${filename}\n`; - this.sendAndForget('Page.addScriptToEvaluateOnNewDocument', { source }); - }); } }