{"record":{"id":"f50c2c70cba8abb8","repo":"grafana/k6","slug":"adding-init-script-to-browser-context-w","errorCode":null,"errorMessage":"adding init script to browser context: %w","messagePattern":"adding init script to browser context: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/js/modules/k6/browser/common/browser_context.go","lineNumber":171,"sourceCode":"\tif err := b.AddInitScript(js.WebVitalInitScript); err != nil {\n\t\treturn nil, fmt.Errorf(\"adding web vital init script to new browser context: %w\", err)\n\t}\n\tif err := b.setDownloadsPath(opts.DownloadsPath); err != nil {\n\t\treturn nil, fmt.Errorf(\"setting downloads path: %w\", err)\n\t}\n\n\treturn &b, nil\n}\n\n// AddInitScript adds a script that will be initialized on all new pages.\nfunc (b *BrowserContext) AddInitScript(script string) error {\n\tb.logger.Debugf(\"BrowserContext:AddInitScript\", \"bctxid:%v\", b.id)\n\n\tb.evaluateOnNewDocumentSources = append(b.evaluateOnNewDocumentSources, script)\n\n\tfor _, p := range b.browser.getPages() {\n\t\tif err := p.evaluateOnNewDocument(script); err != nil {\n\t\t\treturn fmt.Errorf(\"adding init script to browser context: %w\", err)\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc (b *BrowserContext) applyAllInitScripts(p *Page) error {\n\tfor _, source := range b.evaluateOnNewDocumentSources {\n\t\tif err := p.evaluateOnNewDocument(source); err != nil {\n\t\t\treturn fmt.Errorf(\"adding init script to browser context: %w\", err)\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// Browser returns the browser instance that this browser context belongs to.\nfunc (b *BrowserContext) Browser() *Browser {","sourceCodeStart":153,"sourceCodeEnd":189,"githubUrl":"https://github.com/grafana/k6/blob/93accf6570dcd306ca5e99cc44c393ee3797761b/internal/js/modules/k6/browser/common/browser_context.go#L153-L189","documentation":"browserContext.addInitScript(script) records the script for future pages and immediately injects it into every currently open page (browser_context.go:171). If any page's CDP Page.addScriptToEvaluateOnNewDocument call fails, the whole operation errors with this wrap naming the init-script step.","triggerScenarios":"Calling addInitScript after one of the open pages crashed or its session closed at the CDP level; connection lost mid-loop over pages; extremely large script payloads troubling the websocket transport.","commonSituations":"Injecting auth/bootstrap scripts after navigation has started; races between page.close() and addInitScript(); injecting big bundled JS as an init script.","solutions":["Call addInitScript immediately after newContext(), before any pages exist, so the per-page loop is empty","Close/remove crashed pages before adding scripts; the wrapped error identifies the failing page","Minify or split very large init scripts","Recreate the context if the wrapped error shows the connection is dead"],"exampleFix":"// before\nconst page = ctx.newPage()\nawait page.goto('https://example.com')\nctx.addInitScript('window.token = \"x\"') // injects into live pages, can fail\n\n// after\nconst ctx = browser.newContext()\nctx.addInitScript('window.token = \"x\"') // no pages yet — safe\nconst page = ctx.newPage()","handlingStrategy":"validation","validationCode":"// register init scripts before any page exists\nconst ctx = browser.newContext()\nctx.addInitScript('window.bootstrap = true') // no pages yet — cannot fail per-page\nconst page = ctx.newPage()","typeGuard":null,"tryCatchPattern":"try {\n  ctx.addInitScript(script)\n} catch (e) {\n  if (/adding init script/.test(String(e))) {\n    // a live page's session failed; recreate the context for a clean slate\n    throw e\n  }\n  throw e\n}","preventionTips":["Call addInitScript immediately after newContext()","Minify large init scripts","Close crashed pages before injecting scripts"],"tags":["init-script","cdp","browser-context","pages"],"backgroundTag":null,"analyzedSha":"93accf6570dcd306ca5e99cc44c393ee3797761b","analyzedAt":"2026-08-15T21:23:27.118Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}