{"record":{"id":"09c799942c4ac86c","repo":"microsoft/playwright","slug":"unknown-target-targetid","errorCode":null,"errorMessage":"Unknown target: ${targetId}","messagePattern":"Unknown target: (.+?)","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/playwright-core/src/server/webkit/wkPage.ts","lineNumber":375,"sourceCode":"      this._provisionalPage = new WKProvisionalPage(session, this);\n      if (targetInfo.isPaused) {\n        this._provisionalPage.initializationPromise.then(() => {\n          this._pageProxySession.sendMayFail('Target.resume', { targetId: targetInfo.targetId });\n        });\n      }\n    }\n  }\n\n  private _onDispatchMessageFromTarget(event: Protocol.Target.dispatchMessageFromTargetPayload) {\n    const { targetId, message } = event;\n    if (this._provisionalPage && this._provisionalPage._session.sessionId === targetId)\n      this._provisionalPage._session.dispatchMessage(JSON.parse(message));\n    else if (this._session.sessionId === targetId)\n      this._session.dispatchMessage(JSON.parse(message));\n    else if (this._targetIdToFrameSession.has(targetId))\n      this._targetIdToFrameSession.get(targetId)!._session.dispatchMessage(JSON.parse(message));\n    else\n      throw new Error('Unknown target: ' + targetId);\n  }\n\n  private _addSessionListeners() {\n    this._sessionListeners = [\n      eventsHelper.addEventListener(this._session, 'Page.frameNavigated', event => this._onFrameNavigated(event.frame, false)),\n      eventsHelper.addEventListener(this._session, 'Page.navigatedWithinDocument', event => this._onFrameNavigatedWithinDocument(event.frameId, event.url)),\n      eventsHelper.addEventListener(this._session, 'Page.frameAttached', event => this._onFrameAttached(event.frameId, event.parentFrameId)),\n      eventsHelper.addEventListener(this._session, 'Page.frameDetached', event => this._onFrameDetached(event.frameId)),\n      eventsHelper.addEventListener(this._session, 'Page.willCheckNavigationPolicy', event => this._onWillCheckNavigationPolicy(event.frameId)),\n      eventsHelper.addEventListener(this._session, 'Page.didCheckNavigationPolicy', event => this._onDidCheckNavigationPolicy(event.frameId, event.cancel)),\n      eventsHelper.addEventListener(this._session, 'Page.loadEventFired', event => this._page.frameManager.frameLifecycleEvent(event.frameId, 'load')),\n      eventsHelper.addEventListener(this._session, 'Page.domContentEventFired', event => this._page.frameManager.frameLifecycleEvent(event.frameId, 'domcontentloaded')),\n      eventsHelper.addEventListener(this._session, 'Runtime.executionContextCreated', event => this._onExecutionContextCreated(event.context)),\n      eventsHelper.addEventListener(this._session, 'Runtime.bindingCalled', event => this._onBindingCalled(event.contextId, event.argument)),\n      eventsHelper.addEventListener(this._session, 'Console.messageAdded', event => this._onConsoleMessage(event)),\n      eventsHelper.addEventListener(this._session, 'Console.messageRepeatCountUpdated', event => this._onConsoleRepeatCountUpdated(event)),\n      eventsHelper.addEventListener(this._pageProxySession, 'Dialog.javascriptDialogOpening', event => this._onDialog(event)),\n      eventsHelper.addEventListener(this._pageProxySession, 'Dialog.javascriptDialogClosed', () => this._onDialogClosed()),","sourceCodeStart":357,"sourceCodeEnd":393,"githubUrl":"https://github.com/microsoft/playwright/blob/c8fc3bf8d31542d59b4d4d9eaab1df93ff541dc6/packages/playwright-core/src/server/webkit/wkPage.ts#L357-L393","documentation":"_onDispatchMessageFromTarget routes incoming target-session messages to one of: the provisional page, the main session, or a known frame session. If targetId matches none of these, the message cannot be routed and the dispatcher throws. This indicates an out-of-band or unexpected target session id from the WebKit target dispatcher.","triggerScenarios":"A protocol message arrives for a target whose session was never registered (or already torn down): late messages for a closed iframe target, OOPIF target race during teardown, or a target created by an extension/portal path not tracked by _targetIdToFrameSession.","commonSituations":"Mostly an internal/protocol race, not directly user-caused. Surfaces under heavy cross-origin iframe churn, COOP/COEP, or rapid navigation+close sequences. If reproducible it points to a missing target lifecycle handler.","solutions":["If seen intermittently during teardown, it is usually a benign race; ensure your test awaits close/navigation fully before exiting.","Reduce rapid open/close of cross-origin iframes to avoid late target messages.","If reproducible on stable flows, report to Playwright with a trace — it indicates a target-tracking gap in wkPage."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":"null","tryCatchPattern":"// Internal dispatcher; if surfaced, log and continue — late target messages are benign during teardown.\ntry { await page.goto(url); }\ncatch (e) { if (/Unknown target/.test(e.message)) { /* retry or ignore on teardown */ } else throw e; }","preventionTips":["Await navigation/close fully to drain late target messages.","Reduce rapid cross-origin iframe open/close churn."],"tags":["webkit","protocol","targets","frames","race"],"backgroundTag":null,"analyzedSha":"c8fc3bf8d31542d59b4d4d9eaab1df93ff541dc6","analyzedAt":"2026-08-12T07:26:36.950Z","schemaVersion":2},"datasetVersion":"2026-08-12T13:17:24.610Z"}